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

如何在Terraform中使用嵌套for循环定义嵌套映射字段?

正确生成Terraform嵌套映射的写法

现有变量定义

resources = ["s3", "sns"]
envs = ["prd", "dev"]

期望生成的嵌套映射结构

需要生成如下嵌套映射,可通过hashed.s3.dev直接访问对应值:

hashed = {
  s3 = { 
    prd = "abcd-1234-5678-s3-prod" 
    dev = "abcd-1234-5678-s3-dev"
  }
  sns = { 
    prd = "abcd-1234-5678-sns-prod" 
    dev = "abcd-1234-5678-sns-dev"
  }
}

尝试的代码及问题

使用concat+嵌套数组循环的写法,最终得到的是数组而非目标嵌套映射:

hashed = concat([
  for resource in resources : [
    for env in envs : 
      env => join("-", compact([var.random, var.random, resource, env]))
  }
])

输出结果:

hashed = [
  { prd = "abcd-1234-5678-s3-prod" 
   dev = "abcd-1234-5678-s3-dev"
  },
  { prd = "abcd-1234-5678-sns-prod" 
    dev = "abcd-1234-5678-sns-dev"
  }
]

正确写法

直接使用嵌套的映射for循环,外层以资源名为键,内层生成环境对应的子映射,无需concat包裹:

hashed = {
  for resource in resources : resource => {
    for env in envs : env => join("-", compact([var.random, var.random, resource, env]))
  }
}

这段代码会生成目标嵌套映射结构,支持hashed.s3.dev这类直接访问方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:45:11