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)
}

您可以简单地使用当前区域名称,并在其后附加 ab 字符,如下所示:

data "aws_region" "current" {}

locals {
 az1 = "${data.aws_region.current.name}a"
 az2 = "${data.aws_region.current.name}b"
}

接受的答案是对所提出问题的一个很好的回答。我写这个答案是为了展示一个替代方案,它不能直接解决所提出的问题,但可以在您可以访问 ab 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找到你的帐户在当前区域中可以访问的所有区域,然后按词法对它们进行排序,以便它们具有可预测的顺序,最后取前两项从那个排序列表。假设您有权访问 ab 区域,这将始终选择这两个区域,因为(根据当前的 AZ 命名方案)它们将始终在列表中排在第一位。