AWS CLIでEBSボリュームのDeleteOnTerminationを設定してみる

AWS CLIでEBSボリュームのDeleteOnTerminationオプションを設定するコマンドを整理してみました。
2022.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、クラスメソッドのキム・ジェウク(Kim Jaewook)です。

今回は、AWS CLIでEBSボリュームのDeleteOnTerminationオプションを設定するコマンドを整理してみました。

EC2インスタンスを削除しても、EBSボリュームが残っている問題

EC2インスタンスにEBSボリュームをアタッチした後、EC2インスタンスを削除してみると、ルートボリュームだけが削除され、アタッチしたボリュームは削除されません。

実際、アタッチしたボリュームを確認してみると「終了時に削除」がFalseになっているのを確認できます。

「終了時に削除」はEC2インスタンスを作成する時、設定できます。

この機能を無効にした場合、ボリュームは EC2 インスタンスの実行期間とは無関係に存続されます。インスタンスを終了しても、ボリュームはアカウントにプロビジョニングされたままになります。インスタンスの終了後にボリュームが不要になった場合は、手動で削除する必要があります。

このオプションを設定しない場合、手動で削除する必要があります。

DeleteOnTerminationを設定

target=instanceID
aws ec2 describe-instances --instance-ids ${target} | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'

上記のコマンドを実行してみると、ルートボリュームは「DeleteOnTermination」がtrueに設定されていますが、追加ボリュームはfalseに設定されています。

DeleteOnTerminationがtrueの場合、EC2インスタンスが削除される時、ボリュームも自動的に削除されます。

そのため、自動的に削除したい場合は、DeleteOnTerminationをtrueに設定する必要があります。

DeviceName=xvdf
VolumeId=EBS VolumeID

aws ec2 modify-instance-attribute --instance-id ${target} --block-device-mappings "{\"DeviceName\":\"${DeviceName}\",\"Ebs\":{\"DeleteOnTermination\":true,\"VolumeId\":\"${VolumeId}\"}}"

aws ec2 describe-instances --instance-ids ${target} | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'

aws ec2 modify-instance-attributeのコマンドで、DeleteOnTerminationをtrueに変更します。

xvdfボリュームのDeleteOnTerminationがtrueに変更されたことを確認できます。

実際、EC2インスタンスを削除してみると、ルートボリュームと、xvdfだけ削除され、DeleteOnTerminationがfalseに設定されているxvdgは削除されないまま残っているのを確認できます。