google-cloud-platform - 是否可以在 Terraform 中更新 GCP Cloud Functions 的源代码?

标签 google-cloud-platform google-cloud-functions terraform terraform-provider-gcp

我使用 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/

相关文章:

python - 如何将 "array of strings"添加为 BigQuery 的架构值

通过 HTTP 触发时 Firebase 云函数执行两次

terraform - 通过云教程使用变量的问题

linux - 如何在虚拟机规模集中使用 terraform 请求 Azure Spot 实例?

azure - 如何将包含 terraform 文件的文件夹放入 docker 容器中并进一步将其部署到 azure

google-cloud-platform - GCP 端点 "Try this API"授权 URL

tomcat - gcloud 计算引擎 Windows 服务器端口 8080

wordpress - 如何为托管在 Google Cloud Platform 实例中的 Wordpress 网站安装 SSL 证书?

android - 使用 Firebase 云功能和 Firestore 在 Android 上验证购买

node.js - Firebase云函数无法读取未定义的属性 'displayName'