【发布时间】:2021-12-16 21:49:13
【问题描述】:
我想为 terraform 中的每个不同可用区创建一个 NAT 网关。为此,我需要获取不同可用区的列表。
variable "public_subnets" {
type = map(object({
cidr = string
az = string
}))
description = "Public subnets for My VPC"
}
子网
public_subnets = {
"a" = {
cidr = "10.0.0.0/24"
az = "us-east-2a"
},
"b" = {
cidr = "10.0.1.0/24"
az = "us-east-2b"
}
}
资源定义如下:
resource "aws_subnet" "public-subnets" {
for_each = var.public_subnets
vpc_id = aws_vpc.main_vpc.id
cidr_block = each.value.cidr
availability_zone = each.value.az
map_public_ip_on_launch = true
tags = {
Name = "public-subnet-${each.value.cidr}-${each.value.az}"
}
}
resource "aws_eip" "ip-nats" {
for_each = aws_subnet.public-subnets
# EIP may require IGW to exist prior to association.
depends_on = [aws_internet_gateway.igw]
}
创建每个aws_nat_gateway 时,我需要声明allocation_id 和subnet_id。在典型的编程语言中,我会执行以下操作:
- 为每个公有子网创建弹性 ip,并创建一个以公有子网为键、弹性 ip 为值的映射/字典
- 循环查找该字典并创建 NAT 网关。
我如何使用 terraform 实现这一目标
【问题讨论】:
-
你还没有展示你是如何定义
aws_subnet.public-subnets的。还有你的地图中有哪些“不同的价值”? CIDR? -
@Marcin 我添加了
aws_subnet.public-subnets。 “不同的值”是指唯一的可用区(AZ)。最终我想为每个 AZ 创建一个 nat 网关并将子网分配给 nat 网关
标签: loops for-loop foreach terraform