我使用 Terraform 来管理 Google Cloud Functions 的资源。但是,虽然云功能的初始部署有效,但当我在之后使用 terraform apply
时,没有重新部署更改云功能源代码(源存档 sourcecode.zip
)的进一步部署更新源存档。
存储桶对象得到更新,但这不会触发云函数资源的更新/重新部署。
这是提供商的错误吗? 有没有办法在代码更改时重新部署 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"
}
最佳答案
您可能会认为这是一个缺陷。就个人而言,我不太确定。
当执行“应用”命令时,Terraform 有一些逻辑。
要思考的问题——terraform如何知道云函数的源代码发生了变化,要重新部署云函数? Terraform 不会“读取”云函数源代码,不会将其与之前的版本进行比较。它只读取 terraform 的脚本文件。如果这些文件中没有任何更改(与状态文件相比,并且 GCP 项目中存在资源)- 无需重新部署。
因此,有些事情是要改变的。例如存档文件的名称。在这种情况下,terraform 发现必须重新部署云函数(因为状态文件具有存档对象的旧名称)。重新部署云功能。
一段时间前提供了一个带有更详细解释的代码示例:don't take into account the question working - just read the answer
关于google-cloud-platform - 是否可以在 Terraform 中更新 GCP Cloud Functions 的源代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71320503/