Есть ли способ для облачной информации запрашивать доступные зоны для создания подсети?

У меня есть облачная информация script, которая пытается создать VPC с одной подсети на AZ.

Когда я запускаю:

aws ec2 describe-availablity-zones

Я получаю 4 зоны:

"AvailabilityZones": [
    {
        "State": "available", 
        "RegionName": "us-east-1", 
        "Messages": [], 
        "ZoneName": "us-east-1a"
    }, 
    {
        "State": "available", 
        "RegionName": "us-east-1", 
        "Messages": [], 
        "ZoneName": "us-east-1b"
    }, 
    {
        "State": "available", 
        "RegionName": "us-east-1", 
        "Messages": [], 
        "ZoneName": "us-east-1c"
    }, 
    {
        "State": "available", 
        "RegionName": "us-east-1", 
        "Messages": [], 
        "ZoneName": "us-east-1d"
    }
 ]

Однако, когда я пытаюсь создать свой стек, я получаю сообщение об ошибке:

  "ResourceStatusReason": "Value (us-east-1a) for parameter availabilityZone
   is invalid. Subnets can currently only be created in the following 
   availability zones: us-east-1c, us-east-1b, us-east-1d.", 

Я указываю AZ с помощью

      "AvailabilityZone" : {
        "Fn::Select" : [ "0", { "Fn::GetAZs" : "" } ]
      },

Есть ли способ проверить, действительно ли AZ доступен для создания подсети?

Ответы

Ответ 1

К сожалению, у меня была такая же проблема. В CloudFormation нет метода для этого, и зоны могут быть разными для каждой учетной записи AWS. Это ограничение инфраструктуры VPC и, скорее всего, не изменится. Единственным вариантом будет жестко настроить зоны, найденные вами в шаблоне CloudFOrmation, вместо Fn:: Select, например:

"ДоступностьZone": "us-east-1b"

В противном случае, если вы оставите пустое место в AccessZone, по умолчанию будет использоваться AWS, который автоматически выберет для вас.

Ответ 2

Это может быть не очень полезно для подхода CLI или вашего точного сценария, но с AWS Management Console это работает плавно.

С последними обновлениями с параметрами CloudFormation вы сможете указать точки AZ, относящиеся к указанным AZ.

Это было бы очень удобно во время DR/DR Drills и сделать шаблон CFN Region Independent.

enter image description here

"Parameters": {
    "SubnetAZ": {
      "Description": "Availability Zone of the Subnet",
      "Type": "AWS::EC2::AvailabilityZone::Name"
    }
}

Дополнительная информация о CloudFormation Параметры

Ответ 3

Fn:: GetAZs предоставит доступные и пригодные для использования зоны доступности, если у вас есть vpc по умолчанию с подсети в каждом AZ! который, кстати, все новые учетные записи aws имеют до тех пор, пока вы не удалите их вручную.

Ответ 4

Я обойти ограничение, избегая json как средства выражения. Я использую тропосферу для создания моих шаблонов облачной информации. (https://github.com/cloudtools/troposphere)

Однако вам пришлось бы развертывать какие-то инструменты для развертывания шаблонов облачной информации в отдельных регионах.