Terraform:在for_each循环中动态获取嵌套Map指定键值
解决方案
核心思路是建立env1键与env2键的显式映射关系,通过这个映射在遍历env1时动态关联到对应的env2键值,彻底避免硬编码。
步骤1:添加键映射本地变量
在locals块中新增一个映射,明确指定env1的每个键对应env2的哪个键:
locals { env1 = { a = {} b = {} } env2 = { x = {} y = {} } # 定义env1键到env2键的固定对应关系 env_key_mapping = { a = "x" b = "y" } }
步骤2:在资源块中动态关联
两个资源块保持基于local.env1的for_each遍历,通过env_key_mapping动态获取对应env2的键,进而填充id属性:
第一个资源块示例
resource "your_resource_type" "first" { for_each = local.env1 # 动态匹配env2中对应的键值,若env2的x/y有具体属性,可写成local.env2[local.env_key_mapping[each.key]].target_attribute id = local.env2[local.env_key_mapping[each.key]] }
第二个资源块示例
resource "another_resource_type" "second" { for_each = local.env1 id = local.env2[local.env_key_mapping[each.key]] }
可选:自动映射(适用于键数量一致且顺序固定的场景)
如果env1和env2的键数量完全相同,且默认按顺序对应(比如env1的第一个键对应env2的第一个键),可以用zipmap自动生成映射,省去手动定义的步骤:
locals { env_key_mapping = zipmap(keys(local.env1), keys(local.env2)) }
⚠️ 注意:自动映射依赖键的排序,若后续env1或env2的键顺序发生变化,会导致对应关系出错,因此显式映射更适合需要固定对应关系的生产场景。
内容的提问来源于stack exchange,提问作者Tito
相关产品推荐
相关产品推荐

