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

Terraform嵌套对象转换:如何将模块中的数组嵌套结构转换为单层映射

解决方案:合并Terraform列表中的对象为单一映射

当然有可行的方法实现这个转换!在Terraform中,你可以借助内置的merge函数配合展开运算符(...),轻松将列表中的多个对象合并成一个包含所有二级对象的顶层映射。

具体实现代码

locals {
  # 你的原始输入列表
  input = [
    {
      "prod_db" : {some_attr = "prod_db_val"},
      "prod_app": {some_attr = "prod_app_val"}
    },
    {
      "stage_db" : {some_attr = "stage_db_val"},
      "stage_app": {some_attr = "stage_app_val"}
    },
    {
      "dev_db" : {some_attr = "dev_db_val"},
      "dev_app": {some_attr = "dev_app_val"}
    }
  ]

  # 转换后的目标映射
  result = merge(local.input...)
}

代码说明

  • merge函数:Terraform的内置函数,用于将多个对象合并为一个单一对象。如果多个输入对象存在重复的键,后面的对象会覆盖前面的,所以要确保你的输入列表中没有重复的顶层键(比如prod_db只出现一次)。
  • 展开运算符...:这个运算符会把local.input列表中的每个元素单独传递给merge函数,等价于手动编写merge(local.input[0], local.input[1], local.input[2]),让代码更简洁且适配列表长度变化。

验证结果

你可以通过terraform console命令查看local.result的输出,会得到你想要的结构:

{
  "dev_app" = {
    "some_attr" = "dev_app_val"
  }
  "dev_db" = {
    "some_attr" = "dev_db_val"
  }
  "prod_app" = {
    "some_attr" = "prod_app_val"
  }
  "prod_db" = {
    "some_attr" = "prod_db_val"
  }
  "stage_app" = {
    "some_attr" = "stage_app_val"
  }
  "stage_db" = {
    "some_attr" = "stage_db_val"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:38:11