如何在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
相关产品推荐
相关产品推荐

