Tech Sketch Bucket of Technical Chips by TIS Inc.

AWS Tips - EC2インスタンス削除時にEBSボリュームも削除する -

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの松尾です。

今回は、EC2インスタンス削除時にアタッチされているEBSボリュームも同時に削除する方法を紹介します。

Delete on terminationについて

AWSではEC2インスタンス削除時にEBSボリュームが削除されるかどうかは、Delete on terminationの値によって決まります。

  • Delete on terminationがTrueの場合: EC2インスタンス削除時にEBSボリュームを削除する
  • Delete on terminationがFalseの場合: EC2インスタンス削除時にEBSボリュームを削除しない

このDelete on terminationは、EC2インスタンス作成時に設定することができます。

Delete on terminationはチェックを入れるとTrueになり、外すとFalseになります。

しかし、EC2インスタンス作成後にEBSボリュームをアタッチする場合には、Delete on terminationを設定する項目がなく、自動的にFalseに設定されます。

また、現在(※2014年5月7日)のAWSマネジメントコンソールでは、アタッチ済みのEBSボリュームのDelete on terminationを変更することができないので、変更する場合はAWS CLIやAWS SDKを用いる必要があります。

そこで今回は、AWS SDK for Rubyを用いてEBSボリュームのDelete on terminationを変更し、EC2インスタンス削除時にEBSボリュームも同時に削除する方法を紹介します。

AWS SDK for RubyでDelete on terminationの値を変更する

ここでは、EC2インスタンス削除時に同時に削除したいEBSボリュームがアタッチされていることを想定します。

まずは、現在のEBSボリュームのDelete on terminationを確認します。
EBSボリュームがアタッチされているEC2インスタンスのBlock Devicesの項目から、アタッチ先(この例では/dev/sdi)にカーソルを合わせクリックするとDelete on terminationを確認できます。

この例では、Delete on terminationがFalseに設定されていることがわかります。

Delete on terminationをTrueに変更するために、下記のプログラムを作成します。
今回筆者が用いたaws-sdkのバージョンは1.40.0になります。

プログラム8行目のmodify_instance_attributeは、EC2インスタンスのインスタンス属性を変更するメソッドです。
今回はDelete on terminationを変更するので、:block_device_mappingsに変更したい内容を指定します。12〜14行目のように指定すると、:device_nameで指定したEBSボリュームのDelete on terminationをTrueにすることができます。
メソッドの詳細については、公式のAPI Document(英語)をご覧ください。

プログラムが作成できたら実行します。

コマンドを実行したら、AWSマネジメントコンソールで結果を確認します。
さきほど確認したのと同様にして、EBSボリュームがアタッチされているEC2インスタンスのBlock Deviceの情報を表示します。

無事にDelete on terminationがTrueになっていれば成功です。
これでEC2インスタンス削除時にEBSボリュームも削除されるようになりました。

最後に

今回はEC2インスタンス削除時にアタッチされているEBSボリュームも削除するようにAWS SDK for Rubyを用いてDelete on terminationを変更しました。
もし他のEC2インスタンスに付け替えたい等の理由で、アタッチしたEBSボリュームをEC2インスタンス削除後も残したい場合は、デフォルトのFalseのまま変更する必要はありません。
Delete on terminationは必要に応じて変更を行うようにしてください。

エンジニア採用中!私たちと一緒に働いてみませんか?