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

Terraform中基于列表与映射创建嵌套映射的实现方法

Terraform 构造AZ-网络嵌套映射方案

给定以下可用区列表和网络配置映射:

local.azs = [ "us-east-1", "us-east-2"]
local.networks = {
   mgmt = "10.0.0.0/24",
   web = "10.10.0.0/24"
}

需要生成每个可用区对应完整网络配置的嵌套映射,期望结果:

private_subnets = {
  us-east-1 = {
    mgmt = "10.0.0.0/24"
    web = "10.10.0.0/24"
  }
  us-east-2 = {
    mgmt = "10.0.0.0/24"
    web = "10.10.0.0/24"
  }
}

实现方案

无需嵌套for语句,用单个for表达式即可完成构造:

locals {
  azs = [ "us-east-1", "us-east-2"]
  networks = {
     mgmt = "10.0.0.0/24",
     web = "10.10.0.0/24"
  }

  private_subnets = {
    for az in local.azs : az => local.networks
  }
}

遍历local.azs列表,将每个可用区名称作为键,直接把local.networks作为对应的值,即可生成目标嵌套结构。

在AWS VPC资源中使用

以创建私有子网为例,可通过扁平化嵌套映射来遍历所有子网配置:

resource "aws_subnet" "private" {
  for_each = flatten([
    for az, nets in local.private_subnets : [
      for net_name, cidr in nets : {
        key = "${az}-${net_name}"
        az  = az
        cidr = cidr
        name = net_name
      }
    ]
  ])

  vpc_id            = aws_vpc.main.id
  cidr_block        = each.value.cidr
  availability_zone = each.value.az
  tags = {
    Name = "${each.value.name}-subnet-${each.value.az}"
  }
}

内容的提问来源于stack exchange,提问作者bitbucket

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:26:16