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
相关产品推荐
相关产品推荐

