続:Terraformに入門してみた(Lambda)

続: Terraform入門

これこれ の続き。

今回は terraformで lambdaを管理してみる。ただし terraform での Lambdaの管理は辛いというような意見が散見されるので、良い方法ではないと思われる。 まぁあくまでも入門ということで。

公式はページ ここ

terraformのコード

data "archive_file" "lambda_zip" {
    type = "zip"
    source_dir = "${path.module}/src"
    output_path = "${path.module}/lambda_function_payload.zip"
}

resource "aws_lambda_function" "test_lambda" {
  # zipで固めたソースコードを指定する。ライブラリも含めて固める必要がある
  filename      = "lambda_function_payload.zip"
  # Lambdaの関数名
  function_name = "lambda_function_name"
  # Lambdaの利用するrole のarnを指定する
  role          = "${aws_iam_role.iam_for_lambda.arn}"
  # 呼び出しのhandlerとなる関数
  handler       = "exports.test"
  # SHA256のhashをbase64でエンコードしたもの。
  # zip化したファイル名を指定してあげれば良い。
  source_code_hash = "${filebase64sha256("lambda_function_payload.zip")}"

  # 利用するランタイム,
  # pythonなら"python3.6" といった感じにかける。
  runtime = "nodejs8.10"

  # タイムアウトの秒数指定
  timeout = 300

  # 環境変数
  environment {
    variables = {
      foo = "bar"
    }
  }
}

注意点

Lambdaのソースコード自体は archive_fileで固めることができるが、 source_dir 、output_pathは相対パスだとうまく動かなかったので、 ${path.module}経由で指定している。 理由がわからないけど。