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
相关产品推荐
相关产品推荐

