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

如何在Terraform中反转嵌套映射与列表结构

Terraform 嵌套映射结构转换实现

输入结构

variable "original" {
  type = map(map(string))
  default = {
    "us1" = {
      "0" = "192.168.1.1"
    },
    "europe2" = {
      "0" = "192.168.10.1",
      "1" = "10.0.0.1"
    }
  }
}

转换实现

通过Terraform的flatten、groupby和merge函数组合,可实现结构的反转转换:

locals {
  # 将原始嵌套结构扁平化为包含区域、索引、IP的一维列表
  flattened = flatten([
    for region, ip_map in var.original : [
      for idx, ip in ip_map : {
        region = region
        idx    = idx
        ip     = ip
      }
    ]
  ])

  # 按索引分组,生成目标结构
  transformed = merge([
    for idx_key, grouped_items in groupby(local.flattened, "idx") : {
      idx_key = {
        for item in grouped_items : item.region => item.ip
      }
    }
  ]...)
}

验证输出

添加输出块查看转换结果:

output "transformed_result" {
  value = local.transformed
}

执行terraform apply后,输出结果将符合预期:

transformed_result = {
  "0" = {
    "europe2" = "192.168.10.1"
    "us1" = "192.168.1.1"
  }
  "1" = {
    "europe2" = "10.0.0.1"
  }
}

逻辑说明

  1. 扁平化处理:通过两层for循环遍历原始结构,将每个区域下的索引-IP对转换为包含区域、索引、IP的独立对象,再用flatten合并为一维列表,消除嵌套层级。
  2. 分组合并:使用groupby按索引值分组,将同一索引下的所有区域-IP对聚合,再通过内层for表达式生成以区域为键、IP为值的映射,最后用merge和展开运算符...将所有索引对应的映射合并为最终结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:37:12