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

如何在Terraform中转换嵌套Map数据结构?

如何将Terraform嵌套Map转换为扁平的站点-用户映射结构

你可以通过Terraform的嵌套for表达式结合flatten函数实现这个转换,以下是完整的可运行代码:

locals {
  # 原始嵌套Map结构
  clients = {
    "client1" = {
      sites = {
        site1 = {
          users = [
            "user1",
            "user2",
          ]
        }
      }
    },
    "client2" = {
      sites = {
        site2 = {
          users = [
            "user3",
            "user4",
          ]
        },
        site3 = {
          users = [
            "user5",
            "user6",
          ]
        }
      }
    },
  }

  # 转换后的目标结构
  sites_per_client = {
    for site_entry in flatten([
      # 第一层循环:遍历所有客户端
      for client_key, client_val in local.clients : [
        # 第二层循环:遍历当前客户端下的所有站点
        for site_key, site_val in client_val.sites : {
          key = "${client_key}-${site_key}"
          users = site_val.users
        }
      ]
    ]) : site_entry.key => site_entry.users
  }
}

代码逻辑拆解

  1. 内层循环:遍历单个客户端下的所有站点,生成包含client-site组合键和对应用户列表的对象
  2. 中层循环:遍历所有客户端,将每个客户端的站点对象数组收集起来,形成一个嵌套数组
  3. flatten函数:把嵌套数组转换成一维数组,方便后续处理
  4. 外层循环:将一维数组中的每个对象转换成Map的键值对,最终得到你需要的扁平结构

验证结果

可以添加一个输出块来确认转换结果:

output "sites_per_client_result" {
  value = local.sites_per_client
}

执行terraform plan或terraform apply后,输出结果会和你预期的结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:45:42