我想為 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 實作這一目標
uj5u.com熱心網友回復:
Anaws_nat_gateway有效地表現為特定彈性 IP“分配 ID”和特定子網 ID 的配對,因此我假設您在這里的目標是為您aws_subnet.public-subnets和aws_eip.ip-nats資源的每個對應實體對創建一個這樣的配對。
由于這些 NAT 網關與 中的每個條目是一對一的var.public_subnets,因此您可以for_each再次使用該映射,然后告訴 Terraform 如何從其他資源的相關實體收集資料:
resource "aws_nat_gateway" "example" {
for_each = var.public_subnets
allocation_id = aws_eip.ip-nats[each.key]
subnet_id = aws_subnet.public-subnets[each.key]
# ...
}
它也可能是有效的使用for_each鏈接來自像你一樣對鏈中的其他資源的一個aws_eip.ip-nats從aws_subnet.public-subnets,但我選擇只使用原始集合在這里,因為我們只能從一個其他資源在時間鏈,既沒有資源在這里似乎明顯“ “更多連接”到 NAT 網關比另一個網關:每個 NAT 網關均等地從每個 NAT 網關的一個實體下降。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/347919.html
上一篇:使用for回圈和switch陳述句來計算關于C中不同引數的幾何級數的總和
下一篇:Terraform決議回圈
