AWSの新価格モデル Savings Plans とは？オンデマンドやリザーブドインスタンスと比較する

2019/11/7に、AWSからSavings Plansという新しいAWS利用料節約のための価格モデルが登場しました。
このSavings Plansについて調べてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/7b418394-1aba-6b3d-2e9b-99cbd25214a6.png)

# 更新履歴
* 2019/11/07: 初版。EC2とFargate (for ECS) が割引対象に。
* 2020/02/21: 更新。新たにLambdaが割引対象に追加。
* 2020/04/06: 更新。Organizationsのメンバーアカウントから推奨事項が確認可能に。
* 2020/05/10: 更新。価格改定により、EC2 Instance Savings Plansの一部のEC2インスタンスタイプで、従前に比べて最大18%の値下げ。
* 2020/08/11: 更新。新たにFargate (for EKS) が割引対象に追加。
* 2020/09/25: 更新。Savings Plansの予約が可能に。
* 2020/11/09: 更新。Savings Plansの有効期限前と予約購入前にアラート発報が可能に。
* 2021/01/26: 更新。Wavelength ZonesにおけるEC2 Instance Savings Plansの記述を追記。
* 2021/04/23: 更新。新たにSageMaker Savings Plansが購入可能に。
* 2024/03/20: 更新。購入後7日以内の返品が可能に。
* 2024/11/22: 更新。新たにSavings Plans Purchase Analyzerが使用可能に。

# (そもそも) オンデマンドとは
そもそも、AWSの利用料は通常**オンデマンド** (使った分だけお支払い) です。
オンデマンドで利用料を支払うことが適した場面は以下の通りでした。

* 短期的に利用する場面
* スパイクが発生し、リソースの使用量の予測が難しいワークロード
* 開発環境
* テスト環境

これらの環境ではオンデマンドで利用料を支払うことが適しています。

# リザーブドインスタンスとは
オンデマンドに対し、リザーブドインスタンス (RI) があります。
以下で示すように、リザーブドインスタンスを購入すると、大幅に利用料を削減できます。

* 1年間または3年間の利用料を前払いする代わりにコスト削減
* 最大でオンデマンドから7割以上も削減

リザーブドインスタンスは、オンデマンドとは異なり、定常的に利用する場合には積極的に活用すべきものです。
2016年にはリージョンRI、2016年にはコンバーティブル(変更可能)RIが登場し、選択肢も増えています。
また、Linuxインスタンスにおいては、大きなインスタンスサイズのRIに対し、複数の小さなインスタンスサイズのRIを適用できるなど、柔軟に適用してコスト削減が可能となります。

# 新たに登場したSavings Plansとは
従来存在していたこれらの支払い方法に加えて、今回、新たにSavings Plansが加わりました。

**New – Savings Plans for AWS Compute Services**
https://aws.amazon.com/jp/blogs/aws/new-savings-plans-for-aws-compute-services/

**2020/2/21追記: Lambdaが割引対象に加わりました。**
**Savings Plan Update: Save Up to 17% On Your Lambda Workloads**
https://aws.amazon.com/jp/blogs/aws/savings-plan-update-save-up-to-17-on-your-lambda-workloads/

**2020/8/11追記: Fargate for EKSが割引対象に加わりました。**
**AWS Fargate for Amazon EKS now included in Compute Savings Plans**
https://aws.amazon.com/jp/about-aws/whats-new/2020/08/amazon-fargate-aws-eks-included-compute-savings-plan/

**2021/4/23追記: 新たにSageMaker Savings Plansが購入可能になりました。**
https://aws.amazon.com/jp/about-aws/whats-new/2021/04/ec2-enables-replacing-root-volumes-for-quick-restoration-and-troubleshooting/


ドキュメントの解説に基づき、特徴を整理してみました。

## (1) Savings Plansの特徴
### 概要
* **EC2**、**Fargate for ECS**の利用料を最大で72%削減できます。
* **Fargate for EKS**の利用料を最大で52%削減できます。
* **Lambda**の利用料を最大で17%削減できます。
* **SageMaker**の利用料を最大で64%削減できます。
* 1年間または3年間、一定の**利用料**をコミットするだけで、その**利用料**に対して割引を適用します。
* 例えば、10 USD / 時間 をコミットすると、その利用料に対して割引が適用されます。

**雑な意訳: 「これだけの利用料になる予定です!と宣言すれば、前払いと引き換えに割引を適用してもらえる」**

### 仕組み
* EC2、Fargate (for ECS/EKS)、Lambda、SageMakerのコンピューティングに、オンデマンド料金に加え、Savings Plans料金が適用できます。
* 例えば、Savings Plansで10 USD / 時間 をコミットすると、10 USDまではSavings Plansが適用され、コミットメントを超えた利用料については、オンデマンドでの支払いとなります。

## (2) Savings Plansを選ぶメリット
Savings Plansには、以下に示すように、オンデマンドやリザーブドインスタンスとは異なる特徴があります。

* Compute Savings Plansでは、要件が変わっても、同じ利用料のコミットメントで、対象となるAWSリソース全てに適用される
    * EC2だけでなく、Fargate (for ECS/EKS)、Lambdaにも適用される

また、Savings Plansには**Compute Savings Plans**、**EC2 Instance Savings Plans**、**SageMaker Savings Plans**の3種類の価格モデルがあります。

## (3) 3種類の価格モデル
### Compute Savings Plans
**最も柔軟性のあるモデル**で、コンバーティブルRIと同じ料率で、最大66%の値引きが提供されます。
例えば、以下のように、変更が行われたとしてもリザーブドインスタンスのようにプラン変更や買い直しをする必要はなくなります。

* インスタンスファミリーをc5からm5に変更しても適用が続く
* リージョンをシンガポールからロンドンに変更しても適用が続く
* OSをWindowsからLinuxに変更しても適用が続く
* テナンシーをデフォルトから専有に変更しても適用が続く
* EC2からFargate (for ECS/EKS) に移行しても適用が続く
* EC2を廃止してLambdaを起動しても適用が続く

上記の通りインスタンスファミリーにもOS種別にも依存しない買い方となりますので、もはやコンバーティブルRIを買うくらいなら、Savings Plansで購入すべきと言えます。

実際の画面を見てみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/29b856c7-0ef4-5783-ec61-6b55f2fa4797.png)

上記のように**1時間あたりの利用料**を指定すると、1年間または3年間のコストが見積もられますので、表示された料金を支払うという形になります。

### EC2 Instance Savings Plans
選択したリージョンでしか適用できませんが、選択したインスタンスファミリー (例: c5やm5) などで、スタンダードRIと同様に最大72%の値引きが提供されます。
また、Wavelength Zones上のEC2にも割引を適用できます。
**こちらは名の通り、EC2にしか適用されず、Fargate (for ECS/EKS) とLambdaは対象外です。**

以下のような場面で選択すべきと言えます。

* 同じインスタンスファミリーを使い続ける
    * 例: m5.largeからm5.xlarge、m5.2xlarge・・・と変更する予定はあるが、c5には変更予定がない

Compute Savings Plansに比べて、利用量に加えてリージョンとインススタンスファミリーなどを選択する必要があります。
実際の画面を見てみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/67e4272d-2738-076d-1db9-216bc400ebdc.png)

一瞬、リザーブドインスタンスと何が違うのかと戸惑いそうですが、違いは以下です。

* EC2のリザーブドインスタンスは台数、インスタンスサイズ、OS、テナンシーを指定し適用する
* EC2 Instance Savings Plansは利用料とインスタンスファミリーを指定し、**台数、インスタンスサイズ、OS、テナンシーに関係なく適用される**

### SageMaker Savings Plans
SageMakerだけを対象とするSavings Plansであり、他の2つの価格モデルとは独立しています。
購入方法はCompute Savings Plansと同じで、同じくリージョンを区別しません。

注意点としては、既存のCompute Savings PlansはSageMakerには適用されず、SageMakerでコスト削減を狙う場合は**SageMaker Savings Plans**を新たに購入する必要があります。

割引対象は以下の通りです。

* **すべての ml.* インスタンスファミリー**
* **すべてのインスタンスベースのワークロード**: Notebookインスタンス、Amazon SageMaker Studioインスタンス、Trainingインスタンス、Batch Transformインスタンス、Real-time Endpointインスタンス、Amazon SageMaker Data Wranglerインスタンス、Amazon SageMaker Processingインスタンス

# リザーブドインスタンスとSavings Plansの比較
これまでに書いたように、Savings Plansでは、リザーブドインスタンスの全ての利点を含みながら、柔軟性が向上します。
何よりも、**管理負荷が劇的に下がります。**
より具体的にリザーブドインスタンスとSavings Plansを比較してみました。

|        |      Compute Savings Plans|    EC2 Instance Savings Plans    |    SageMaker Savings Plans    |      コンバーティブルRI(注1)|    スタンダードRI   |
|:-----------------|:------------------:|:------------------:|:------------------:|:------------------:|:------------------:|
| 割引率                        |              最大66% |        最大72%       |  最大64% |           最大66% |        最大72%        |
| AWS利用料を指定して大幅割引       |            ○ |       ○ | ○  |           × |        ×        |
| どのインスタンスファミリーであっても**自動的に**割引|              ○ |        ×        |  ○ |           × |        ×        |
| どのインスタンスサイズであっても**自動的に**割引  |                ○ |         ○         | ○|             ×(注2) |        ×(注2)        |
| どのテナンシー、OS、ワークロードであっても**自動的に**割引    |             ○ |       ○       |  ○   |         × |        ×        |
| どのリージョンであっても**自動的に**割引         |           ○ |      ×       |  ○      |      × |        ×        |
| Fargate (for ECS/EKS) でも割引                |           ○ |      ×       |  ×  |          × |        ×        |
| Lambdaでも割引                |           ○ |      ×       |   ×   |        × |        ×        |
| SageMakerでも割引                |         ×   |      ×       |   ○   |        × |        ×        |
| 1年間または3年間の期間指定        |           ○|      ○       |    ○   |       ○ |        ○        |

(注1) コンバーティブルRIはインスタンスファミリー、インスタンスサイズ、OS、テナンシー間で変更可能ですが、**手動で切り替える必要があります。**
(注2) リージョナルコンバーティブルRIと、リージョナルスタンダードRIには、インスタンスの柔軟性があります。

# Savings Plansの適用方法
実態に即して時間あたりの利用料を見積もりながら購入するには、Savings Plansの推奨事項を確認します。
まずは、AWS Cost ExplorerでSavings Plansの推奨事項を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/70fda98c-fd51-4707-0795-326ac5e74031.png)
※引用: https://aws.amazon.com/jp/blogs/aws/new-savings-plans-for-aws-compute-services/

次に、各自のニーズに応じて推奨事項に基づき購入プランをカスタマイズしていきます。
例えば、Savings Plansのタイプをどうするか、支払い期間をどうするかといったことを検討します。

検討が終わったら、時間単位のコミットメントを確認し、カートに追加します。

## Purchase Analyzerを活用した購入計画
また、2024/11/22のアップデートで **「Purchase Analyzer」** が登場し、可視化された現在のコスト、カバレッジ、利用率を見ながら、Savings Plansの購入計画を最適化することができるようになりました。
データ（コスト、カバレッジ、利用率）が可視化されたビューで、事前に期待効果を分かりやすく把握することが出来ます。

以下は、購入計画の調整に役立つ主な機能です。

* **カスタム期間の設定**: 過去60日間のデータを参照できます。
* **期限切れSavings Plansを購入計画から除外して判断可能**: 次の90日で期限切れになるSavings Plansを、シミュレーションから除外して更新計画を立てられます。
* **購入額のカスタマイズ**: 推奨購入額に加え、独自の金額を入力して影響をシミュレーションできます。例: 時間単位の購入額を調整してカバレッジ目標に合わせる。

# Savings Plansの予約
2020/9/24のアップデートで、Savings Plansの適用開始を、時間指定して予約することが可能となりました。
**※参考: [Queuing purchases of Savings Plans](https://aws.amazon.com/jp/about-aws/whats-new/2020/09/queuing-purchases-of-savings-plans/)**

時間指定の方法は、購入画面の「開始日(オプション)」で日付と時刻を指定するだけです。
**UTCで入力する必要があり、日本時間(JST)で入力すると9時間ズレますので、注意が必要です。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/bb2dfe39-482c-8cab-1c72-a9546603b603.png)
実際に予約すると、以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/10c33e7c-2ce5-1858-f3dd-99f463b8122e.png)

# Savings Plansの有効期限切れに備える
2020/11/5のアップデートで、有効期限または予約購入日の1日前・7日前・30日前・60日前にアラートを発報できるようになりました。
このアラート機能を活用することで、購入漏れを防ぎ、意図しない購入を避けることができます。
**※参考: [Savings Plans Alerts now available in AWS Cost Management
](https://aws.amazon.com/jp/about-aws/whats-new/2020/11/savings-plans-alerts-now-available-in-aws-cost-management/)**

# Savings Plansの返金
2024/3/20のアップデートで、Savings Plansの購入後、7日以内の返品が可能となりました。
**※参考: [AWS announces a 7-day window to return Savings Plans
](https://aws.amazon.com/about-aws/whats-new/2024/03/aws-7-day-window-return-savings-plans/)**

# リザーブドインスタンスの方が良いことはあるのか？
EC2においては、Savings Plansにはキャパシティ予約がありませんので、起動が保証されません。
ただし、オンデマンドキャパシティ予約によってクリアできますので、あわせ技でリザーブドインスタンスと同じメリットを得られます。

# Savings Plansの注意事項
* ~~Organizationsのメンバーアカウントでは、AWSマネジメントコンソール上で**「現時点では、リンクされたアカウントの Savings Plan に関する推奨事項をご利用できません。Savings Plan の推奨事項については、支払者にお問い合わせください。」**と表示され、推奨事項を見ることができません。~~
    * **2020/3/25のアップデートで本制約は解消され、Organizationsのメンバーアカウントでも推奨事項を確認できるようになりました。**
    * 参考: [AWS Cost Explorer が、(リンクされた) メンバーアカウントに対して Savings Plans の推奨を開始](https://aws.amazon.com/jp/about-aws/whats-new/2020/03/aws-cost-explorer-now-offers-savings-plans-recommendations-for-member-linked-accounts/)
* リザーブドインスタンスと同様に、請求ファミリー間で割引の共有が可能ですが、リザーブドインスタンスとSavings Plansの共有はセットになっており、**例えばリザーブドインスタンスだけは共有するがSavings Plansは共有しないといった設定はできない**ようです。
* リザーブドインスタンスからSavings Plansへの変更はできず、逆も不可能です。

# 個人的見解によるQA
## Q1: どのEC2に割引が適用されているか管理したいのですができますか？
**【質問の背景】**

* どのEC2に割引が適用されているか管理したい！
* 管理するための仕組みを作ったり、サードパーティのソフトを用意するために、別途費用がかかってしまい、結局、RIの割引を相殺してしまう。
* そこまでして管理することが無駄だと分かっていても、会社の命令で絶対に管理しないといけない！

### 回答: 無理やりやればできると思われますがお勧めできません
* Savings Plansは、EC2の台数等の条件に関係なく割引が適用されるものになります。
    * いくらコミットしたかだけを管理すればOKです。
* そもそも「どのEC2に…」という概念がない割引になりますので、利用者側でわざわざ気にする必要は全くありません。
* EC2個別の適用状況は気にするだけ無駄で、時間と労力を浪費するだけです。

## Q2:複数の組織が同じAWSアカウントを共有しており、どの組織が割引を適用しているか把握したいのですができますか？
### 回答: 無理やりやればできると思われますがお勧めできません
* 課金系の管理はAWSのアップデートによって即破綻する可能性があるため、AWSの仕様にできるだけ寄せておくのが無難です。
    * AWSが提供していない管理をシステム的に無理やりやろうとすると、破綻する可能性があります。
* 運用でカバーする方法としては、Savings Plansに切り替えて、管理部門が各組織に対して事前にAWS利用料の計画を提出させ、計画に応じて前払い料金を事前徴収する仕組みに変更すると良いのではないでしょうか。
    * 管理部門は、各組織がいくらコミットしたかだけを把握し、その使い道を各組織に委ねることができます。
    * または、そもそもAWSアカウントの構成を見直して1組織=1AWSアカウントなどと変えていくべきでしょう。

## Q3: 既にRIを購入している状態で、Savings Plansを買うとどうなりますか？
### 回答: RIから先に適用されます
* RIの方が優先的に適用され、RIが適用されていないAWS利用料に対し、Savings Plansが適用されます。

## Q4: RIの有効期限が切れそうだが、次はRIを購入するのではなくSavings Plansを購入する方が良いか
### 回答: その方が良いでしょう
* Savings Plansにより、環境の構成を気にすることなく割引を適用できますので、今後、複雑な購入ルールの理解が不要となるメリットがあります。
* Savings Plansは従来のRIの購入単位よりもさらに小さい$0.001/時間という単位から購入でき、開発環境やテスト環境にも適用を検討できます。
* さらに、WindowsやRHELなどの有償OSでも柔軟性があることもメリットです。

## Q5: Savings Plansを買った後しばらくして価格が改定されたが、払い戻しはあるのか
### 回答: ありません
* 契約期間中を通じて、購入時点における時間単価 (月額料金) が適用されますので、契約途中の値下げに関しては対象外となります (影響を受けません) 。

# Savings Plans初登場以降の価格改定履歴
## 2020/5/8: EC2 Instance Savings Plansが、従前の支払額に比べて最大18%の値下げ
一部のEC2インスタンスタイプで、値下げが発表されました。

* [EC2 Price Reduction – For EC2 Instance Saving Plans and Standard Reserved Instances
](https://aws.amazon.com/jp/blogs/aws/ec2-price-reduction-for-ec2-instance-saving-plans-and-standard-reserved-instances/)

# まとめ

* Savings Plansとは特定のインスタンスの構成によらず、AWS利用料のコミットメントをすることで、EC2のリザーブドインスタンスと全く同率の割引をする新しい料金モデルです。
* EC2だけでなく、Fargate (for ECS/EKS)、Lambda、SageMakerにも適用できます。
* 3種類のSavings Plansがあります。
    * **Compute Savings Plans**: EC2、Fargate (for ECS/EKS) 、Lambdaに適用でき、リージョンに依存しない。コンバーティブルRIと同じ料率。
    * **EC2 Instance Savings Plans**: EC2のみ適用でき、選択したリージョンの選択したインスタンスファミリーに割引が適用。スタンダードRIと同じ料率。
    * **SageMaker Savings Plans**: SageMakerに適用でき、リージョンに依存しない。
* 全てのAWSリージョン (北京と寧夏を除く) と、AWS GovCloud (米国) で利用可能。
* AWS Cost Explorerで過去7日間、過去30日間、過去60日間の使用履歴に基づき、推奨事項を確認可能。
* RIと同様に購入予約が可能。
* 期限切れが迫った時にアラートを発報可能。
* EC2において、**Savings Plansは従来のEC2 RIの利点を全て含んでいます。**

# 参考文献
**AWS Documentation » Savings Plans**
https://docs.aws.amazon.com/savingsplans/latest/userguide/what-is-savings-plans.html
**Savings Plan Update: Save Up to 17% On Your Lambda Workloads**
https://aws.amazon.com/jp/blogs/aws/savings-plan-update-save-up-to-17-on-your-lambda-workloads/
**AWS Fargate for Amazon EKS now included in Compute Savings Plans**
https://aws.amazon.com/jp/about-aws/whats-new/2020/08/amazon-fargate-aws-eks-included-compute-savings-plan/
**Queuing purchases of Savings Plans**
https://aws.amazon.com/jp/about-aws/whats-new/2020/09/queuing-purchases-of-savings-plans/
**Savings Plans Alerts now available in AWS Cost Management**
https://aws.amazon.com/jp/about-aws/whats-new/2020/11/savings-plans-alerts-now-available-in-aws-cost-management/
**Decrease Your Machine Learning Costs with Instance Price Reductions and Savings Plans for Amazon SageMaker**
https://aws.amazon.com/blogs/aws/slash-your-machine-learning-costs-with-instance-price-reductions-and-savings-plans-for-amazon-sagemaker/