是否可以在 Terraform 中更新 GCP Cloud Function 的源代码?

fin*_*tis 8 google-cloud-platform terraform google-cloud-functions terraform-provider-gcp

我使用 Terraform 来管理 Google Cloud Functions 的资源。但是,虽然云函数的初始部署有效,但当sourcecode.zip我在更新源存档后使用时,未重新部署更改后的云函数源代码(源存档)的进一步部署terraform apply

存储桶对象被更新,但这不会触发云函数资源的更新/重新部署。

这是提供商的错误吗?当代码更改时,有没有办法在 terraform 中重新部署函数?

我正在使用的简化源代码:

resource "google_storage_bucket" "cloud_function_source_bucket" {
  name                        = "${local.project}-function-bucket"
  location                    = local.region
  uniform_bucket_level_access = true
}

resource "google_storage_bucket_object" "function_source_archive" {
  name   = "sourcecode.zip"
  bucket = google_storage_bucket.cloud_function_source_bucket.name
  source = "./../../../sourcecode.zip"
}

resource "google_cloudfunctions_function" "test_function" {
  name                          = "test_func"
  runtime                       = "python39"
  region                        = local.region
  project                       = local.project
  available_memory_mb           = 256
  source_archive_bucket         = google_storage_bucket.cloud_function_source_bucket.name
  source_archive_object         = google_storage_bucket_object.function_source_archive.name
  trigger_http                  = true
  entry_point                   = "trigger_endpoint"
  service_account_email         = google_service_account.function_service_account.email
  vpc_connector                 = "projects/${local.project}/locations/${local.region}/connectors/serverless-main"
  vpc_connector_egress_settings = "ALL_TRAFFIC"
  ingress_settings              = "ALLOW_ALL"
}
Run Code Online (Sandbox Code Playgroud)

Sud*_*dav 6

您可以将 zip 内容的 MD5 或 SHA256 校验和附加到存储桶对象的名称。每当源代码发生变化时,这将触发云函数的重新创建。

${data.archive_file.function_src.output_md5}

data "archive_file" "function_src" {
type = "zip"
source_dir = "SOURCECODE_PATH/sourcecode"
output_path = "./SAVING/PATH/sourcecode.zip"
}

resource "google_storage_bucket_object" "function_source_archive" {
name   = "sourcecode.${data.archive_file.function_src.output_md5}.zip"
bucket = google_storage_bucket.cloud_function_source_bucket.name
source = data.archive_file.function_src.output_path
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关 terraform archive 的更多信息 - terraform archive_file