簡體   English   中英

在 Terraform for Cloud Run 中創建動態秘密變量塊

[英]Creating a dynamic secret variable block within Terraform for Cloud Run

我正在嘗試根據字符串列表動態創建以下塊

        env {
          name = "SECRET_ENV_VAR"
      value_from {
            secret_key_ref {
              name = google_secret_manager_secret.secret.secret_id
              key = "1"
            }
          }
        }

基於文檔: https ://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_service#example-usage---cloud-run-service-secret-environment-variables

我想動態添加 Secrets,並定義了以下動態塊:

        dynamic "env" {
          for_each = toset(var.secrets)
          content {
            name = each.value
            value_from {
              secret_key_ref {
                name = each.value
                key  = "1"
              }
            }
          }
        }

其中secrets是 list(string) 類型的變量

但是,這會引發錯誤: Blocks of type "value_from" are not expected here.

我不確定我遺漏了什么,或者我在哪里錯誤地指定了 value_from 塊。

有人能指出我正確的方向來解決這個問題嗎?

更新; 根據這篇文章評論中的建議,我還嘗試將此變量實現為地圖。 ( https://www.terraform.io/docs/language/expressions/dynamic-blocks.html#multi-level-nested-block-structures )

        dynamic "env" {
          for_each = var.secrets
          content {
            name = each.key
            dynamic "value_from" {
              for_each = env.value.name
              secret_key_ref {
                name = value_from.value.name
                key  = value_from.value.version
              }
            }
          }
        }

但是,這也會給出相同的錯誤。 Blocks of type "value_from" are not expected here.

在此示例中,secrets 變量被定義為具有以下值的列表(任意):

secrets = [
    {
      name    = "SECRET"
      version = "1"
    }
  ]

你必須升級你的 gcp provider v3.67.0中添加了對google_cloud_run_service中的機密的支持。 當前版本是v4.1.0 ,這意味着您必須使用非常舊的 gcp 提供程序。

最后,我通過將變量類型更改為 map(any) 解決了這個問題:

secrets = {
    "SECRET" = "1"
}

這允許我創建“動態”環境塊,而無需實現嵌套的動態塊。

我正在嘗試做類似的事情,但仍然出現錯誤。

這是我的 main.tf

  dynamic "env" {
      for_each = var.basic-secrets
      content {
        name = each.key
        dynamic "value_from" {
          for_each = env.value.name
          secret_key_ref {
            name = value_from.value.name
            key  = value_from.value.version
          }
        }
      }
    }

變量.tf

basic-secrets = {
"AUTH0_SECRET" = "latest"}

變量類型

variable "basic-secrets" {
 type = map(any)}

錯誤是:不支持的塊類型。 │ 此處不應包含“secret_key_ref”類型的塊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM