2

私はECS-CLI(0.4.5)を使用してCFNテンプレートを起動していますが、今はAuroraクラスタをCFNテンプレートに入れてチェンジセットを使ってスタックを更新しようとしていますCFN SDKを使用します。AWS CloudFormationを使用してDBSubnetGroupを作成する

なぜ私のサブネットについて動揺しているのか分かりません。サブネットは最初の 'ecs-cli up'コールによって作成されます。それらはスタックの残りの部分と同じvpcにあり、チェンジセットをデプロイしようとする前にすでに存在しており、それらは異なる可用性ゾーン(us-west-2bとus-west-2c)にあります。

CFNが私に与えている唯一の情報は、「入力サブネットが無効です」ということです。

CFNの失敗: CFN Failure

サブネット: Subnets

私は何の問題もなく、まったく同じサブネットを管理コンソールからDBSubnetGroupを作成することができます。

何が問題になる可能性がありますか?これはCloudFormationのバグですか?

"PubSubnetAz1": { 
     "Type": "AWS::EC2::Subnet", 
     "Properties": { 
      "VpcId": { 
       "Ref": "Vpc" 
      }, 
      "CidrBlock": "10.0.0.0/24", 
      "AvailabilityZone": "us-west-2b" 
     } 
}, 
"PubSubnetAz2": { 
     "Type": "AWS::EC2::Subnet", 
     "Properties": { 
      "VpcId": { 
       "Ref": "Vpc" 
      }, 
      "CidrBlock": "10.0.1.0/24", 
      "AvailabilityZone": "us-west-2c" 
     } 
}, 
"InternetGateway": { 
    "Type": "AWS::EC2::InternetGateway" 
}, 
"AttachGateway": { 
    "Type": "AWS::EC2::VPCGatewayAttachment", 
    "Properties": { 
     "VpcId": { 
      "Ref": "Vpc" 
     }, 
     "InternetGatewayId": { 
      "Ref": "InternetGateway" 
     } 
    } 
}, 
"RouteViaIgw": { 
    "Type": "AWS::EC2::RouteTable", 
    "Properties": { 
     "VpcId": { 
      "Ref": "Vpc" 
     } 
    } 
}, 
"PublicRouteViaIgw": { 
    "DependsOn": "AttachGateway", 
    "Type": "AWS::EC2::Route", 
    "Properties": { 
     "RouteTableId": { 
      "Ref": "RouteViaIgw" 
     }, 
     "DestinationCidrBlock": "0.0.0.0/0", 
     "GatewayId": { 
      "Ref": "InternetGateway" 
     } 
    } 
}, 
"PubSubnet1RouteTableAssociation": { 
    "Type": "AWS::EC2::SubnetRouteTableAssociation", 
    "Properties": { 
     "SubnetId": { 
      "Ref": "PubSubnetAz1" 
     }, 
     "RouteTableId": { 
      "Ref": "RouteViaIgw" 
     } 
    } 
}, 
"PubSubnet2RouteTableAssociation": { 
    "Type": "AWS::EC2::SubnetRouteTableAssociation", 
    "Properties": { 
     "SubnetId": { 
      "Ref": "PubSubnetAz2" 
     }, 
     "RouteTableId": { 
      "Ref": "RouteViaIgw" 
     } 
    } 
}, 

:ここに私の最初のテンプレートは(それはECS-CLIに組み込まれている)に帰着するものだ、私は、このような損失

で正直だ...より多くの情報がこの問題を解決するために必要とされるならば、私に教えてくださいそして、私はそれを更新するために行くときに、私はこれを追加します。

"DBSubnetGroup": { 
    "Type": "AWS::RDS::DBSubnetGroup", 
    "Properties": { 
     "DBSubnetGroupDescription": "Aurora Subnet Group using subnets from 2 AZs", 
     "SubnetIds": { 
      "Fn::Join": [ 
        ",", [{ 
          "Ref": "pubSubnetAz1" 
         }, 
         { 
          "Ref": "pubSubnetAz2" 
         } 
        ] 
       ] 
      }] 
     } 
    } 
} 

チェンジは十分に簡単であるべき...

"Changes": [ 
    { 
     "Type": "Resource", 
     "ResourceChange": { 
     "Action": "Add", 
     "LogicalResourceId": "DBSubnetGroup", 
     "ResourceType": "AWS::RDS::DBSubnetGroup", 
     "Scope": [], 
     "Details": [] 
     } 
    } 
] 

AWSTemplateFormatVersion 2010-09-09とJavaScript aws-sdk "^ 2.7.21"

+0

それはあなたがCloudformationのYAML/JSONでサブネットを渡しているかを確認するのに役立つだろう - あなたができる場合は投稿してください。 – rumdrums

+0

関連するjsonを追加しました! –

+0

ありがとう、私はこのばかげた笑を感じて以来、しばらくしている –

答えて

2

問題は、サブネットIDを文字列に連結していることです。代わりに、それらを配列に渡す必要があります。これを試してみてください:

"PrivateSubnetGroup": { 
    "Type": "AWS::RDS::DBSubnetGroup", 
    "Properties": { 
     "SubnetIds": [ 
     { 
      "Ref": "PubSubnetAz1" 
     }, 
     { 
      "Ref": "PubSubnetAz2" 
     } 
     ], 
     "DBSubnetGroupDescription": "Aurora Subnet Group using subnets from 2 AZs" 
    } 
    } 

また、私は非常にJSONの代わりにYAMLを使用しようとお勧めします。 CloudFormはこれをネイティブでサポートし、参照を簡単にするためのいくつかのショートカット関数をサポートしています。長期的には、読み書きの方がはるかに簡単だと思います。

ここでは、YAMLで同等のJSONを書くことができる方法の例です:

PrivateSubnetGroup: 
    Type: AWS::RDS::DBSubnetGroup 
    Properties: 
    DBSubnetGroupDescription: Subnet group for Aurora Database 
    SubnetIds: 
    - !Ref PubSubnetAz1 
    - !Ref PubSubnetAz2 
2

AWS::RDS::DBSubnetGroup文書によると、SubnetIDsパラメータは文字列のリストを受け入れ、ないあなたはあなたの例で提供するものであるCommaDelimitedListは、 。あなたはFn::Joinを使用せずに、直接JSON配列内のサブネットを渡す必要があります。

"SubnetIds": [ 
    {"Ref": "pubSubnetAz1"}, 
    {"Ref": "pubSubnetAz2"} 
] 
関連する問題