有可能在Terraform中更新GCP云函数的源代码吗



我使用Terraform来管理谷歌云功能的资源。但是,尽管云功能的初始部署是有效的,但当我在更新源归档后使用terraform apply时,没有重新部署更改了云功能源代码的进一步部署(源归档sourcecode.zip(。

存储桶对象得到更新,但这不会触发云功能资源的更新/重新部署。

这是提供者的错误吗?当代码发生变化时,有没有办法在地形中重新部署函数

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

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"
}

您可以将zip内容的MD5或SHA256校验和附加到bucket对象的名称中。这将在源代码发生更改时触发云函数的重新创建。

${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
}

你可以在这里阅读更多关于地形档案的信息-地形档案_file

您可能会认为这是一个缺陷。就我个人而言,我不太确定。

Terraform有一些逻辑;应用";命令被执行。

需要思考的问题是,terraform如何知道云函数的源代码发生了变化,云函数将被重新部署?Terraform没有";读取";云函数的源代码,没有将其与以前的版本进行比较。它只读取地形的脚本文件。如果这些文件中没有任何更改(与状态文件和GCP项目中存在的资源相比(,则不需要重新部署任何内容。

因此,有些事情需要改变。例如,存档文件的名称。在这种情况下,terraform发现必须重新部署云函数(因为状态文件具有存档对象的旧名称(。云功能已重新部署。

不久前提供了一个带有更详细解释的代码示例:不要考虑问题的有效性,只需阅读答案

相关内容

  • 没有找到相关文章

最新更新