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

在Terraform中从flatten结果创建Map的技术问题

解决Terraform中合并Map列表为单个Map的问题

你的核心问题是当前代码生成的是多个单键Map组成的列表,而你需要的是整合所有键值对的单个Map。以下两种方案可以解决这个问题:

方案1:用merge+展开操作符合并现有列表

在原代码基础上,通过merge函数将flatten后的列表中的所有小Map合并为一个大Map,配合Terraform的**展开操作符...**把列表元素作为merge的参数传入:

locals {
  object = {
    1 = {
      name = "val1"
      keys = ["val1"]
    }
    2 = {
      name = "val2"
      keys = ["val2", "val3", "val4"]
    }
  }
  associations = merge(flatten(
    [
      for obj in local.object : [
        for association_key in obj.keys : {
          "${obj.name}-${association_key}" = {
            key             = obj.name
            association_key = association_key
          }
        }
      ]
    ]
  )...)
}

如果存在重复的键,merge会自动保留最后出现的键值对,保证Map的键唯一性。

方案2:用嵌套for表达式直接生成目标Map

更简洁的方式是跳过中间的列表生成步骤,直接通过嵌套for表达式一次性构建出完整的Map:

locals {
  object = {
    1 = {
      name = "val1"
      keys = ["val1"]
    }
    2 = {
      name = "val2"
      keys = ["val2", "val3", "val4"]
    }
  }
  associations = {
    for obj in local.object, association_key in obj.keys :
    "${obj.name}-${association_key}" => {
      key             = obj.name
      association_key = association_key
    }
  }
}

这种方式直接遍历每个obj和对应的association_key,生成键值对,逻辑更清晰,性能也更优。同样,若出现重复键,后遍历到的会覆盖先出现的,确保键唯一。

执行以上任意方案后,local.associations就会变成你需要的单个Map结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:47:47