はじめに
結論として、EC2のDeleteOnTerminationという項目をfalseしたら消えないようになります。
EBSボリュームを削除したくない場合は以下のような場合が挙げられます。
- プロジェクト終了後もデータを残しておきたい
- スケーリングした後のEBSのバックアップを取っておきたい
- 誤操作による削除の対策を考えたい
EBSボリュームを削除しないように設定する手順は、EC2インスタンス作成前と作成後で異なります。
作成後だと手順が少し増えるため、可能であれば作成時に設定しておくことをおすすめします。
作成時にEBSを削除しない設定
EC2インスタンスの作成時にストレージを設定する場所があります。
「アドバンスト」というリンクがあるので、これを選択すると自動生成されるEBSボリュームの詳細な設定を行うことができます。
「終了時に削除」の設定で「いいえ」を選択し、インスタンスを作成するとインスタンスを削除してもEBSが残り続けます。
既存のEC2インスタンスのEBSの削除設定を変更する
既存のEC2インスタンスのEBSの設定変更はAWS CLIでDeleteOnTerminationをfalseにするだけです。
まず、EC2の設定画面でEBSボリュームの変更をしたいインスタンスのインスタンスIDを控えておきます。
AWS CLIでコンソールを開いていきます。
コンソールを開いたら、ボリュームの設定を確認していきます。
# 画像の環境では[i-079ade35a27fe66e8]がインスタンスID
# インスタンスのEBSボリューム設定の取得
aws ec2 describe-instances --instance-id [インスタンスID] --query "Reservations[].Instances[].BlockDeviceMappings"
以下のようにデータが返却され、以下のようにDeleteOnTerminationがtrueが設定されている場合、EC2インスタンスが削除されるとEBSボリュームも削除される設定になっていることになります。
DeviceNameは設定を変更する際に使用することになるので、控えておきます。
DeleteOnTerminationをfalseに設定を変更すると、EC2インスタンスを終了して削除してもEBSボリュームは削除されず残り続けます。
# インスタンスの終了時にEBSボリュームを削除しないように設定更新
aws ec2 modify-instance-attribute --instance-id [インスタンスID] --block-device-mappings "[{\"DeviceName\": \"/dev/xvda\", \"Ebs\": {\"DeleteOnTermination\": false}}]"
DeleteOnTerminationがfalseに設定が変更されているか確認します。
スナップショットとDeleteOnTerminationの使い分け
「スナップショットでいいのではないか?」という疑問を思った方は多いかと思いますが、スナップショットとDeleteOnTerminationの用途は違います。
DeleteOnTerminationの場合
DeleteOnTerminationは、EC2インスタンスの終了時にEBSボリュームを削除するかどうかを制御する設定です。
用途として以下のような場合が挙げられます。
- 即時復元や再利用が必要な場合:すぐに復元・再利用したい
- 短期間のデータ保持:開発環境やテスト環境など、短期間だけデータを残したい
- インスタンスのデータ保護:誤ってインスタンスを終了してしまった場合の保険としてデータを保持したい
EBSボリュームはストレージコストが発生し続けるため、放置してるとコストが増えます。
ボリュームが多くなると管理がしにくくなるため、定期的な確認をする必要があります。
スナップショットの場合
スナップショットはEBSボリュームのデータをAmazon S3にバックアップとして保存する仕組みです。
スナップショットは増分バックアップなので、コスト効率が良く、長期的なデータ保管に向いています。
用途として以下のような場合が挙げられます。
- 長期的なデータ保管・バックアップ:将来的に復元するためのデータを残したい
- 災害対策(DR対策):別のリージョンにコピーして、災害対策として保管したい
- コスト削減:コストを抑えたい
スナップショットからの復元には少し手間と時間がかかるため、即時利用が必要な場合には向きません。
まとめ
EBSボリュームのバックアップやデータ保護を考える際、以下のポイントを意識しましょう。
短期的なデータ保持や即時復元が必要な場合
→ DeleteOnTerminationをfalse に設定し、EBSボリュームをそのまま残す。
長期的なデータ保管やコスト削減を重視する場合
→ スナップショット を取得してAmazon S3に保存する。
開発環境とかで短期的な開発とかになるとIAMポリシーの設定でインスタンス終了できないようにしたりする時間がないです。
少ないですが、開発者が誤って削除したりする時はあるのでその場合に備えてこの設定にすることが多いです。