経緯
AWSで新しくEC2を追加するのに、CloudFormationを利用することになりました
仕様は下記です
- VPC、サブネット、セキュリティグループは既存のEC2で利用しているものを使う
- 固定プライベートIPを指定する
- EBSのボリュームは2つ
- EBSはAmazon Data Lifecycle Manager を利用してスナップショットをバックアップする
当初は AWS::EC2::Instance だけで作成していたのですが、これだと EBSのボリュームは2つ作れますが、Tagが付けられません
TagがないとAmazon Data Lifecycle Managerが利用できません
AWS::EC2::Volume と AWS::EC2::VolumeAttachment でTagが付けられますが、ルートデバイスボリュームにできません
困っていましたが、AWS::EC2::LaunchTemplate を使えばルートデバイスボリュームのEBSにTagがつけられることがわかったので、これを使っていました
というのを、CloudFormationのテンプレートに少しずつ修正したり、追加したりと1つのスタックを変更セットを利用して作業していました。
事象
AWS::EC2::LaunchTemplate を使ってスタックを修正していくうちに セキュリティグループの修正になりました
LaunchTemplateData 直下のSecurityGroupIdsではなく
NetworkInterfaces の下のGroupsに追加して、スタックの変更も UPDATE_COMPLETE で成功!
と思ったのですが、インスタンスのセキュリティを見てもセキュリティグループが反映されていませんでした
なぜ、Defaultのセキュリティグループのままなの……
解決方法
タイトルを実施したら直りました
変更セットじゃなくて、スタックを消して0から作り直したら、セキュリティグループが正常に設定されました
感想
公式のリファレンスのどこかに書いているのだとは思うのですが、みつけられていませんでした。
今まで
- なんか作る
- former2でテンプレート取得
- 取得したテンプレートをリファレンスを見ながら最小限にしてスタック作成
- 成功したらリファレンスを見ながら変更セットを利用して少しづつ追加していく
このような手順でテンプレートを作っていたのですが、それでは駄目なものもあるという学びを得ました