今回は terraformで lambdaを管理してみる。ただし terraform での Lambdaの管理は辛いというような意見が散見されるので、良い方法ではないと思われる。 まぁあくまでも入門ということで。
公式はページ ここ
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}経由で指定している。 理由がわからないけど。