はじめに
EKSクラスターの作成はeksctlを使ったほうが手順は簡単なのですが、どのようなリソースが使われているか知りたかったので、Managment ConsoleとCliで作成しました。
その際に発生したエラーです。
Amazon EKS の開始方法 – AWS Management Console と AWS CLI - Amazon EKS
実行コマンド aws cloudformation create-stack --region ap-northeast-1 --stack-name my-eks-vpc-stack --template-url https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
エラーメッセージ
CloudFormationのスタックを確認したところ、PublicSubnet02とPrivateSubnet02の作成で失敗していました。
エラーメッセージ Template error: Fn::Select cannot select nonexistent value at index 1
amazon-eks-vpc-private-subnets.yamlの該当箇所 PrivateSubnet02: Type: AWS::EC2::Subnet Metadata: Comment: Private Subnet 02 Properties: AvailabilityZone: Fn::Select: - '1' - Fn::GetAZs: Ref: AWS::Region CidrBlock: Ref: PrivateSubnet02Block VpcId: Ref: VPC Tags: - Key: Name Value: !Sub "${AWS::StackName}-PrivateSubnet02" - Key: kubernetes.io/role/internal-elb Value: 1
原因
デフォルトサブネットのアベイラビリティーゾーンが1つしか登録していなかったため、
2つ目を読み込もうとするも存在しないので失敗していました。
Yamlの記載内容や以下ドキュメントから複数のアベイラビリティーゾーンが必要のようです。
アベイラビリティーゾーンを指定しデフォルトサブネットを作成する
デフォルトサブネットは、Management Consoleからは作成できないのでCLIで作成します。
デフォルト VPC - Amazon Virtual Private Cloud
私の場合、ap-northeast-1cがあったのでap-northeast-1dを指定しました。
aws ec2 create-default-subnet --availability-zone ap-northeast-1d
アベイラビリティーゾーンを増やしたら、スタックは作成されました。
参考
Template error: Fn::Select cannot select nonexistent value at index 1 - Qiita