如何将两个Terraform输出映射按行合并并按需返回结果
Terraform合并azs与private_subnets映射为指定子网结构
不用join命令,Terraform的zipmap配合for表达式就能实现你要的结构,步骤如下:
1. 定义局部值统一处理映射
先创建一个局部值,把azs和private_subnets两个映射合并成目标格式:
locals { vpc_subnets = { for vpc_name, az_list in azs : vpc_name => zipmap( az_list, [for subnet in private_subnets[vpc_name] : { id = subnet }] ) } }
这段代码会遍历azs中的每个VPC,用zipmap将可用区列表与对应的子网列表(每个子网包装成{ id = 子网ID }的结构)一一绑定,生成你需要的嵌套映射结构。
2. 模块中根据VPC名称调用
在模块里直接通过VPC名称引用局部值的对应结果即可:
module "xxx" { for_each = var.x subnets = local.vpc_subnets[each.value.vpc_name] }
当each.value.vpc_name为vpc_name1时,subnets会自动返回你期望的subnets1结构;为vpc_name2时则返回subnets2结构。
验证结果
以vpc_name1为例,local.vpc_subnets["vpc_name1"]的输出结果如下:
{ "eu-west-2a" = { id = "subnet-a" } "eu-west-2b" = { id = "subnet-b" } "eu-west-2c" = { id = "subnet-c" } }
内容的提问来源于stack exchange,提问作者BP2000
相关产品推荐
相关产品推荐

