タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

AMI(EBSスナップショット)の使用量と料金を確認する

まとめ

  • ボリュームサイズとスナップショットの使用量は別
  • スナップショットの使用量を知るにはコストエクスプローラーを使う
  • EBS:SnapshotUsage (GB-Month) 使用タイプとコスト配分タグを組み合わせる

事の起こり

現在、EC2 ImageBuilder で作成したGolden AMIを使った Immutable Infrastructure を構成し、運用しています。 この運用だと、アプリケーションコードの更新やセキュリティアップデートなどで頻繁にAMIを作成することになります。

AMIはEBSスナップショットと組なので、AMIをたくさん作るということは、EBSスナップショットをたくさん作るということになります。

Amazon マシンイメージ (AMI)

個々のスナップショットの容量が数GB、それがたくさんともなれば心配になるのは費用です。

f:id:uzuki05:20200327180719p:plain

「EBSスナップショットの課金容量=ボリュームサイズ」ではない

ドキュメントによれば、スナップショットの課金額は、

  • ストレージの実際に使っているブロックを
  • 圧縮して
  • 作成元のEBSスナップショットからの差分

になるようです。

では、実際に請求対象となる「データを Amazon S3 で保存するのに使用された領域の大きさ」はどこで見られるのでしょう?

参考

スナップショットストレージの基盤になるのは、データを Amazon S3 で保存するのに使用された領域の大きさです。Amazon EBS では空のブロックが保存されないため、スナップショットのサイズはボリュームサイズよりもかなり少なくなるはずです。ボリュームの最初のスナップショットについては、データ全体のコピーが Amazon S3 に保存されます。増分スナップショットごとに、Amazon EBS ボリュームの変更部分のみが保存されます。

Amazon EBS の価格

Snapshotに関しては、EBSボリュームの実サイズがそのまま計算されるのではなく、 圧縮してコピーされ、増分については変更部分のみ保存されます。 (費用をできる限り軽減するようにさせて頂いております。) 

AWS Developer Forums: EBSスナップショットについて ...

Amazon EBS-Backed の AMI の場合、AMI をカスタマイズしたり、新しい AMI を作成したりするたびに、変更のみが保存されます。そのため、最初の AMI の後にカスタマイズする後続の AMI のストレージフットプリントははるかに小さくなり、AMI ストレージ料金が少なくなります。

AMI タイプ

コストエクスプローラーを使う

コストエクスプローラー「使用タイプ」で「EBS:SnapshotUsage (GB-Month)」を選ぶと、スナップショットの「Total usage (GB-Month)」と「Total cost ($)」を確認できます。

f:id:uzuki05:20200327182440p:plain

これだけだと、すべてのスナップショットの合計になるので、特定のスナップショットの使用量を知るには、コスト配分タグを使います。

  1. EBSスナップショット(AMIではない)にタグを付ける(例 RailsEnv=production Service=app CommitID=0123456789abcdef など)
  2. 作成したタグを「ユーザー定義のコスト配分タグ」としてアクティブ化
  3. コストエクスプローラーの「タグ」で選択

このようにEBS:SnapshotUsage (GB-Month) 使用タイプコスト配分タグを組み合わせることで、AMI(EBSスナップショット)の使用量と料金を確認することができます。

コスト配分タグ

コスト配分タグは、AWSの各リソースに設定した「タグ」をもとに、タグごとの利用状況・コストを分析できる機能です。

ただし、リソースに設定したタグはそれだけではコスト配分タグとしては利用できず、別途、「ユーザー定義のコスト配分タグのアクティブ化」の操作が必要です。

ユーザー定義のコスト配分タグのアクティブ化

aws.amazon.com