問題
以下のCloudFormationテンプレートでサブネットを東京リージョンに構築しようとしたところ、表題のエラーを吐きました。
Resources:
PrivateSubnet2:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.0.2.0/24
VpcId: !Ref CFnVPC
AvailabilityZone: !Select [ 1, !GetAZs ]
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: PrivateSubnet2
原因
Fn::GetAZs
はアカウントのデフォルトサブネットのAZを配列で返却します。
私のアカウントではデフォルトサブネットのAZを1つしか登録していませんでした。
問題のCloudFormationテンプレートで、Fn::GetAZs
で取得したAZ配列の2番目を参照しますが、存在しないためエラーとなりました。
対処方法
デフォルトサブネットを作成し、AZを増やします。
東京リージョンにはap-northeast-1a
,ap-northeast-1c
,ap-northeast-1d
の3つのAZが存在します。(実際はap-northeast-1b
もありますが、使用できるアカウントが制限されているため除外します)
アカウントが使用できるAZの確認
aws ec2 describe-availability-zones --query 'AvailabilityZones[].ZoneName'
デフォルトサブネットのAZを確認(Fn::GetAZs
が返す値)
aws ec2 describe-subnets --filters "Name=default-for-az, Values=true" --query 'Subnets[].AvailabilityZone'
デフォルトサブネットをAZに作成
aws ec2 create-default-subnet --availability-zone ap-northeast-1c
確認
再度、CloudFormationテンプレートでスタック作成してみます。
エラーなくサブネットを作成することができました。