You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:11:03