如何在Terraform中混合静态与动态键创建Map?
Terraform 混合静态键与动态生成键的Map实现方案
核心解决思路
Terraform不支持在单个Map字面量里同时写静态键和for表达式,正确的做法是用merge()函数,把静态键组成的Map和for表达式生成的动态Map合并到一起。
可行代码示例
variable "n" { type = number description = "动态生成key-n的最大序号" default = 4 } locals { MyMap = merge( # 静态键部分 { "abc" = {} "pqr" = {} }, # 动态生成key-n部分 { for i in range(1, var.n + 1) : "key-${i}" => {} } ) }
关键细节说明
merge()函数负责将多个Map合并为一个,若存在重复键,后面的Map会覆盖前面的(这里静态键和动态键无重复,直接合并即可)- Terraform的
range是左闭右开区间,比如要生成1到4的序号,得写range(1,5),所以用var.n +1能确保包含第n个key - 静态键和动态生成部分各自作为独立Map传入
merge(),就能得到静态+动态混合的目标结构
结果验证
可以加个输出块查看最终生成的Map:
output "my_map_result" { value = local.MyMap }
执行terraform apply后,就能看到包含所有静态键和动态key-n的完整Map结构。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

