Есть ли способ для облачной информации запрашивать доступные зоны для создания подсети?
У меня есть облачная информация 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)
Однако вам пришлось бы развертывать какие-то инструменты для развертывания шаблонов облачной информации в отдельных регионах.