AWS Pricing Calculator の EBS スナップショットの Discount for partial storage month とは

AWS の見積もりツールである AWS Pricing Calculator の EBS スナップショットの見積もりには Discount for partial storage month という項目があります。本記事では EBS スナップショットの料金計算のステップとともに Discount for partial storage month の意味を解説します。
2024.05.16

目的・背景

クラスメソッドタイランドの清水です。
AWS には AWS Pricing Calculator という料金見積もりツールがあります。

その中で EBS のスナップショットの見積もりを作っていたら、以下のように Discount for partial storage month と書いてあり、何のことかよくわかりませんでした。

https://calculator.aws/#/createCalculator/EBSサービスの設定 > 計算を表示 をクリックするとこれを確認できます。

パッと見、「なんか割引されてる、ラッキー。。?」と思っていましたが、調べてみたら思っていた discount と意味が違いました。

この記事では、Discount for partial storage month について理解するため、AWS Pricing Calculator EBS の サービスの設定 > 計算を表示 のスナップショットの部分を1ステップずつ見ていきます。

仮定 & 前提

仮定

今回は、分かりやすいように以下を仮定します。

  • 1つの EBS ボリュームのスナップショットを継続的に作成する
  • 初めてスナップショットを作成するのは月の1日目
  • 1ヶ月の日数は 31日間
  • ボリュームあたりのストレージ量: 30GB
  • スナップショットの頻度: 毎日
  • スナップショットごとの変更量: 3GB
  • スナップショットの料金: $0.05/GB-month

雑に言うとある1つの EBS ボリュームについて1日1回スナップショットを作成し、その EBS ボリュームは1日に 3GB ずつ容量が増える、という仮定です。
棒グラフにすると、横軸が1ヶ月間の日にち、縦軸がその日に作成するEBS スナップショットの大きさで表せます。

初日のスナップショット作成時の EBS ボリュームの容量が 30GB、2日目が 33GB、、、、31日目が 120GB といった具合です。

AWS Pricing Calculator でこのように設定すると、サービスの設定 > 計算を表示 には以下のように表示され、スナップショットのコストは 3.75 USD/月 となります。

Total snapshots: 30
Initial snapshot cost: 30 GB x 0.0500000000 = 1.5 USD
Monthly cost of each snapshot: 3 GB x 0.0500000000 USD = 0.15 USD
Discount for partial storage month: 0.15 USD x 50% = 0.075 USD
Incremental snapshot cost: 0.075 USD x 30 = 2.25 USD
Total snapshot cost: 1.5 USD + 2.25 USD = 3.75 USD
3.75 USD x 1.00 インスタンス月 = 3.75 USD (EBS スナップショットの合計コスト)
EBS スナップショットコスト: 3.75 USD

(スナップショットの部分だけ抜粋しています)

前提知識

各項目を見ていく前に、EBS のスナップショットの方法と課金方法について触れます。
EBS ボリュームのスナップショットは incremental です。
簡単に言うと、1つのボリュームに着目したときに最初にスナップショットを作成する際は使用している容量すべてのバックアップを作成し、
それ以降同じボリュームのスナップショットを作成すると、前回との差分だけバックアップストレージの料金が発生するイメージです。

https://docs.aws.amazon.com/ebs/latest/userguide/ebs-snapshots.html#how_snapshots_work
こちらのドキュメントが分かりやすいです。

サービスの設定 > 計算を表示 を1つずつ確認する

それでは サービスの設定 > 計算を表示 の項目を 1つずつ見ていきますが、先に方針を書きます。
AWS Pricing Calculator に少し解釈をいれると
Total snapshot cost
= Initial snapshot cost + Incremental snapshot cost
= 1.5 USD + 2.25 USD
= 3.75 USD

となります。
これに合わせて、 Initial snapshot costIncremental snapshot cost に分けて考えていきます。

図で見ると、赤色の部分が Initial snapshot cost、青色の部分が Incremental snapshot cost です。

Initial snapshot cost

Total snapshots: 30

これは初日のスナップショットの大きさのようです。
特にコメントはないです。

Initial snapshot cost: 30 GB x 0.0500000000 = 1.5 USD

これは初日に作成したスナップショットの1ヶ月のコストです。 $0.05/GB-month なので、 30 GB x 0.05 = 1.5 USD です。

図の赤色の部分の料金です。

これで、Initial snapshot cost (図の赤色部分)が求まりました。

Incremental snapshot cost

  • Monthly cost of each snapshot: 3 GB x 0.0500000000 USD = 0.15 USD
  • Discount for partial storage month: 0.15 USD x 50% = 0.075 USD
  • Incremental snapshot cost: 0.075 USD x 30 = 2.25 USD

この3つがトリッキーに感じました。
図での表現のしやすさのため 2番目と 3番目の計算の順番を入れ替えて、

  1. 3 GB x 0.0500000000 USD = 0.15 USD
  2. 0.15 USD x 30 = 4.5 USD
  3. 4.5 USD x 50% = 2.25 USD

で考えます。

3 GB x 0.0500000000 USD = 0.15 USD とあるので、各スナップショットの月間のコストが 0.15 USD ずつとしています。
以下の図の1本の黄色の棒が 0.15 USD です。

図の通り、当月をはみ出しています。

つぎに 0.15 USD x 30 = 4.5 USD です。

1本の黄色の棒が 0.15 USD で、それが30本あるので 0.15 USD x 30 = 4.5 USD としています。
この段階ではすべての黄色の棒が 31日目をはみ出しており、1ヶ月分以上の金額がかかるような計算になっています。

最後に 4.5 USD x 50% = 2.25 USD です。

以上の図から、31日目の縦軸の右側と左側が点対称になっていることが分かります。
なので、31日目で縦に切ると青色の部分が残り、 Incremental snapshot cost の部分のコストが分かります。

Total snapshot cost

これで 1ヶ月のスナップショットの金額が

Total snapshot cost = Initial snapshot cost + Incremental snapshot cost = 1.5 USD + 2.25 USD = 3.75 USD

となることが分かります。

結論、Discount for partial storage month は割引されているわけではなく、増加するスナップショットのコストを計算するためのただの1つのステップということになります。

最後に

AWS Pricing Calculator EBS における Discount for partial storage month は、一見割引のように見えますが、実際には 増加するスナップショットのコストを計算するためのステップです。
同じ疑問を持たれた方の理解の助けになれば幸いです。

参考