Savings Plans 購入後に忘れずに設定したい3つの通知設定

記事タイトルとURLをコピーする

マネージドサービス部 佐竹です。
AWS のコスト最適化で最も有名なサービスであろう Savings Plans を購入後に、忘れずに行いたい通知及び監視設定について改めて記載します。

はじめに

2019年11月に登場した Savings Plans (SP/SPs) は AWS のコスト最適化には欠かせない価格モデルであり、購入することで最大 72 %のコスト削減が可能となっています。

Savings Plans には今現在も継続的にアップデートが実施されており、2024年3月21日には購入から7日以内なら返品できるようにもなりました。

blog.serverworks.co.jp

本サービスが発表されてから4-5年が経過し、AWS のマネジメントコンソールも幾度か刷新されておりますため、今一度最新の画面キャプチャを用いながら Savings Plans の運用監視と通知設定についてまとめます。

Savings Plans を購入したものの「まだこれらの通知を行っていない」という方は是非、今すぐにでも本設定を実施してみてください。

余談

本ブログは過去に記載した以下のブログをまとめ直しながら、マルチアカウント環境における運用知見を追記した内容となっています。

2020年1月6日 Savings Plans の利用率を確認及び通知する方法

blog.serverworks.co.jp

2020年11月6日 Savings Plan が有効期限と予約期限の通知アラートに対応しました

blog.serverworks.co.jp

リザーブドインスタンスについて

本ブログに記載している Savings Plans に関する運用監視と通知設定の内容は、そのまま Reserved Instances (RI) にも応用することが可能です。RI を併用されている方は、是非合わせて RI でも同様の設定を行ってみてください。

SP 購入後に忘れずに設定したい3つの通知設定

では早速、監視機能の解説とそれぞれの設定方法をご紹介します。

1. 有効期限切れの通知

Savings Plans は「1年(365日)」もしくは「3年(1095日)」の期間指定での購入になります。このため、購入後はその運用として、1年毎もしくは3年毎に有効期限を迎える Savings Plans の更新作業が必要となります。

しかし、1年毎もしくは3年毎という頻度は、日々の運用からこれらが忘れられてしまうには十分に長い期間です。さらに利用企業の AWS 担当者が、数年毎の異動(離任)により Savings Plans の運用が正しく引き継がれず、更新漏れが発生する場合も散見されます。

このような事態を避けるために、まず Savings Plans における「有効期限切れ通知」の設定を行い、その更新作業を忘れずに行うための「対応開始のトリガー」とすることを推奨しています。

設定方法

具体的な設定方法に移ります。

AWS マネジメントコンソールで設定していきます。

まずは「請求とコスト管理 > Savings Plans > 概要」の画面を開きます。

アラートサブスクリプションを管理

画面右上に「アラートサブスクリプションを管理」というボタンがありますので、これを押下して設定画面を開きます。

期限切れとキューに入った Savings Plans

「アラート頻度」は基本的には全てにチェックを入れてください。特に「60日前に通知を受け取る」ことで、社内への起案・稟議作成から承認を得るまでに必要な時間を得られます。

「E メールの受信者」は可能な限りメーリングリストを用意し、それを設定します。「E メール受信者は最大 10 人」という制限もそうですが、個人宛のメールアドレスでは、先に書いた通り異動や離任により正しく通知が行われない場合があるためです。弊社では Slack のチャンネル宛メールアドレスも併用し、本メールをプロジェクトの通知チャンネルにも合わせて送るように設定しています。

なお「キューに入った Savings Plans」というのは、予約された Savings Plans のことです。予約された Savings Plans は、その購入予定日時で確定されるまでは削除が可能です。

本設定を行うと、期限切れの通知だけではなく、予約された Savings Plans が予定日時で確定される前にも通知される点に留意してください。

実際に送付された通知の例

  • From: alerts@costalerts.amazonaws.com
  • 件名: Your Savings Plan(s) are nearing their expiration date

期限切れの通知

上画像は、3月30日に期限を迎える Savings Plans に対して実際に送られてきた期限切れ通知メールです。

また、予約された Savings Plans に関する通知メールは以下の通りです。

  • From: alerts@costalerts.amazonaws.com
  • 件名: Your queued Savings Plan(s) are nearing their purchase date

予約期限の通知

AWS 公式ドキュメントの紹介

Savings Plans アラートの管理

Cost Explorer では、Savings Plans の有効期限と、キューに登録されている将来の Savings Plans を追跡することができます。Savings Plans アラートを使用すると、Savings Plan の有効期限の 1 日前、7 日前、30 日前、60日前、またはコミットメントが購入用にキューに登録されているときに、事前のメールアラートを受け取ることができます。この通知により、有効期限日でもアラートを受け取ることができ、最大 10 人の E メール受信者に送信できます。

docs.aws.amazon.com

2. AWS Budgets による使用率の監視通知

次に重要なのが、使用率(Utilization)の確認、及び監視です。

まずは「使用率」とは何かを理解して頂く必要がありますが、これには AWS 公式ドキュメントの説明を引用させて頂きます。

例えば、1 時間あたり 10 USD のコミットメントがあり、Savings Plans の料金で請求される使用量が 1 時間あたり合計 9.80 USD の場合、その時間の使用率は 98% になります。

docs.aws.amazon.com

「使用率」は、毎時間 Savings Plans が無駄なく使われたのかどうかを示す値です。例では 98% となっていますが、基本的には無駄なく利用し切ること、つまりは「100%」を目指すこととなるでしょう*1

どのように運用するのか?

「使用率」が100%で維持されている限り、Savings Plans が無駄なく使い切られている状態であることがわかります。

Cost Explorer (Hourly)

上記は AWS Cost Explorer で「EC2: Running Hours」を「Hourly」で表示した例です。青い部分が Savings Plans でカバーされた利用料ですが、常にオフピーク(利用料が最も安くなる時間帯)を下回っています。

Savings Plans > Utilization report

この状態は、Savings Plans > Utilization report の画面でも100%で維持されていることからわかるように、Savings Plans が無駄なく利用されている状態となります。

ここで、仮に Savings Plans が適用されていない時間帯が発生し、使用率が100%を下回ったとしましょう。この場合は以下のような原因が考えられます。

  1. EC2 インスタンスのインスタンスタイプがより低額のインスタンスタイプへと引き下げられた
  2. EC2 インスタンスが終了(削除)された
  3. 誤った Savings Plans の購入が行われた*2
  4. AWS Organizations(組織)からメンバーアカウントが離脱し他の組織へと移動した
  5. Savings Plans の割引共有の設定が変更された、もしくは誤っている

これらが意図されたものであれば問題がないのですが、意図せず行われた場合その原因調査が必要となります。そのためのトリガーとして「使用率が100%で維持されているか」の監視が必要となります。

補足となりますが「Savings Plans の割引共有設定」については以下のブログで詳しく解説しておりますため、是非合わせてご覧ください。

blog.serverworks.co.jp

設定方法

具体的に、Savings Plans の「使用率」が100%で維持されているかどうか AWS Budgets で監視する設定方法を記載していきます。

予算と計画 > 予算

「予算と計画 > 予算 」から AWS Budgets の概要ページを表示し、画面右上の「予算を作成」を押下して進めます。

Savings Plans の予算

「予算の設定」では「カスタマイズ (アドバンスト)」を、「予算タイプ」では「Savings Plans の予算」を選択し、「次へ」を押下します。

予算を設定

「予算を設定」でまず「予算名」を記載します。今回は Daily Savings Plans utilization budget としました。

次に「使用率のしきい値」を設定します。可能な限りリアルタイムで受け取りたいため「日(Daily)」を選択します。「支出のモニタリング」は「Savings Plans の使用率」のままで問題ありません。「使用率のしきい値 (%)」は「100%」とします。

「予算の範囲」は「すべての AWS のサービス (推奨)」を選択したままとします。設定が終わったら「次へ」を押下します。

アラートの設定

アラートの設定では、通知の送付先を設定できます。

これには「有効期限切れの通知」と同様、最大10のメールアドレスを直接記載できるほか、SNS Topic と連携した AWS Chatbot での通知も利用が可能です。

弊社では Slack に直接連携を行いたいため AWS Chatbot を利用していますが、先ほどと同様にメーリングリストを利用されるほうが良い場合もあります。運用では「アラートに気付ける」ことが大切ですので、その観点から適切な通知先を設定ください。

予算を作成

最後に「確認」を行い、問題がなければ「予算を作成」を押下して作業を完了します。

実際に送付された通知の例

アラートの例

AWS Chatbot での例となりますが、実際に使用率が 100% を下回った場合には、上画像の通りの通知が行われました。そして通知が来た場合には、先に記載したような原因調査を行う必要があるでしょう。

運用上の注意点

運用上の注意点として AWS Budgets の「通知」はリアルタイムで行われるわけではなく、数日程度(目安として48時間程度)の遅延が存在する点に注意してください。

加えて、月初の3日間は本通知が行われませんため、Savings Plans 購入直後など運用上特に気になる要素がある場合には、AWS マネジメントコンソールから直接確認したほうが安心できるでしょう。

本内容は、これから記載するカバレッジでも同様です。

3. AWS Budgets によるカバレッジの監視通知

3つ目に、可能であれば監視しておきたい値がカバレッジ(Coverage)です。

先ほどと同様に「カバレッジ」という言葉の定義については AWS 公式ドキュメントの説明を引用させて頂きます。

例えば、1 時間あたり 1.00 USD のオンデマンド料金で 10 個の同じインスタンスを実行していて、実行している 10 個のインスタンスのうち 9 個が Savings Plans のコミットメントの対象になっている場合、カバレッジは 90% になります。

docs.aws.amazon.com

どのように運用するのか?

「使用率」は、毎時間 Savings Plans が無駄なく使われたのかどうかを示す値でしたが、カバレッジは Savings Plans によってコスト最適化が可能な対象のうち、どの程度が Savings Plans によって実際にカバーされたのかを示す値です。

つまり、カバレッジが想定より低すぎるという場合には、Savings Plans の追加購入の機会がある(コスト削減の機会損失がある)ことがわかります。よって、カバレッジのアラートが発生する場合には以下のような原因が考えられます。

  1. EC2 インスタンスのインスタンスタイプがより高額のインスタンスタイプへと引き上げられた
  2. EC2 インスタンスが新たに起動(構築)された
  3. 購入済みの Savings Plans の有効期限が切れた
  4. AWS Organizations(組織)に新たにメンバーアカウントが追加された
  5. Savings Plans の割引共有の設定が変更された ※共有が無効から有効となった場合等

ただし「使用率」については多くのユーザで100%をターゲットにすることが多い一方、本カバレッジのターゲットは利用状況によって大きく変わります。例として、常時起動の EC2 インスタンスのみが稼働している状況であれば、カバレッジも100%で推移することが期待できるのですが、検証環境は「未使用時に停止する」ことがコスト最適化やサステナビリティの観点から求められます*3

もし検証環境を夜間や土日祝に停止する場合「停止中は Savings Plans が適用されていないことが正解」です。

Savings Plans > Coverage report

これはつまり、検証環境で EC2 インスタンスが Running 状態となる平日及び日中帯には「カバレッジが減少」し、土日祝及び夜間(非営業時間)には「カバレッジが上昇」することを表します。

このように、カバレッジのターゲットは各アカウントの利用状況によって異なってきますため、一概にこの数値が良いということは述べられないでしょう。

ですが、ターゲットの設定には何らかの目安が必要です。ここでの私の提案は「この値以下にカバレッジが低下することがあれば Savings Plans の追加購入を検討する」という値に設定しておくことです。

今回は、このカバレッジのターゲットを仮に「50%」とした場合において、以下に具体的な設定方法を記載します。

設定方法

本監視設定は「使用率」と同様 AWS Budgets で行いますため、先ほどと同じく「予算」での設定方法を記載していきます。

予算と計画 > 予算

先程と同様、「予算と計画 > 予算 」から AWS Budgets の概要ページを表示し、画面右上の「予算を作成」を押下して進めます。

Savings Plans の予算

同様に、「カスタマイズ (アドバンスト)」、「Savings Plans の予算」を選択し「次へ」を押下します。

Daily Savings Plans coverage budget

カバレッジでの設定が異なるのは「予算の設定」からです。

まず「予算名」を記載します。今回は Daily Savings Plans coverage budget としました。

「使用率のしきい値」を設定します。これも先ほどと同様「日(Daily)」を選択します。「支出のモニタリング」を「Savings Plans のカバレッジ」へと変更します。「カバレッジのしきい値 (%)」は「50%」とします。

なお、画面右側に「予算のプレビュー」として過去の Savings Plans カバレッジのグラフが表示されるため、ターゲットとした「しきい値」が狙い通りなのか、グラフを参考に調整されるのも良いでしょう。

「予算の範囲」は「すべての AWS のサービス (推奨)」を選択したままとします。設定が終わったら「次へ」を押下します。

この先の「アラートの設定」からは「使用率」と同じ設定項目のため、手順を割愛させて頂きます。

予算を作成

最後に「確認」を行い、問題がなければ「予算を作成」を押下して作業を完了します。

2つの予算設定が完了

「使用率」に引き続き「カバレッジ」の監視設定が完了すれば、一覧に「Daily Savings Plans utilization budget (Savings Plans の使用率)」と「Daily Savings Plans coverage budget (Savings Plans のカバレッジ)」の2つが表示された状態になります。

実際に送付された通知の例

アラートの例 カバレッジ

AWS Chatbot での例となりますが、実際にカバレッジがしきい値を下回った場合には、上画像の通りの通知が行われました*4

本設定に関連して知っておいたほうが良い情報

ここまでで「SP 購入後に忘れずに設定したい3つの通知設定」については説明が一旦完了しましたが、関連していくつか解説したほうが良い機能や状況があるため、以下に記載します。

コスト異常検出 (AWS Cost Anomaly Detection) に関して

先の3つの設定の他に「コスト異常検出 (AWS Cost Anomaly Detection)」も Savings Plans の期限切れ監視等に有用です。

まず「コスト異常検出」については、以下の記事で AWS Budgets と合わせて詳しく解説しておりますため、本記事も確認頂ければ幸いです。

blog.serverworks.co.jp

具体的に Savings Plans とコスト異常検出による監視の関係性ですが、Savings Plans の有効期限が切れた場合、ディスカウント効果が消失することで EC2 インスタンスや ECS 等の利用料が跳ね上がる状況になり得ます。

この場合に「コストの異常(急騰)として検出されるケース」があり、実際これによって Savings Plans (もしくはリザーブドインスタンス等のコスト最適化サービス)の期限切れに気付けたという実例があります*5

このような背景から、先に記載した3つの通知設定に追加してコスト異常検出 (AWS Cost Anomaly Detection) も併用されるとなお良いでしょう。

また、Savings Plans 如何に関わらず「コスト異常検出」はコスト管理に非常に有用な機能ですため、特にマルチアカウント環境下では有効とされることを推奨しております。

通知及び監視設定をどの AWS アカウントで実施するか?

マルチアカウント環境下では「どの AWS アカウントで設定を行うか」も運用の観点から重要です。

一例として、以下のようなマルチアカウント環境があるとします。

マルチアカウント環境の例

管理アカウント1つに、3つのメンバーアカウントが存在する構成を表しています。この状況で、本通知及び監視設定を実施すべきはどのアカウントになるでしょうか?

結論から延べますと、マルチアカウント環境においては「管理アカウント(マネジメントアカウント)」で「1. 有効期限切れの通知」「2. 使用率の監視通知」「3. カバレッジの監視通知」を全て設定されることを推奨します。

マルチアカウント環境の例 2

理由は、管理アカウントではその組織に存在する全ての Savings Plans が管理対象となるためです。このため、管理アカウントにさえ設定を行っていれば、抜け漏れなく組織を横断して全アカウントの Savings Plans の監視運用が可能となります。

ただし、部署の方針やアカウント管理者によっては「自アカウント(部署)の保持する Savings Plans の通知だけは受け取りたい」という場合があるでしょう。

このような場合には、Savings Plans を保持しているメンバーアカウントで先の3つの通知設定を行ってください。このように設定を行うことで、自アカウントに閉じた通知が可能です。

まとめ

本ブログでは、Savings Plans の購入後に忘れずに設定したい3つの通知及び監視設定について記載させて頂きました。

具体的な3つの設定は以下の通りです。

  1. 有効期限切れの通知
  2. AWS Budgets による使用率の監視通知
  3. AWS Budgets によるカバレッジの監視通知

(再掲)マルチアカウント環境の例 2

またコスト異常検出との関連性や、マルチアカウント環境を前提とした設定対象についても記載しました。

Savings Plans はコスト最適化に有用ですが、特にマルチアカウント環境下では意図せずに「使用率」が低下してしまったり、更新時の調整が間に合わずに一時的に費用がオンデマンド料金で請求されてしまった、などの課題が見受けられます。

是非これら3つの設定を実施して頂き、課題の早期発見が可能となる Savings Plans 運用を行って頂ければ幸いです。

では、またお会いしましょう。

*1:何%を目指すかは利用方法や戦略により異なりますが、多くのユーザが100%を閾値にしている状況から今回は100%で話を進めます

*2:例えば、EC2 インスタンス Savings Plans で購入するファミリーやリージョンを間違えた等

*3:コスト最適化の柱に右記の通り記載: たとえば、通常、1 週間の稼働日に開発環境とテスト環境を使用するのは、1 日あたり 8 時間程度です。未使用時にこのようなリソースを停止することで、コストを 75% 削減できる可能性があります (168 時間から 40 時間に減少) https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/cost-optimization-pillar/design-principles.html

*4:本通知の例はカバレッジのしきい値を「60%」としたものとなっています

*5:ただし、Savings Plans の期限切れが「確実にコストの異常として検出される保証はない」点に注意してください

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023 Japan AWS Top Engineers/2020-2023 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。