コスト異常検出(Cost Anomaly Detection)設定してみた

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

コーヒーが好きな木谷映見です。最近ザッセンハウスのバリスタプロが欲しくてたまりません。
本日はコスト異常検知(Cost Anomaly Detection)の概要と設定手順について記載します。

コスト異常検出(Cost Anomaly Detection)とは?

機械学習を使用してコストをモニタリングし、普段発生しないような異常な支出を検出する機能です。
予算管理をする「AWS Budgets」や、利用料金のしきい値を設定しておいて超過したらアラート発報や自動アクションを起こす「CloudWatch請求アラート」とは別の機能になります。

コスト異常検出(Cost Anomaly Detection)では、以下2点が別物であることをおさえておくと、通知の仕組みが分かりやすいかと存じます。

① コスト異常検出(Cost Anomaly Detection)側の機械学習で検出される異常値
② ①を通知するためのしきい値

① コスト異常検出(Cost Anomaly Detection)側の機械学習で検出される異常値

コスト異常検出(Cost Anomaly Detection)では、内部の機械学習でアカウントの平均利用料金や利用状況をみているため、いつ異常値として検出されるか利用者側では意識しないサービスとなっております。

例えば、

  • 普段は1日 0.1 USDしか料金がかかっていない S3 の料金がある日 1 USDになった
  • 普段利用していないリージョンで突然わずかな課金が発生した

などの状況で異常値として検出される可能性があります。

② ①を通知するためのしきい値

コスト異常検知(Cost Anomaly Detection)側の機械学習で検出された異常値を、利用者にメール等で通知するかどうかのしきい値は、利用者側で設定できます。
コスト異常検知では、実際の支出パターンと通常の支出パターンの差がこのしきい値を超えたときに通知を送信します。

実際の支出パターンと通常の支出パターンの差は、コスト異常検出(Cost Anomaly Detection)の概要ページの下部にある「検出履歴」から確認できます。

例えば、毎日約 250 USD前後の使用料金がコンスタントにかかっているAWSアカウントでしきい値を 20 USDに設定したとき、コスト異常検出で検出されたアクティビティのうち、差額が 20 USD以下(1日の利用料金が 270 USDを超えない)であれば通知されません。

毎日約 250 USD前後の使用料金がコンスタントにかかっているAWSアカウントでしきい値を 20 USDに設定したとき、コスト異常検出で検出されたアクティビティのうち、差額が 20 USD以上(1日の利用料金が 270 USD以上)であれば、異常値として通知されます。

ご注意いただきたい点ですが、②のしきい値をどれだけ小さく設定しても、①で異常値として検出されなければ、通知されません。
①で異常値として検出されたアクティビティのうち、②で設定したしきい値を超過したものが通知されるサービスとなります。

コスト異常検出をセットアップしてみる

作業は請求データへのアクセスが可能なユーザで実施します。

2-1.Cost Explorer を有効にする

コスト異常検出はCost Explorer内の機能の一つであるため、コスト異常検出にアクセスするにはCost Explorerを有効にする必要があります。

  • AWSマネジメントコンソールにログインして、AWSコスト管理(https://console.aws.amazon.com/cost-management/home)を開きます。
  • 画面左メニューで、[Cost Explorer] を選択します。
  • ようこそ画面で「Cost Explorerの起動」を選択します。

2-2.コンソールにアクセスする

2-3.コストモニターを作成する

[ご利用開始にあたって]をクリックします。 ツアーの案内が出ますが、今回は[ツアーをスキップする]でスキップします。 [コストモニター] タブを選択し、[モニターの作成] を選択します。 ステップ1で、モニターの種類を選択します。今回はオーソドックスに[AWSのサービス - 推奨事項]を選択してみます。 モニターに名前を付けます。今回モニターの種類は[AWSのサービス - 推奨事項]にしたので、[TestMonitor_AWS_Services-Recommended]としておきます。

2-4.アラートサブスクリプションを設定する

ステップ2で、アラートサブスクリプションを設定します。
初めてセットアップするので、既存のサブスクリプションはありません。今回は[新しいサブスクリプションを作成する] を選択します。

[サブスクリプション名] は、ユースケースがわかる名前にするといいそうです。今回は「EmiTest_AlertSubscription」としてみます。

[しきい値] では、アラートを受け取る金額のしきい値を入力します。
テストのため、しきい値はかなり低めに$0.01としておきます。

[アラート頻度] で、使用する通知頻度を選択します。
通知頻度は以下3種類から選べるようになっています。

  • [個々のアラート] - 異常が検出された場合にすぐにアラートが表示されます。1 日を通して複数のアラートを受け取ることがあります。これらの通知には、Amazon SNS トピックが必要です。
  • [日別の概要] - 異常が検出されると、アラートは日別の概要を通知します。その日に発生した複数の異常に関する情報が記載された E メールが 1 つ送信されます。これらの通知には、少なくとも 1 つの E メール受信者が必要です。
  • [週別の概要] - 異常が検出されると、アラートは週別の概要を通知します。その週に発生した複数の異常に関する情報が記載された E メールが 1 つ送信されます。これらの通知には、少なくとも 1 つの E メール受信者が必要です。

今回はテストで早くアラートを受信したいので、[個々のアラート]を選択します。[個々のアラート]を選択する場合、通知先のAmazon SNSトピックが必要なので、作成しておきます。作成したSNSトピックのARNを記載します。

[モニターの作成] を選択します。

注意点:SNSトピックのアクセス許可

Amazon SNSで作成したSNSトピックに、コスト異常検知のアラートへのアクセス許可がないと、うまく通知できません。
コスト異常検知のアラートへのアクセス許可の設定例は、コスト異常検知のアラートサブスクリプション編集画面の「Amazon SNS ARNの入力」欄の下にある「アクセス許可」をクリックすると表示できます。 このポリシーステートメントをコピーして、"Resource"にはSNSトピックのARNを入れます。 コスト異常検知用に作成したSNSトピックの設定画面に「アクセスポリシー」という項目がありますので、ここにコピーしたポリシーステートメントを貼り付ければOKです。

コスト異常検知用のSNSトピック編集画面

コスト異常検出結果

検出例は当社佐竹が以下のブログで詳しく紹介していますので、ご参照ください。

blog.serverworks.co.jp

評価を送信

実際に異常が検出されたら、評価を送信しましょう。評価を送信すると、AWSサービスの向上につながります。
以下、私のアカウントで検出されたアクティビティについてご紹介します。
検出した金額は微額でしたが、検証のためやや大きなインスタンスを起動した際に検出されていました。

突発的な金額増加を検知してくれましたが、今回は問題ないアクティビティであるため一番下の「問題ではありません」を選択して送信します。

AWS Budgets との兼ね合いについて

AWS Budgets は本機能同様にコストを通知する機能ではありますが、「予算管理」の側面が強く、異常を検出してくれるものではありません。コスト異常検出の機能は、突発的なコスト増という異常事態にフォーカスした機能です。 そのため、AWS Budgets は AWS Budgets で設定を行い、加えてコスト異常検出も設定しておくと、より詳細なコスト管理が可能になります。

参考

docs.aws.amazon.com

blog.serverworks.co.jp

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、コーヒーとサウナが好きです。執筆活動に興味があります。AWS認定12冠。