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

Terraform含列表的多映射结构遍历问题求助及优化建议

Terraform数据结构遍历解决方案与优化建议

遍历问题解决

你尝试的嵌套for表达式语法有误,且Terraform的映射(Map)类型不允许重复键,无法直接生成重复key的映射。要实现你期望的键值对展开效果,可通过扁平化列表+格式化输出完成:

步骤1:扁平化数据结构

先将嵌套的map(list)结构转换为包含单个键值对的对象列表:

locals {
  values = {
    key1 = ["a", "b"],
    key2 = ["c", "d"]
  }

  # 扁平化处理:将每个列表元素与对应key组合成独立对象
  flattened_items = flatten([
    for key, vals in local.values : [
      for val in vals : {
        group_key = key
        item_val  = val
      }
    ]
  ])
}

步骤2:生成期望的格式化输出

通过output结合join将扁平化列表转换为目标文本格式:

output "expanded_output" {
  value = join("\n", [
    for item in local.flattened_items : "${upper(item.group_key)}: ${item.item_val}"
  ])
}

执行terraform apply后,输出结果为:

KEY1: a
KEY1: b
KEY2: c
KEY2: d

数据结构优化建议

优化方向取决于你的实际使用场景:

  • 若频繁需要扁平化使用:直接存储为键值对对象列表,省去嵌套结构的遍历成本:
    locals {
      values = [
        { group_key = "key1", item_val = "a" },
        { group_key = "key1", item_val = "b" },
        { group_key = "key2", item_val = "c" },
        { group_key = "key2", item_val = "d" }
      ]
    }
    
  • 若需保留分组逻辑:原map(list)结构本身合理,适合按key批量操作元素,仅在需要扁平化时使用上述flatten方法即可。
  • 若用于资源/模块遍历:直接用扁平化后的列表作为for_each数据源,避免嵌套循环,让代码更简洁。

内容的提问来源于stack exchange,提问作者N. J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:45:31