コスト異常検出(AWS Cost Anomaly Detection)を使って異常コストを検出しSNSへ通知を発行する

AWS

AWS Cost Anomaly Detectionとは?

機械学習によって、これまでのAWSリソースの使用量を分析し、異常なコスト増加があった場合は、通知を行うことができる機能です。

例えば、これまで週のLambdaの利用料が$10だったところ、今週になって$100に利用料が急増したと言った場合に、AWS Cost Anomaly Detectionは異常を検出し、EmailやSNSに通知することができます。

この機能によって、ユーザーはAWSリソースの予想外の請求に直ぐに対処することができます。

具体的な設定方法

まずはAWSマネジメントコンソールにログインし、請求とコスト管理を開きます。

サイドメニューから「コスト異常検出」を選択します。

今回はAWSサービスの異常を検出し、Amazon SNSへ通知を発行する方法を紹介します。

この異常検知を導入するためには、AWS Cost Anomaly Detectionでコストモニターアラートサブスクリプションの設定をする必要があります。

コストモニターの作成

コストモニターは、使用量を継続的にモニタリングするために必要な設定です。

コストモニターには4つのモニタータイプがあります。

  • AWSサービス
    1つのアカウントにつき1つだけ作成できるモニターです。
    各種AWSリソースを監視し、閾値を超えたサービスがあった場合、異常を検出します。

  • 連結アカウント
    主にAWS Organizationsを利用している場合に便利なモニターです。
    メンバーアカウントを1つ以上指定して、そのアカウント群の合計利用料が閾値を超えた場合に異常を検出します。

    例えば、開発チームとして3つのアカウントを運用していた場合、3つのアカウントを1つのモニターに設定することができます。(1つのモニターに対して10アカウントまで)

    この場合、Aアカウント、Bアカウント、Cアカウントの合計使用量が、これまでの使用量よりも閾値を超える額で増加している場合に、異常が検出されます。

    注意点として、合計額が基準となるため、例えばAアカウントで使用料が急増していても、Bアカウントで使用料が急減している場合は、異常が検知されません。

    アカウント毎に使用量を監視したい場合は、アカウント1つに対して1つのモニターを作成します。

  • コストカテゴリー
    Cost Categoryで作成する、コストカテゴリを監視するモニターです。
  • コスト配分タグ
    個々のタグのキーと値のペアの総支出を監視するモニターです。

今回は、設定が最も手軽なAWSサービスモニターを作成します。

モニター名を「aws-service-monitor」として、次へ進みます。

異常監視のサポート外のサービス

また一部のサービスは機械学習のサポート対象外となっています。下記から確認できます。

https://docs.aws.amazon.com/cost-management/latest/userguide/management-limits.html#limits-ad

アラートサブスクリプションの作成

アラートサブスクリプションは、先ほど作成したモニターが異常を検知した場合に、EmailもしくはAmazon SNSに通知を行います。

初めてサブスクリプションを作成する場合は、「新しいサブスクリプションを作成」を選択します。

サブスクリプション名は「aws-service-alert-subscription」

アラート頻度の設定

アラート頻度は、検出した異常アラートを、どのタイミングで通知するのかを指定できます。

  • 個々のアラート
    異常が検出されると即時アラートが通知されます。
    即時通知されるので、異常の種類によっては、1日に複数のアラート通知を受け取ることができます。
    通知先:Amazon SNS。
  • 日次の要約
    1日の間で検出された異常をまとめて1日に1回通知されます。
    送信先:Eメール
  • 週次の要約
    1週間の間に掲出された異常をまとめて、週に1度通知されます。
    送信先:Eメール

求めている送信先や頻度によって、選択してください。

今回はSNSへ通知したいため、「個々のアラート」を選択します。

SNSトピックの設定

トピックはスタンダートタイプを用意して、指定します。

また作成したトピックのアクセスポリシーには以下を追加する必要があります。

{
  "Sid": "AWSAnomalyDetectionSNSPublishingPermissions",
  "Effect": "Allow",
  "Principal": {
    "Service": "costalerts.amazonaws.com"
  },
  "Action": "SNS:Publish",
  "Resource": "your topic ARN" <---- ここに作成したトピックのARNを指定
}

閾値の設定

これまでの利用料から、どれだけ増加したら異常値となるかを決定するために、閾値を設定します。
金額(USD)もしくは、割合で指定できます。

動作をテストしたい場合は$0.01のような小さい値を設定します。(金額などの設定は後から変更可能)

これで、コストモニターとアラートサブスクリプションの作成が完了しました。

またモニターは作成後、動き出すまえに最大24時間の遅延があるそうです。

異常検出を確認

Detected anomaliesタブで、検出した異常を一覧で確認できます。

左から順番に

  • 開始日:異常を検出した日
  • Last detected: 最後に異常が検出された日
  • 期間:異常が検出された期間
  • Cost Impact:コスト影響額
    実際の支出から機械学習が予想した支出を引いた額(実際の支出 – 予想支出)
  • Impact:影響%
    (総コスト影響額/予想支出額) × 100
  • モニター名
  • Top root cause:原因となっているAWSサービス

これにより、異常の概要を把握することができます。

閾値はあくまで判断基準

異常の内容を確認することができましたが、検出した異常を見ると、必ず閾値が検出の基準になるわけではないようです。

AWS Cost Anomaly Detectionは機械学習によって利用料の分析が行われているため、場合によっては設定した閾値よりも下回った額や割合でも異常を検知することがあります。

閾値はあくまで判断基準であり、異常が検出された際は、詳細をよく確認した方が良いということが分かりました。

まとめ

AWS Cost Anomaly Detectionを利用することで、コストの異常な増加に素早く気づくことができる仕組みを作ることができます。

AWS Organizationsとも連携して管理アカウントから一括した検知も可能なので、ぜひ活用していきましょう。

無料相談実施中
AWSを使用したサーバーレスアプリケーションの構築
サーバーレス開発内製化、AWSへの移行等
様々な課題について無料でご相談お受けいたします。
最新情報をチェックしよう!