💰

Savings plan の計算方法が複雑

2022/11/27に公開

Azure savings plan for compute の GA

おめでとうございます。
今までの Reservation (RI、Reserved Instance などと呼ばれることも多い) に加えて、あたらしいコスト節約の方法が出てきました。

https://azure.microsoft.com/updates/general-availability-azure-savings-plan-for-compute/

TL;DR

  • commitment が必要なのは時間当たりのコストだけで、region や VM SKU をまたいで適用される柔軟性を持つ
  • 柔軟性とのトレードオフで、Reservation よりは割引率が低い
  • 計算式がなんか複雑だけどいい感じに安くしてくれる

だいたいこんな感じです。

計算式はどんな感じか

どんな感じで計算するんかねぇと思ったところここに書かれておりました。

https://learn.microsoft.com/partner-center/azure-savings#how-are-the-savings-plan-charges-calculated

まぁなんか複雑なことやってるなぁと思いつつ、結局は Azure が勝手に計算してくれて、いい感じに安いプランにしてくれそうです。
毎月この計算が合っているからあとから検算するとかってのはほぼ現実的ではなさそうです。

サンプルどおり計算してみる

Docs 上の表がわかりづらいように感じたので再度書き直してみます。

項目 計算式
時間単位のコミットメント USD 0.01 A
従量課金制の 1 時間あたりの料金 USD 0.3264 B
1 年間のコミットメントの割引 31.43% (0.3143) D
割引後の従量課金制の 1 時間あたりの料金 USD 0.22381248 C = B * (1 - D)
コミットメントでのカバー率 0.044680261 (約 4.4%) S = A / C
コミットメントでカバーされていない率 0.955319739 (約 96%) P = 1 - S
1 時間あたりの料金の計算結果 USD 0.321816363 K = A + B * P

というわけで、確かに従量課金でそのまま使う (USD 0.3264) のと比べると Savings plan を利用したほうが安価 (約 USD 0.3218) となってますね。

コミットメントの金額を少し上げて (USD 0.10) みます。

項目 計算式
時間単位のコミットメント USD 0.10 A
従量課金制の 1 時間あたりの料金 USD 0.3264 B
1 年間のコミットメントの割引 31.43% (0.3143) D
割引後の従量課金制の 1 時間あたりの料金 USD 0.22381248 C = B * (1 - D)
コミットメントでのカバー率 0.446802609 (約 44%) S = A / C
コミットメントでカバーされていない率 0.553197391 (約 55%) P = 1 - S
1 時間あたりの料金の計算結果 USD 0.280563628 K = A + B * P

先ほどよりさらに金額が下がりました。

3 種類の SKU で計算してみる

実際には Azure VM が 1 つの種類である、ということもないとは思うので、複数の SKU の場合にどうなるでしょうか。
ちゃんと Docs に書かれているのですが、割引率が高いものから適用されていきます。

ベネフィットは、同等の従量課金制の料金と比較して、最大の節約プラン割引がある製品に最初に適用されます (節約プランの価格については、価格表を参照してください)。

https://learn.microsoft.com/azure/cost-management-billing/savings-plan/discount-application

実際に簡単に計算してみます。
それぞれの値は完全に適当です。
画面幅の関係から表示上小数点以下 2 桁で丸めていますが、内部的には丸めずに計算してあります。

  • コミットメントは USD 0.10 とします
    • どの SKU に適用したとしてもカバーしきれないため、ここではどれかに適用される、というイメージです
  • SKU #1 の時間単価が USD 0.3264 として、SKU #2 はその倍、SKU #3 はさらにその倍としています
  • SKU #1 の Savings plan での割引率が 31.43%、SKU #2 はその +10%、SKU #3 はさらに +10% としています
SKU #1 SKU #2 SKU #3 合計
時間単位のコミットメント USD 0.10 USD 0.00 USD 0.00 USD 0.10
従量課金制の 1 時間あたりの料金 USD 0.33 USD 0.65 USD 1.31 USD 2.28
1 時間あたりの料金の計算結果 USD 0.28 USD 0.65 USD 1.31 USD 2.24
SKU #1 SKU #2 SKU #3 合計
時間単位のコミットメント USD 0.00 USD 0.10 USD 0.00 USD 0.10
従量課金制の 1 時間あたりの料金 USD 0.33 USD 0.65 USD 1.31 USD 2.28
1 時間あたりの料金の計算結果 USD 0.33 USD 0.58 USD 1.31 USD 2.21
SKU #1 SKU #2 SKU #3 合計
時間単位のコミットメント USD 0.00 USD 0.00 USD 0.10 USD 0.10
従量課金制の 1 時間あたりの料金 USD 0.33 USD 0.65 USD 1.31 USD 2.28
1 時間あたりの料金の計算結果 USD 0.33 USD 0.65 USD 1.20 USD 2.18

PAYG の場合の合計が約 USD 2.28 であるのに対し、一番割引率の高い SKU #3 に対してまず Savings plan を適用した場合が一番合計コストが低く (約 USD 2.18) となっています。
これは Docs の記載どおりであり、いい感じに安くなるように計算してくれそうです。

参考

  • 英語ではありますが、有名な YouTuber の方が説明してくれています

https://www.youtube.com/watch?v=lBnKBV2r6lI

Microsoft (有志)

Discussion