背景
TerraformでLambda実行環境を作成しようと試みたものの、エラーが発生
Error: filename, s3_* or image_uri attributes must be set
TerraformでLambda関数を作成するときは、関数ファイルを用意しなければならない。
しかし、とりあえずLambdaの実行環境だけ作成して、関数は後で用意したいパターンもある。
そういうときはどうすればいいのか・・?
解決策
null_resourceを使ってterraform apply
時に空のzipファイルを生成し、それを
コード
main.tf
# 関数作成
resource "aws_lambda_function" "lambda" {
filename = data.archive_file.null.output_path
function_name = "hoge_function"
handler = "hoge_function"
runtime = "go1.x"
role = data.aws_iam_role.role.arn
}
# ダミーの関数ファイルを作成する
data "archive_file" "null" {
type = "zip"
output_path = "${path.module}/null.zip"
source {
content = "null"
filename = "bootstrap"
}
depends_on = [
null_resource.this
]
}
resource "null_resource" "this" {}
# 適当なロール(for Lambda)を用意しておく
data "aws_iam_role" "role" {
name = "hoge-role"
}
depends_on = [
null_resource.this
]
archive_fileとnull_resourceの間で依存関係を設定しており、
terraform apply
を実行すると、null_resourceの生成をトリガーに、ダミーファイル(null.zip) が生成される
terraform apply
時にローカルにダミーファイルが作成される。
コンソールで作成したLambda関数を確認
実行環境が作成できているのを確認したら、別途でソースコードをアップロードすればOK
参考記事