はじめに
CloudFormationで構築したEC2インスタンスのルートボリュームの容量を変更セットで変更しようとしたところ、
EC2インスタンスが置換(再作成)になってしまう事象が発生しました。
ルートボリュームのサイズを変更するだけでEC2インスタンスが再作成されるのは困るので、原因と対処をまとめようと思います。
まず結論
CloudFormationの変更セットでルートボリュームの容量を変更する場合は、残念ながらEC2インスタンスの再作成は必ず起きてしまいます。
そのため、ルートボリュームの容量はCloudFormationで定義せずに、ルートボリュームのサイズ変更したい場合はコンソールから行うことをおすすめします。
(コンソールまたはCLIからであれば、EC2の再作成させずにルートボリュームの容量を変更できます)
EBS ボリュームへの変更のリクエスト
原因
BlockDeviceMappingsの値を変更すると再作成となるのはCloudFormationの仕様です。
AWS::EC2::Instance
Type: "AWS::EC2::Instance" Properties: BlockDeviceMappings: - DeviceName: "/dev/xvda" Ebs: VolumeSize: 8GB VolumeType: gp3
対処
6行目のVolumeSize:は削除してしまいましょう。
Type: "AWS::EC2::Instance" Properties: BlockDeviceMappings: - DeviceName: "/dev/xvda" Ebs: VolumeSize: 8GB VolumeType: gp3
なお、EC2作成後にVolumeSizeの行を消すために変更セットを実行してもEC2再作成になってしまいます。
そのため再作成させずにVolumeSizeの行を消すためには、一度CloudFormation管理外にして、改めてCloudFormationにリソースのインポートを行う必要があります。
参考
EC2 インスタンスを置き換えずに CloudFormation で EBS ボリュームを更新するにはどうすればよいですか?