如何通过名称过滤获取Azure Terraform应用网关后端地址池ID?
按名称过滤Azure应用网关后端地址池ID的Terraform实现
针对你需要通过名称匹配获取指定后端地址池ID的需求,这里提供两种可靠的实现方式,完全避免依赖不稳定的索引位置:
方式1:在模块调用时直接过滤
利用Terraform的for表达式和flatten函数,从返回的后端池列表中精准筛选目标名称对应的ID:
# 在需要引用后端池ID的模块/资源块中使用 agw_pool_id = one([ for pool in flatten(module.agw-internal-gateway.backend_address_pool) : pool.id if pool.name == "hif-vnetb-beap-app8" ])
flatten():将你当前输出的嵌套列表+集合结构([toset([...])])扁平化,转为一维对象列表,方便遍历处理for表达式:遍历每个池对象,仅保留名称完全匹配的项one():确保返回单个ID值(因后端池名称唯一,筛选结果只会有一个元素)
方式2:在模块内部输出名称-ID映射(更灵活)
修改应用网关模块的输出配置,直接生成一个以池名称为键、ID为值的映射表,后续调用时可直接通过名称快速取值:
模块内的输出配置:
output "backend_address_pool_id_map" { value = { for pool in flatten(azurerm_application_gateway.ag[*].backend_address_pool) : pool.name => pool.id } }
调用模块时获取ID:
agw_pool_id = module.agw-internal-gateway.backend_address_pool_id_map["hif-vnetb-beap-app8"]
这种方式的优势在于,后续需要其他后端池ID时,无需重复编写过滤逻辑,直接通过名称即可获取,完全适配后端池数量变化的场景。
内容的提问来源于stack exchange,提问作者Cobra Commander
相关产品推荐
相关产品推荐

