Azure Savings Plan for compute（Azure 節約プラン）について調べてみた

# はじめに

昨年開催された Ignite 2022 にて「Azure Savings Plan for compute（以下、節約プラン）」が発表されました。Azureでは、従来よりRI（Reserved Instance）を購入することでコスト最適化を図ることができましたが、RIは購入条件に何かと制約があったため、一部のワークロード(例えば24/365で稼働しているVMなど)では効果的でしたが、使いどころが限られるものでした。今回発表された「節約プラン」はRIより汎用性がありそうです。その内容について見てみましょう。

# 節約プランとは

節約プランは、Azureのコンピューティングリソースの利用を事前コミットする代わりに安く利用することができるプランです。1年または3年の期間を選択することができます。一見RIと同じですが、RIは購入時に対象のVM SKUやリージョンを選択する必要があるのに対し、節約プランはその制約がありません。

例えば、DSシリーズから「D2s_v4」インスタンス（東日本/Linux）の月額利用料で計算してみます。
※料金は2023年1月執筆時点です。

| &nbsp;&nbsp;&nbsp;プラン | 期間 | 金額 | 割引率&nbsp;&nbsp; | 
|---|---|---|---:|
|従量課金|-|$90.52|-|
|RI|1年|$53.25|41%|
|  |3年|$34.03|62%|
|節約プラン|1年|$67.67|25%|
|          |3年|$47.63|47%|

制約がない分割引率はRIより下がりますが、それでもかなりお得になります。

## 対象サービス
節約プランが適用可能なAzureサービスは以下の通りです。（2023年1月現在）
* __Azure Virtual Machines__（ベアメタルインフラストラクチャ、A、G、GS シリーズは除く）
* __Azure Functions Premium__
* __Azure App Service Premium v3 およびIsolated v2__
* __Azure Container Instances__
* __Azure Dedicated Host__

特にFunctionsやApp Serviceについては、SKUやバージョンによって適用可否が変わりますので注意してください。また、 __AKSやAVDといった、サービス内でVMが稼働しているサービスについても適用可能__ です。

(2023/1/31追記)
上記Azureサービスがどういう順番で適用されるかはユーザ側では選択できません。Azure側で割引率が良いサービスから準に適用されるようです。結果的にどのサービスにどれだけ節約プランが適用されたかは利用明細を確認するしかなさそうですね。

## 購入できるユーザ
節約プランが購入できるユーザは以下の通りです。（2023年1月現在）
* __Enterprise Agreement ユーザ__
    * EA管理者が、Azureポータルから購入
    * サブスクリプションの所有者が、Azureポータルから購入（EA管理者がポリシーで許可した場合のみ）
* __Microsoft Customer Agreement ユーザ__
    * 課金プロファイル共同作成者以上の権限を持つユーザが、Azureポータルから直接購入
    * サブスクリプションの所有者が、Azureポータルから購入（課金プロファイル共同作成者がポリシーで許可した場合のみ）
* __Microsoft Partner Agreement パートナー（CSP）__
    * CSPベンダーが、Azureポータルから購入

MSのサイトを見る限り、「従量課金制（MOSP）」や「Open ライセンス」には適用できません。

## 購入可能なスコープ
節約プランの適用可能なスコープは以下の通りです。
* __共有スコープ__
* __管理グループ__
* __サブスクリプション__
* __リソースグループ__

「共有スコープ」は、RIにも同じ概念がありますが、EAのような契約の配下にぶら下がっているAzure環境に適用される、ということです。「管理グループ」を構成していなくても使えるということですね。節約プランは複数購入することができますが、異なるスコープで購入した場合の適用の優先度は、スコープが狭い方から適用されます。（つまり、リソースグループ→サブスクリプション→管理グループ→共有スコープ）また、購入後のスコープ変更もできます。

## 節約プランとRIの違い
節約プランとRIの違いについて整理します。（MS資料ベース）
||節約プラン|Reserved Instance|
|---|:---:|:---:|
|割引率|最大65%|最大72%|
|コミットメント|時間単位の利用料|指定SKU/リージョンおよび数量|
|期間|1年 or 3年|1年 or 3年|
|支払方法|一括前払い or 毎月の分割|一括前払い or 毎月の分割
|キャンセル可否|否|可(上限あり※)|

※契約形態によって条件が変わるため提供元にお問い合わせください。

RIと節約プラン両方適用可能な場合は、RIが優先的に適用されます。節約プランはRI適用されたリソース以外のリソースに適用されます。
あとは、期間限定でRIから節約プランへの変更もできるようです。（ただし、節約プランはRIの残額以上で購入する必要がある。）

## 詳細な仕組み
節約プランの詳細な仕組みについて解説します。まず認識しておく必要があることとして、本プランのコミット対象は「１時間当たりのAzureリソース利用料」になります。例えば自身のAzure環境のVMリソースが常に100ドル/時間 発生しているケールにおいては、節約プランの1年コミットが25%割とすると、75ドルコミットしておけばOKということになります。（まぁ常時起動しているならRIを適用すべきですが。）
なお、１時間の利用を75ドルでコミットした場合は、75ドル分は節約プランの料金が適用され、それを超えると従量課金が適用されます。


## 節約プランの使いどころ

節約プランは、Azureリソース量が動的に変わるケースに対して、より効果的に機能します。

### ケース①　開発環境

我々がまず思いつくのは「開発環境」でしょう。開発環境のVMは常時起動する必要がないものが多いですし、VMの数もプロジェクトのフェーズによって増減します。環境内のAzureリソース量が流動的である状態では、RIのように「どのSKUを何本適用するか」という買い方は不向きです。他方、節約プランは、リソースではなく利用料にコミットするので、このような状況に適しています。

### ケース②　フォロー・ザ・サン

これはMicrosoftの説明会で紹介されたケースです。フォロー・ザ・サンというのは、24時間体制のヘルプデスクを構築する時の考え方で、東京・アメリカ・ヨーロッパの3拠点で8時間毎（各拠点の日中帯）の交代制でヘルプデスクを運用することを指します。例えば、東京が稼働している時間帯は、アメリカ・ヨーロッパの拠点は非稼働なので現地のヘルプデスクシステムは落としておく訳ですが、このシステムに対してコスト削減を図る場合、RIだと「どのリージョン」という縛りがありますので、うまく最適化できません。他方、節約プランはその制約がありませんので、最大限のコスト最適化を行うことができます。


極端にリソース量が変わるようなケース（例えば夜間バッチで１日１時間だけ大量のVMを立ち上げる）には適用は難しいと思いますが、常識的な利用想定の範囲であれば十分に効果が出るものと思います。


## 購入方法
節約プランを購入する画面は下記になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/7247e5d5-db40-fec0-b194-2ef3f05ed725.png)

黄色マーカーの箇所が「１時間当たりのAzureリソース利用料」の入力欄です。__ドル（＄）ベース__ になっていることに注意してください！
節約プランをいくらに設定すればいいか分かりにくいのですが、対象環境の過去30日の利用実績を元に自動でリコメンドしてくれる機能が付いています。”View recommendations”の部分をクリックすると、何割くらいのリソースに適用されてどのくらいの割引率になるか、いくつかのパタンを提示してくれます。（便利ですね！）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/9875eabe-cd14-6a8e-a129-209749ed3fad.png)

# コスト最適化に向けたプランの使い分け

コストを正しく最適化するためには、環境内のリソースを以下の３つの分類に分けて、適したプランで運用しましょう。

1. 常時稼働しているリソース →　__RI__ の購入
2. 利用頻度やリソース量の変化にある程度流動的なリソース　→　__節約プラン__ の購入
3. 利用頻度やリソース量の変化に一貫性がないリソース　→　__従量課金__ のまま

コスト最適化のイメージは以下のようになります。例えば、1. が30万円、2. が50万円、3. が20万円で合計100万円のコストが発生しているとすると、RIや節約プランを適用することで、2~3割のコスト削減は容易いです。ただ、各プランの購入量については、ギリギリを責めると損をしてしまうこともありますので、ある程度安全率を見て設定しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/566e3cf8-5e96-6836-c24f-5c077881554b.png)


# その他の留意事項

### 1. オンデマンド容量予約との併用不可

節約プランはリソースのキャパシティ確保を保証するものでありません（これはRIも同じ）。キャパシティ確保したい場合は、オンデマンド容量予約を購入することになりますが、2023年1月時点で、「節約プラン＋オンデマンド容量予約」の組み合わせは非サポートとのことです。（「RI＋オンデマンド容量予約」は可能）

https://learn.microsoft.com/ja-jp/azure/virtual-machines/capacity-reservation-overview

### 2. OSライセンス費は別モノ

・節約プランの対象はあくまでコンピュートリソースなので、WindowsのOSライセンス費は適用外です。Windowsライセンス費のコストを下げたい場合は、Azure Hybrid Benefitなどがありますので、こちらを検討ください。

https://azure.microsoft.com/ja-jp/pricing/hybrid-benefit/


# おわりに

今回は、「Azure Savings Plan for compute（Azure 節約プラン）」について詳しく見ていきました。私自身も興味あったものの中々調べることができなかったため、今回理解を深めることができて良かったです。早速お客様へ提案していきたいと思います。みなさんも節約プラン、是非使ってみてください！
それでは！