Terraform - 在任何地区的特定可用性区域启动
Terraform - Launch in specific availability zones in any region
我希望在我指定的任何区域的 'a' 或 'b' 可用区中启动一个子网 - 有没有一种方法可以让 Terraform 执行此操作?
大致如下:
variable "az" {
default = {
a = 1
b = 2
}
}
resource "aws_subnet" "example" {
vpc_id = aws_vpc.vpc.id
availability_zone = var.az.(places subnets in either of the specified AZs)
}
您可以简单地使用当前区域名称,并在其后附加 a
或 b
字符,如下所示:
data "aws_region" "current" {}
locals {
az1 = "${data.aws_region.current.name}a"
az2 = "${data.aws_region.current.name}b"
}
接受的答案是对所提出问题的一个很好的回答。我写这个答案是为了展示一个替代方案,它不能直接解决所提出的问题,但可以在您可以访问 a
和 b
AZ 的任何区域获得相同的结果:
data "aws_availability_zones" "all" {
}
locals {
sorted_availability_zones = sort(data.aws_availability_zones.all.names)
selected_availability_zones = toset([
local.sorted_availability_zones[0],
local.sorted_availability_zones[1],
])
}
resource "aws_subnet" "example" {
for_each = local.selected_availability_zones
vpc_id = aws_vpc.vpc.id
availability_zone = each.value
}
上面使用the aws_availability_zones
data source找到你的帐户在当前区域中可以访问的所有区域,然后按词法对它们进行排序,以便它们具有可预测的顺序,最后取前两项从那个排序列表。假设您有权访问 a
和 b
区域,这将始终选择这两个区域,因为(根据当前的 AZ 命名方案)它们将始终在列表中排在第一位。
我希望在我指定的任何区域的 'a' 或 'b' 可用区中启动一个子网 - 有没有一种方法可以让 Terraform 执行此操作?
大致如下:
variable "az" {
default = {
a = 1
b = 2
}
}
resource "aws_subnet" "example" {
vpc_id = aws_vpc.vpc.id
availability_zone = var.az.(places subnets in either of the specified AZs)
}
您可以简单地使用当前区域名称,并在其后附加 a
或 b
字符,如下所示:
data "aws_region" "current" {}
locals {
az1 = "${data.aws_region.current.name}a"
az2 = "${data.aws_region.current.name}b"
}
接受的答案是对所提出问题的一个很好的回答。我写这个答案是为了展示一个替代方案,它不能直接解决所提出的问题,但可以在您可以访问 a
和 b
AZ 的任何区域获得相同的结果:
data "aws_availability_zones" "all" {
}
locals {
sorted_availability_zones = sort(data.aws_availability_zones.all.names)
selected_availability_zones = toset([
local.sorted_availability_zones[0],
local.sorted_availability_zones[1],
])
}
resource "aws_subnet" "example" {
for_each = local.selected_availability_zones
vpc_id = aws_vpc.vpc.id
availability_zone = each.value
}
上面使用the aws_availability_zones
data source找到你的帐户在当前区域中可以访问的所有区域,然后按词法对它们进行排序,以便它们具有可预测的顺序,最后取前两项从那个排序列表。假设您有权访问 a
和 b
区域,这将始终选择这两个区域,因为(根据当前的 AZ 命名方案)它们将始终在列表中排在第一位。