[小ネタ]特定期間以前に作成されたEBSスナップショットのボリューム全量を一発で取得する方法

溜まっているEBSスナップショットはありませんか?
2024.02.15

1年以上前に作成されたEBSスナップショットのボリューム全量を把握したい

こんにちは!AWS事業本部のおつまみです。

みなさん、特定期間以前に作成されたEBSスナップショットのボリューム全量を把握したいと思ったことはありますか?私はあります。
先日あるアカウントでコスト削減できる箇所を調査していたところ、EBSスナップショットが大量に作成されていることに気づきました。

そこで1年以上前に作成されたEBSスナップショットを削除する場合にどのくらいコストを削減できるか確認することにしました。
EBSスナップショットの料金を知るためには、ボリューム全量を知る必要があります。
しかし、コンソールから1年以上前のリソースはフィルターできるものの、全量までは把握できません。

そこで今回は全量を把握するために使用した方法をお伝えします!

いきなり結論

  • aws ec2 describe-snapshotsコマンドとjqコマンドを併用することで一発で取得できる

やってみた

マネジメントコンソールからCloudShellを起動します。

CloudShellが起動したら、以下のコマンドを実行するだけです。

aws ec2 describe-snapshots --owner-ids self --query "Snapshots[StartTime<='2023-02-15'].VolumeSize" --output json | jq 'add'

実行するとこのように1年以上前に作成されたEBSスナップショットの全容量が取得できます。

aws ec2 describe-snapshots --owner-ids self --query "Snapshots[StartTime<='2023-02-15'].VolumeSize" --output json | jq 'add'
31352

簡単にコマンドを解説します。

  • --owner-idsオプション:自分が所有するスナップショットのみを対象にする
  • --queryオプション:特定の時間の範囲を指定する(この例ではブログ執筆日2024/2/15から1年前に作成されたスナップショットを対象にしています)
  • jq 'add':取得したボリュームサイズの配列に対してadd関数を適用し、容量の合計値を出力する

なおCloudShellを使用せず、お手持ちのPCでインストールしたAWS CLIから実行する場合はjqコマンドがインストールされていることを確認して下さい。

おまけ:どのくらい費用削減できるのか?

EBS スナップショットのストレージ料金はスタンダードで0.05USD/1 か月あたりの GBです。
そのため、今回取得した全容量のスナップショットを削除した場合、31,352GB × 0.05 で 1567.6USD(約23.5万円)の費用を削減できます。

そのためEBSスナップショットを定期的に取得している場合には、定期的な棚卸しやLifecycle Managerを導入することを検討しましょう。

スナップショットのライフサイクルの自動化 - Amazon Elastic Compute Cloud

さいごに

今回は、特定期間以前に作成されたEBSスナップショットのボリューム全量を把握する方法をご紹介しました。

気づいたら見知らぬスナップショットが増えている..なんてことがないよう管理していきましょう!

最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!

参考

describe-snapshots — AWS CLI 1.32.42 Command Reference

スナップショットのライフサイクルの自動化 - Amazon Elastic Compute Cloud