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

Terraform从关联map向已有map列表新增键值对避免数据重复

问题根因

你写的嵌套循环逻辑会做笛卡尔积匹配:对每一个账号条目,都会遍历account_map下的所有键值对生成对应记录,相当于每个账号都会生成和account_map元素数相等的条目,最终必然出现大量重复数据,这个场景根本不需要用flatten搭配嵌套循环实现。

正确实现代码

只需要单层循环遍历账号列表,把原有账号属性和匹配到的type字段合并即可,不需要嵌套结构:

locals {
  accounts = [
    {
      "id" = "111111111111"
      "status" = "ACTIVE"
    },
    {
      "id" = "222222222222"
      "status" = "ACTIVE"
    }
  ]

  account_map = {
      111111111111 = "DEV"
      222222222222 = "PROD"
    }

  # 生成目标结构的逻辑
  account_info = [
    for acc in local.accounts : merge(
      acc,
      { type = lookup(local.account_map, acc.id, null) }
    )
  ]
}
逻辑说明
  • 直接通过账号id作为key,从account_map中索引对应的环境类型,不会产生多余的匹配条目
  • 用lookup函数是做容错处理:如果某个账号id没有在account_map中定义,type字段会被赋值为null,不会直接触发Terraform执行报错;如果能保证所有账号id都在map中存在,也可以直接写local.account_map[acc.id]简化代码
  • 执行后输出的account_info结构完全符合预期:
[
  {
    "id" = "111111111111"
    "status" = "ACTIVE"
    "type" = "DEV" 
  },
  {
    "id" = "222222222222"
    "status" = "ACTIVE"
    "type" = "PROD"
  }
]

你贴的预期示例里第一个账号id少写了一位,写成了11位的11111111111,实际生成结果会保留原始变量里的12位正确id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:42:25