LoginSignup
0
0

CloudFormation-Fn::Select Fn::GetAZsのエラーについて

Last updated at Posted at 2024-04-14

実現しようとしていたこと

CloudFormationでプライベートサブネットを作成する

使用したファイル(抜粋)

 SubnetPrivate1A:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.1.0/24
      VpcId:
        Ref: sbcntrVpc
      AvailabilityZone: 
        Fn::Select: 
          - 0
          - Fn::GetAZs: ""            
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: subnet-private-1a
        - Key: Type
          Value: Isolated
          
 SubnetPrivate1C:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: 10.0.2.0/24
      VpcId:
        Ref: sbcntrVpc
      AvailabilityZone: 
        Fn::Select: 
          - 1
          - Fn::GetAZs: ""
      MapPublicIpOnLaunch: false
      Tags:
        - Key: Name
          Value: subnet-private-1c
        - Key: Type
          Value: Isolated

CloudFormation実行結果

SubnetPrivate1Cの作成で以下のエラーが発生。
Template error: Fn::Select cannot select nonexistent value at index 1

結論

Fn::GetAZsを使用するにあたり、デフォルトVPCを残していたことが原因。
デフォルトVPCを削除してCloudFormationを実行したところ成功した。

詳細

Fn::GetAZsの公式ドキュメント に以下の記載があった。

デフォルト サブネットがあるアベイラビリティーゾーンがない場合を除き、Fn::GetAZs 関数はデフォルト サブネットがあるアベイラビリティーゾーンのみを返します。その場合、すべてのアベイラビリティーゾーンが返されます。

日本語の文章がイマイチなので理解しづらかったので、ざっくり言うと次の通り。

デフォルトVPCを残している場合
デフォルトVPCのあるAZのみを返す
デフォルトVPCを削除している場合
VPC内のAZ全てを返す

今回の希望は後者である「VPC内のAZ全てを返す」であった。
そのためデフォルトVPCを削除して、再実行したところ成功した。

デフォルトVPC削除について 

デフォルトVPCはデフォルトルートの宛先がAny(0.0.0.0/0)となっており、そのまま使用するには危険性が高いとのこと。
また、再作成できるため使用予定が無ければ削除しておくのが無難。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0