You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform传递对象列表至Azure容器应用模块报错解决

解决Terraform Azure Container App Secrets传递错误

问题根源

报错提示secret.value is list of object,说明模块内的dynamic "secret"块遍历的是列表的列表,而非单个{name, value}对象的列表——每个迭代项拿到的是整个secrets列表,而非单个密钥对象,自然无法直接访问.name/.value属性。

修复步骤

1. 修正模块内的dynamic块遍历逻辑

打开模块的main.tf,找到azurerm_container_app资源下的dynamic "secret"块,确保for_each直接指向定义的secrets变量(而非嵌套的列表或其他结构):

dynamic "secret" {
  # 确保这里遍历的是单个对象组成的列表,比如var.secrets
  for_each = var.secrets
  content {
    name  = secret.value.name
    value = secret.value.value
  }
}

如果模块原本的for_each写成了[var.secrets](把整个列表包装成了单元素列表),会导致每个迭代项是整个secrets列表,必须改成直接遍历var.secrets。

2. 确保传入的变量格式匹配模块要求

检查模块variables.tf中secrets的定义,确认是单个对象的列表:

variable "secrets" {
  type = list(object({
    name  = string
    value = string
  }))
  description = "Container App的密钥列表"
}

在调用模块时,传入符合结构的列表,直接引用变量或其他模块输出:

module "container_app" {
  source = "./modules/container_app"

  # 传入正确格式的密钥列表
  secrets = [
    {
      name  = "DB_PASSWORD"
      value = var.db_password
    },
    {
      name  = "API_KEY"
      value = module.keyvault.api_key_value
    }
  ]
}

注意不要将secrets嵌套在其他对象中(比如config = { secrets = [...] }),除非模块变量明确要求这种嵌套结构。

3. 验证配置

执行terraform plan检查是否还有错误,确认每个密钥对象都能被正确解析。

内容的提问来源于stack exchange,提问作者JordanBean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 09:42:44