最近AWS利用料金が高いなと思って確認したら、想定外の料金が請求されていたことはないでしょうか?
自分も利用料金の明細を見て、驚いたことがあったのでその要因と対処方法について紹介します。
どこにもアタッチされていないEBSボリュームが残っている
EC2インスタンスのストレージの「終了時に削除」オプションですが、インスタンス起動時には「はい」にしていたのに、構築時のテストや障害などでボリュームの付け替えを行うと「いいえ」に変わってしまいます。
ボリュームを付け替えした際の「終了時に削除」オプションの変化
- ボリューム付け替え前の「終了時に削除」オプションの状態
- EC2インスタンスよりボリュームをデタッチ
- EC2インスタンスにボリュームをアタッチ
- ボリューム付け替え後の「終了時に削除」オプションの状態
変わったことに気づかずにEC2インスタンスを終了すると、どこにもアタッチされていないEBSボリュームだけが残った状態になり、このまま放置しておくと想定外の料金が請求されることになります。
ボリュームを付け替えた後は「終了時に削除」のオプションを「はい」に戻すようにしましょう。
「終了時に削除」オプションの変更
AWSマネージメントコンソールからの「終了時に削除」オプションの設定は、インスタンス起動時しかできません。
既に起動済みのインスタンスの場合は、AWSCLIからの変更となります。
今回はAWSCLIの環境を用意しなくても実行できるCloudShellを利用する方法で行います。
事前確認
該当EC2インスタンスのインスタンスIDとオプション変更するボリュームの情報(ボリュームID、デバイス名)を控えておきます。
変更手順
- AWSマネージメントコンソールの右上にある「CloudShell」のアイコンをクリックします
- 変更前のボリューム状態を確認します
確認コマンド
※<インスタンス-ID>には事前確認で控えたインスタンスIDを指定します
実行結果aws ec2 describe-instance-attribute --instance-id <インスタンス-ID> --attribute blockDeviceMapping
※DeviceName、VolumeId、InstanceId が事前確認で控えた情報と合っているか確認します - 「終了時に削除」オプションを変更します
変更コマンド
※<インスタンス-ID>、<デバイス名>、<ボリューム-ID>は事前確認で控えた情報を指定
途中のバックスラッシュはエスケープ文字です。
実行結果aws ec2 modify-instance-attribute --instance-id <インスタンス-ID> --block-device-mappings"
{
\"DeviceName\":\"<デバイス名>\",
\"Ebs\":
{
\"DeleteOnTermination\":true,
\"VolumeId\":\"<ボリューム-ID>\"
}
}"
※実行してエラーが無ければメッセージは表示されません - 変更後のボリューム状態を確認します
確認コマンド(2と同じ)
実行結果
※DeleteOnTermination が 「true」に変わっていることを確認
AWSマネージメントコンソールの画面からも念のため確認しましょう
以上で「終了時に削除」オプションの変更は完了です
補足
「終了時に削除」オプションが「いいえ」の状態でインスタンスの終了をしようとすると以下のメッセージが表示されます。対象ボリュームを残しておく必要がなければ削除を忘れずにする手順にしておけばなお良いかと思います。
終わりに
AWSの利用料金で上位をしめるのはEC2インスタンスの稼働料金とEBSボリュームの料金だと思いますので、不要なEBSボリュームの料金が発生していないか気を付けたいですね。
最後まで読んでいただき有難うございました。