AWS Cost Anomaly Detection と AWS Budgets の違いを理解する

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

カスタマーサクセス部 佐竹です。
本日は AWS Cost Anomaly Detection ブログ三連続の第三弾として、AWS Cost Anomaly Detection と AWS Budgets の違いについて記載します。

はじめに

AWS 業界における AWS Cost Anomaly Detection の知名度と理解度を引き上げるためにはじめた AWS Cost Anomaly Detection ブログ三連続投稿ですが、今回で最後の3本目となります。

第一弾、第二弾のブログ紹介

前回及び前々回のブログは以下になります。是非合わせてご覧ください。

blog.serverworks.co.jp

blog.serverworks.co.jp

AWS Cost Anomaly Detection と AWS Budgets の違いを知る

今回のブログでご紹介するのは AWS Cost Anomaly Detection と AWS Budgets の違いです。

これらの機能はどちらも「AWS 利用料を管理&通知する」という機能です。そして機能の名称が異なる=役割も違うということになりますが、これらの機能間にどのような違いがあるのかわからないという質問を頂くことも多い状況です。

今回は、これら2つの機能を正しくご理解頂き、適切な機能を選択できるようにしていただくための記事となります。

では早速 AWS Cost Anomaly Detection から説明を開始します。

AWS Cost Anomaly Detection

「コスト異常検出」と翻訳される本機能は、その名の通りコストにおける異常を検出することに特化した機能です。

一言で言うと「高額になる外れ値を検出する」機能です。以下で詳しく説明します。

異常検出とは

Anomaly Detection」という言葉は機械学習の分野では用語として定義されており、AWS 特有の用語ではありません。

そこで、Anomaly Detection = 異常検出(検知)について少し補足をします。まず、「異常」というのは「外れ値」のことです。

統計や機械学習では、分析のために用意された数字の集まりを「データセット」と呼びますが、このデータセット内に存在するその他の観測値から著しく/大幅に乖離した値を「外れ値」と呼びます。つまりは、データセットから導き出された数式(アルゴリズム)上にどう頑張ってもポイントできそうにない値です。

この外れ値=異常を検出する機能を「AWS の利用料に特化して」実装されたのが AWS Cost Anomaly Detection です。

と、言葉だけで説明してもわかりにくいと思いますので、図を作成しました。

正常な値での推移

f:id:swx-satake:20220322084140p:plain
正常な値での推移

上図は、値が正常な範囲で推移しているグラフです。

異常な値の検出

f:id:swx-satake:20220322090227p:plain
異常な値の検出

上図は、値が正常な範囲から著しく乖離した値=外れ値が存在しているグラフです。

f:id:swx-satake:20220322090122p:plain
異常の検出

この「赤い円」で囲った部分を検出する機能「AWS Cost Anomaly Detection」が提供する機能です。

AWS Cost Anomaly Detection の特性

改めて記載しますと、機械学習を用いて AWS 利用料と使用量を継続的にモニタリングし、その過去統計から異常を検出して通知する機能です。

機械学習が用いられており、アカウントごとの利用状況を学習することで機能が改善されるため、利用を継続することで誤検出を削減することができます。

注意点ですが「コストが突然下落する」場合には検出されません。あくまで「コストが突然上昇する」場合に検出されます。異常検出の定義としては突然の下落も外れ値にはなるのですが、利用料へのインパクトは「突然の上昇」にありますので、コストの上昇にのみフォーカスされている機能であるとご理解ください。

AWS Cost Anomaly Detection の閾値設定

AWS Cost Anomaly Detection で設定が難しいのは、AWS Cost Anomaly Detection の閾値設定です。

f:id:swx-satake:20220322092323p:plain

「コストモニター」で設定するこの閾値は、正常時と異常時を比較した場合の「利用料の金額幅」によってトリガーされるものです。閾値についての説明は、公式ドキュメントでは以下の通りです。

AWS Cost Anomaly Detection sends you a notification when the difference between your actual spend and normal spend pattern has exceeded the Threshold. For example, if your normal spend pattern is $100 and you set a $10 threshold, then alert recipients get anomaly notifications when your daily spend exceeds $110. If anomalies repeat over multiple days, then alert recipients continue to get notifications while the aggregate cost impact of the anomalies exceed the threshold amount.

https://docs.aws.amazon.com/cost-management/latest/userguide/getting-started-ad.html

普段 $100 の利用料であり、閾値を $10 に設定する場合は、$110 を異常として検出することになります。

運用上、閾値の設定は「適切な通知数となるように、アラートの数を抑える」必要があると考えられます。「通知されるアラートが多すぎる=閾値が小さすぎる」とノイズになり、「通知されるアラートが少なすぎる=閾値が大きすぎる」と重要な検出を見逃す可能性があります。

そのため、まずは $10 や $50 など適当と思われる値で設定を開始してださい。そして検出されたアノマリーを月次など定期的に棚卸し、閾値を調整します。

参考までに、弊社では閾値の設定を $100 で開始しましたが、検出される数が少なかったため調整を行い、現在は $70 まで閾値を下げています。

先に記載しました下記のブログでは「実際に検知されたアノマリー」を多数ご紹介しておりますため、合わせて参考にしていただければ幸いです。

blog.serverworks.co.jp

続いて、AWS Budgets の説明に移ります。

AWS Budgets

f:id:swx-satake:20220322094021p:plain:w150

Budgets = 予算の名を冠する通り、本機能は AWS の予算設定を提供しています。

予算設定とは

予算とは、予め定められた AWS の利用料です。基本的には「年額」と、それを12か月で按分した「月額」で設定されることが多い認識です。今回は「月額利用料」にフォーカスして考えていきます。

Cost budget

f:id:swx-satake:20220322094146p:plain
Choose budget type

AWS Budgets の設定において、代表的な機能として「Cost budget」を用いて説明します。

予算設定と通知のための閾値

こちらも図を用いて説明いたします。

f:id:swx-satake:20220322094909p:plain
月額利用料の推移

あるアカウントの月額利用料の推移が、上図の通りだとします。この図の月額利用料は「積み上げ」となっております。例えば、平均して毎日 $400 が利用される場合は、月額(30日間)の総計は $12,000 と予想されます。

f:id:swx-satake:20220322095129p:plain
$10,000 の予算

そして AWS 利用料の月額予算が、毎月「$10,000」であったとします。このような場合、閾値の設定は「$10,000」とするのが適切です。

f:id:swx-satake:20220322095626p:plain

この「赤い線(予算)」に利用料が抵触した場合に通知を行うための機能「AWS Budgets」が提供する機能です。

100% 以外の予算設定

AWS Budgets では 100% 以外の予算も複数同時に設定が可能です。先の $10,000 の閾値は、予算と同値でした。つまり 100% の予算です。

f:id:swx-satake:20220322095929p:plain

AWS Budgets では、例えば上図のように 80% の予算も設定が可能です。この場合、予算設定は「$10,000 × 80% = $8,000」として設定します。

ここまでの整理

図を今一度見比べてみましょう。

f:id:swx-satake:20220322090122p:plain

AWS Cost Anomaly Detection は外れ値の検出、つまり「赤い円」で囲った部分を異常として検出する機能 です。

f:id:swx-satake:20220322095626p:plain

AWS Budgets は事前に定められた予算をアラートのトリガーとしており、予算=「赤い線」に利用料が抵触した場合に通知する機能です。

このように、これらの機能は検出される対象が大きく異なっています。

整理すると以下のようになります。

サービス名 検出に利用される値 目的
AWS Cost Anomaly Detection データセットの外れ値とそれらの差額 突発的な利用料の増加を検出した場合に通知する
AWS Budgets AWS 利用料の積算 特定期間の利用料の積算が予算を超過した場合に通知する

AWS Cost Anomaly Detection と AWS Budgets を併用する

弊社では、AWS Cost Anomaly Detection と AWS Budgets を併用することを推奨しています。

エンドユーザ様が「利用料が高い」と考えて対策を取るのは月額利用料の明細が届いてからというのが多い状況です。そのため、例えば2022年3月の利用料の振り返りを行うのは、2022年4月上旬になります。

しかし、このタイミングで「意図せずに高額である」と気付いたとしても、既に2022年3月の利用料は確定した後です。その対応を4月に行っても、3月の利用料が引き下げられることにはなりません。

f:id:swx-satake:20220322102908p:plain
意図しない月額利用料の増加

例えば上図のような利用料の増加があったとします。AWS Budgets の予算の閾値は先に記載した通り「$10,000」であり、本来は月末近くに検出されるものですが、このような意図しない利用料の増加がある場合には、予定よりも早く通知が行われることになります。これにより意図していない利用料の増加を早めに検知することができます。

このような場合には「AWS Cost Anomaly Detection が異常として検出してくれるのでは」という期待はあるのですが、AWS Cost Anomaly Detection が検出するかどうかは AWS Cost Anomaly Detection の裏で動いている機械学習モデルに依存しており、かつそれはブラックボックスです。

つまり、検出されるかどうかは確実ではない(異常と判断されない場合がある)ため、あわせて AWS Budgets で予算設定も施しておく必要が出てきます。

加えて、AWS Budgets の予算設定は複数行うことが推奨されます。

f:id:swx-satake:20220322123359p:plain
複数の閾値を設定する

上図のように、月額利用料の予算の 100% だけではなく、25%、50%、75% にも設定を施すことで、月額利用料が一次関数的に(想定通りに)増加しているかどうかの把握が可能です。表にすると以下の通りです。

予算設定の% いつ頃検知されるかの目安
25% 7日~8日前後
50% 14日~15日前後
75% 21日~22日前後
100% 月末付近

目安よりも早い利用料の検知が行われる場合には、意図しない利用料の増加が発生している可能性があるためこれを調査し原因を特定することが推奨されます。

複数の % での閾値を何 % にするかは、場合によってはもっと細かく 10% 単位で刻んでも問題ありませんが、通知が多いことでノイズとなりそれが見逃されてしまわないように注意してください。

推奨される設定

最後に、推奨される設定をまとめます。

  • AWS Cost Anomaly Detection を設定する
    • 閾値は実際に検知された値を定期的に棚卸し、調整する
  • AWS Budgets を設定する
    • 月額予算の 100% を閾値として設定する
    • 25% や 50% などを合わせて設定することで月額利用料の意図しない増加を早めに通知することが可能になる

このように、それぞれのサービスを組み合わせて利用することで、「サービスレベルの突発的な利用料の増加」と「アカウント全体の意図しない利用料の増加」を早期に検出し、その是正を行うことが可能となります。

補足

AWS Budgets はサービスレベルやタグレベルなど、Cost Explorer と同様のメッシュで自由に予算設定が可能ですが、今回はわかりやすさを優先し AWS アカウント全体で設定を行う想定で記載させて頂きました。

まとめ

本日は AWS Cost Anomaly Detection ブログ三連続の第三弾として、AWS Cost Anomaly Detection と AWS Budgets の違いについて記載しました。

整理のためのテーブルを再掲します。

サービス名 検出に利用される値 目的
AWS Cost Anomaly Detection データセットの外れ値とそれらの差額 突発的な利用料の増加を検出した場合に通知する
AWS Budgets AWS 利用料の積算 特定期間の利用料の積算が予算を超過した場合に通知する

AWS Cost Anomaly Detection と AWS Budgets はターゲットとしている検出対象が異なっているため、機能を正しく理解して使いこなすことが肝要です。

こちらの記事を読まれて「機能のデモンストレーションを実環境で実施してほしい」や「実際に設定を行う場合の助言がほしい」と思われた場合は、お気軽に弊社までお問い合わせください。

www.serverworks.co.jp

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

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

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