跳至内容

为什么不同账户之间的可用区名称和ID映射不一致?

0

【以下的问题经过翻译处理】 我在创建一个创建子网的Terraform计划时遇到了问题,收到错误消息,指出可用区不存在。

我进行了一些故障排除,注意到AWS在AZ名称到AZ ID映射以及AZ名称方面存在非常奇怪的行为。

当我在aws cli中执行以下命令时:aws ec2 describe-availability-zones --region us-west-1 我看到以下内容:

区域名称:us-west-1b 区域ID:usw1-az3

区域名称:us-west-1c 区域ID:usw1-az1

在AWS GUI控制台中,我登录了两个不同的帐户,但两者均设置为北加利福尼亚州。 当我尝试创建新的子网时,在一个帐户中提供的两个可用AZ是:

us-west-1b(usw1-az3) us-west-1c(usw1-az1)

但是在另一个帐户中创建子网时,列出的两个AZ是:

us-west-1a(usw1-az1) us-west-1c(usw1-az3)

只要子网在两个不同的AZ中创建,我并不介意,但我不知道是否应该使用a和b、b和c,还是a和c。

专家

已提问 3 年前118 查看次数

1 回答
0

【以下的回答经过翻译处理】 特定字母代表的可用区对不同的AWS账户可以有不同的含义。例如,对于A账户,us-west-1a可能与B账户的us-west-1a不同。

在Cloudformation中,您可以使用以下代码来创建两个公共子网并确保它们在不同的可用区中创建:

PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 0, !GetAZs '' ] 
      CidrBlock: !Ref PublicSubnet1CIDR
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Public Subnet (AZ1)

PublicSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 1, !GetAZs  '' ]
      CidrBlock: !Ref PublicSubnet2CIDR
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub ${EnvironmentName} Public Subnet (AZ2)

请注意,在上面的Cloudformation模板片段中,两个公共子网在AvailabilityZone:!Select [ 0,!GetAZs '' ]语句中选择了不同的数组索引,从而确保在两个不同的可用区中创建了两个子网。

Terraform也有类似的概念https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/availability_zones

# Declare the data source
data "aws_availability_zones" "available" {
  state = "available"
}

# e.g., Create subnets in the first two available availability zones

resource "aws_subnet" "primary" {
  availability_zone = data.aws_availability_zones.available.names[0]

  # ...
}

resource "aws_subnet" "secondary" {
  availability_zone = data.aws_availability_zones.available.names[1]

专家

已回答 3 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。