Проблема подсети в создании VPC с помощью облачной информации - PullRequest
0 голосов
/ 11 февраля 2019

Я нуб в сети.Я создаю VPC через Cloudformation.Для этого мне нужно создать 4 подсети.Когда я запускаю включенный шаблон, я вижу эту ошибку: Ошибка шаблона: Fn :: Select не может выбрать несуществующее значение с индексом 3

Но, когда я создаю его с 3 подсетями, этоfine.

Пример моего шаблона:

Parameters:

  VpcBlock:
    Type: String
    Default: 192.168.0.0/16
    Description: The CIDR range for the VPC. This should be a valid private (RFC 1918) CIDR range.

  Subnet01Block:
    Type: String
    Default: 192.168.0.0/14
    Description: CidrBlock for subnet 01 within the VPC

  Subnet02Block:
    Type: String
    Default: 192.168.64.0/14
    Description: CidrBlock for subnet 02 within the VPC

  Subnet03Block:
    Type: String
    Default: 192.168.128.0/14
    Description: CidrBlock for subnet 03 within the VPC

  Subnet04Block:
    Type: String
    Default: 192.168.192.0/14
    Description: CidrBlock for subnet 04 within the VPC

Resources:
  Subnet01:
    Type: AWS::EC2::Subnet
    Metadata:
      Comment: Subnet 01
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '0'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet01Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Services-Subnet01"

  Subnet02:
    Type: AWS::EC2::Subnet
    Metadata:
      Comment: Subnet 02
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '1'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet02Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Services-Subnet02"

  Subnet03:
    Type: AWS::EC2::Subnet
    Metadata:
      Comment: Subnet 03
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '2'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet03Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Services-Subnet03"

  Subnet04:
    Type: AWS::EC2::Subnet
    Metadata:
      Comment: Subnet 04
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '3'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet04Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Services-Subnet04"

Я развернул этот шаблон в регионе us-west-2.Я что-то здесь не так делаю?

1 Ответ

0 голосов
/ 11 февраля 2019

Ваша проблема заключается в том, что разные регионы в AWS имеют разное количество зон доступности (AZ) ( документы ).

Поскольку вы находитесь в регионе us-west-2, у вас есть только3 AZS.Другие регионы, такие как us-east-1, имеют больше.AZ для вашего региона можно найти с помощью:

▶ aws ec2 describe-availability-zones --region us-west-2 --query 'AvailabilityZones[].ZoneName' 
[
    "us-west-2a", 
    "us-west-2b", 
    "us-west-2c"
]

Между тем встроенная функция Fn::GetAZs возвращает вам AZ в виде массива.Вы ссылались на элемент 3 этого массива (т. Е. На 4-й), и он не существует, и поэтому вы видите это сообщение об ошибке.

Возможно, вам нужно выбрать между перемещением в другой регион, имеющим другойколичество подсетей или один AZ с двумя подсетями, а остальные с 1.

...