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は便利なのだが、デバッグのしづらさはなんとかならんもんだろうか・・。