mito’s blog

IT技術メインの雑記。思い立ったが吉日。

[EKS] クラスター作成に向けてVPCを作ろうとしたら、デフォルトサブネットのAZが一つしかなくて失敗した

はじめに

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の記載内容や以下ドキュメントから複数のアベイラビリティーゾーンが必要のようです。

Amazon EKS の耐障害性 - Amazon EKS


アベイラビリティーゾーンを指定しデフォルトサブネットを作成する

デフォルトサブネットは、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

Template error: Fn::Select cannot select nonexistent value at index 1 · Issue #37 · widdix/aws-cf-templates · GitHub