Terraform如何将map列表中相同key的value合并为单map下的列表结构
实现方案
你可以直接通过Terraform内置的for表达式和内置函数组合完成转换,不需要额外编写自定义逻辑,示例代码如下:
locals { # 你的原始ids数据源 ids = [ { "d81f6779-031f-4aa6-8e88-3242f65e35c0" = "478da44dc0aa8b0cdce5e7448c9509a5095a0f93" }, { "d81f6779-031f-4aa6-8e88-3242f65e35c0" = "131e25de9ffd028fc9dab497f537eecb6d1b0faf" }, { "e2e6deb4-8512-4089-b2ec-ef77447dabb7" = "f8ea0d6234a8ee2858a3ae04952c6c974337cf6a" }, { "e2e6deb4-8512-4089-b2ec-ef77447dabb7" = "143b826f93e78d5a18ac9276972e80414262755e" }, { "e2e6deb4-8512-4089-b2ec-ef77447dabb7" = "e7fe936edcc34c258c35aa19b9c702e553e3b265" }, ] # 转换后的目标格式数据 merged_ids = { for group_key, group_items in group_by( item => item.key, flatten([ for single_map in local.ids : [ for k, v in single_map : { key = k value = v } ] ]) ) : group_key => group_items[*].value } } # 输出验证结果 output "merged_ids" { value = local.merged_ids }
转换逻辑说明
- 内层
for循环遍历原始列表中的每个单键map,将每个键值对转换为包含key、value两个属性的对象 - 用
flatten函数将嵌套的多维列表拍平为一维的对象列表 - 用
group_by内置函数按key字段对所有对象分组,相同key的对象会被聚合到同一个数组中 - 外层
for循环遍历分组结果,提取每个分组下所有对象的value字段组成数组,最终得到你需要的map格式。
内容的提问来源于stack exchange,提问作者VickyW
相关产品推荐
相关产品推荐

