AZごとに1つのサブネットを持つVPCを作成しようとするクラウドフォーメーションスクリプトがあります。
私が走るとき:
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がサブネットの作成に本当に利用可能かどうかを確認する方法はありますか?
これは、CLIアプローチや正確なシナリオには役立たない場合がありますが、AWS管理コンソールを使用するとスムーズに機能します。
CloudFormationパラメーターを使用した最近の更新により、指定したAZに関連するAZを正確に特定できるようになります。
これは、DR/DRドリル中、およびCFNテンプレートをリージョンに依存しないようにするときに非常に便利です。
"Parameters": {
"SubnetAZ": {
"Description": "Availability Zone of the Subnet",
"Type": "AWS::EC2::AvailabilityZone::Name"
}
}
CloudFormation パラメータに関する詳細情報
残念ながら、私は同じ問題を抱えていました。 CloudFormationにはこれを行う方法はなく、ゾーンはAWSアカウントごとに異なる可能性があります。これはVPCインフラストラクチャの制限であり、変更されない可能性があります。唯一のオプションは、Fn :: Selectの代わりにCloudFOrmationテンプレートで見つけたゾーンをハードコーディングすることです。次に例を示します。
"AvailabilityZone": "us-east-1b"
または、AvailabilityZoneを空白のままにすると、デフォルトの動作ではAWSが自動的に1つを選択します。
Fn :: GetAZは、各AZにサブネットを持つデフォルトのvpcがある限り、使用可能で使用可能なアベイラビリティーゾーンを提供します。ちなみに、手動で削除しない限り、すべての新しいawsアカウントにあります。