The parameter groupName cannot be used with the parameter subnet

 


VPC定義等、様々なシーンで共通的に使用するようなテンプレートを再利用し、CloudFormationのスタックをネストして使用するのはベストプラクティスの1つである。

VPC用のテンプレートを用意した後、AWS::CloudFormation::Stackリソースを使って別テンプレートからVPCのリソースを参照し、VPC上にEC2インスタンスを立ててみる。
この際、表題のエラーにぶちあたったのであった。

AWS::EC2::Instanceの作成のステップのところでエラーとなっている。

The parameter groupName cannot be used with the parameter subnet

色々調べて試行錯誤したが、セキュリティグループの参照を”SecurityGroup”ではなく、”SecurityGroupIds”にしたら通った。


"EC2Instance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"InstanceType" : { "Ref" : "InstanceType" },
"SecurityGroupIds" : { "Ref" : "InstanceSecurityGroup" },
"KeyName" : { "Ref" : "KeyName" },
"SubnetId" : { "Fn::GetAtt" : [ "CloudFormationVpcStack", "Outputs.SubnetDmzAzBId" ] },
"ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
{ "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }
}
},

他にもいくつかハマったところがあって、VPC上のEC2にEIPを付与する際は、
“AWS::EC2::EIP”にDomainとして明示的に”vpc”を指定しないといけなかった点と、
“AWS::EC2::EIPAssociation”にAllocationIdをプロパティ指定しないといけなかった点を、
1つずつデバッグして潰していった。


"IPAddress" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
"Domain" : "vpc"
}
},

"IPAssoc" : {
"Type" : "AWS::EC2::EIPAssociation",
"Properties" : {
"InstanceId" : { "Ref" : "EC2Instance" },
"AllocationId" : { "Fn::GetAtt" : [ "IPAddress", "AllocationId" ] }
}
}

 
CloudFormationは便利なのだが、デバッグのしづらさはなんとかならんもんだろうか・・。