TerraformでAWS lambdaをデプロイすると、コードに更新があった時だけリソースも更新してくれますよね。
GCP Cloud Functionsの場合、残念ながらコードを更新してもリソースの更新がかかりません。
今回は、そんな残念なTerraformくんにDirty hackを仕込んでちゃんとコードを更新したときにリソースにも更新がかかるようにしたいと思います。
まあ、アップロードするファイルにmd5付けるだけなんですけどね。
# Cloud Functionsにアップロードするファイルをzipに固める。
data "archive_file" "src" {
type = "zip"
source_dir = "./src"
output_path = "./src.zip"
}
# GCS Bucketにzipで固めたソースコードをアップロードする。
resource "google_storage_bucket_object" "src" {
# ここでパスにmd5を付与することで、変更が検知できるようにする。これがだいじ。
name = "functions/src_${data.archive_file.src.output_md5}.zip"
bucket = "foo_bucket"
source = data.archive_file.src.output_path
}
resource "google_cloudfunctions_function" "service" {
name = "service"
runtime = "python37"
source_archive_bucket = "foo_bucket"
source_archive_object = google_storage_bucket_object.src.name
trigger_http = true
available_memory_mb = 128
timeout = 120
entry_point = "run"
}
おわり。