コスト異常検知 - AWS Cost Anomaly Detection で予期しない支出を早期発見する

AWS Cost Anomaly Detection を使ったコスト異常の自動検知を解説。ML ベースの異常検出、モニター設定、SNS/Slack 通知、Budgets との使い分けを紹介します。

コスト異常検知の必要性

クラウドのコスト管理において、Budgets による閾値ベースのアラートは有効ですが、すべての異常を捕捉できるわけではありません。たとえば月額予算が 10,000 USD の環境で、通常は 1 日あたり 300 USD 程度の支出が、ある日突然 800 USD に跳ね上がった場合、月末の予算超過アラートが発火する前に問題を検知したいケースがあります。AWS Cost Anomaly Detection は ML モデルで過去のコストパターンを学習し、通常とは異なる支出の変動を自動的に検知するサービスです。固定閾値ではなく動的なベースラインで判定するため、季節変動 (月末のバッチ処理増加など) やトレンド (徐々に増加する使用量) を考慮した精度の高い異常検知が可能です。Budgets が「予算の 80% に達した」という事前定義の閾値で通知するのに対し、Cost Anomaly Detection は「通常のパターンから逸脱した」という動的な判定で通知します。両者は補完的な関係にあり、併用が推奨されます。

モニターとサブスクリプションの設定

Cost Anomaly Detection はモニター (何を監視するか) とサブスクリプション (どう通知するか) の 2 つの要素で構成されます。モニターは監視対象のディメンションとして AWS サービス、リンクアカウント、コスト配分タグ、コストカテゴリの 4 種類があり、それぞれを「AWS 管理」と「顧客管理」の 2 つの方式のいずれかで作成します。AWS 管理モニターはディメンション内の値を自動で追跡し、新しいアカウントやタグ値、カテゴリが増えても追加設定なしでカバレッジを維持します。1 つのディメンションあたり最大 5,000 値まで個別に評価し (値が 5,000 を超える場合は上位 5,000 値を追跡)、組織全体を包括的に監視したい主軸のディメンションでは AWS 管理モニターが推奨されます。一方、顧客管理モニター (旧称カスタムモニター) は監視したい値を最大 10 まで (コストカテゴリでは 1 値のみ) 手動で選び、選択した値をまとめて 1 つのグループとして合算評価します。値ごとに閾値を変えたい場合や、特定の少数アカウント・チームだけを監視したい場合に向きます。AWS サービスモニターは全サービスのコストを個別に監視し、特定サービスの異常を検知します。最も汎用的で、まず最初に設定すべきモニターです (AWS サービスは AWS 管理方式のみ提供)。リンクアカウントモニターは、AWS 管理方式では Organizations 内の全メンバーアカウントをそれぞれ個別に評価し、新規アカウントも自動で監視対象に加わります (管理アカウントでのみ作成可)。顧客管理方式では手動で選んだ最大 10 アカウントの支出を合算して評価するため、特定プロジェクトや環境をまとめて見張りたいときに使います。コスト配分タグモニターは特定のタグ (Environment、Project など) の値ごとにグループ化したコストを監視し、コストカテゴリモニターは Cost Categories で定義したグループのコストを監視します。

# サービスモニターの作成
aws ce create-anomaly-monitor \
  --anomaly-monitor '{"MonitorName":"all-services","MonitorType":"DIMENSIONAL","MonitorDimension":"SERVICE"}' \
  --region us-east-1

# サブスクリプション (通知) の作成
aws ce create-anomaly-subscription \
  --anomaly-subscription '{
    "SubscriptionName": "cost-alerts",
    "MonitorArnList": ["arn:aws:ce::123:anomalymonitor/xxxx"],
    "Subscribers": [{"Type": "SNS", "Address": "arn:aws:sns:us-east-1:123:cost-anomaly"}],
    "Frequency": "DAILY",
    "ThresholdExpression": {"Dimensions": {"Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE", "Values": ["100"], "MatchOptions": ["GREATER_THAN_OR_EQUAL"]}}
  }' \
  --region us-east-1

サブスクリプションでは通知頻度 (即時、日次、週次) と影響額の閾値 (例: 100 USD 以上の異常のみ通知) を設定できます。

根本原因分析と対応

Cost Anomaly Detection が異常を検知すると、自動的に根本原因分析 (Root Cause Analysis) を実行します。異常の原因となったサービス、アカウント、リージョン、使用タイプが特定され、通知に含まれます。たとえば「 EC2 の ap-northeast-1 リージョンで RunInstances の使用量が通常の 3 倍に増加」といった具体的な情報が提供されます。異常の影響額 (通常のベースラインからの超過分) も算出されるため、対応の優先度を判断できます。 Cost Explorer との統合により、異常が検知された期間のコスト内訳をドリルダウンして詳細を確認できます。典型的な異常の原因としては、開発環境のリソース消し忘れ、 Auto Scaling の想定外のスケールアウト、データ転送量の急増、新サービスの試用による課金、不正アクセスによるリソース作成などがあります。異常を検知したら、まず原因を特定し、意図的な変更 (新機能のリリースなど) であれば異常をアーカイブし、意図しない変更であれば対処します。

Budgets との使い分けと運用

Cost Anomaly Detection と Budgets は補完的な関係にあり、併用が最も効果的です。Budgets は「月額 10,000 USD を超えそうなら通知」という絶対的な閾値で管理し、予算超過を防ぎます。Cost Anomaly Detection は「通常のパターンから逸脱した支出を検知」という相対的な判定で、予期しない変動を早期に捕捉します。たとえば、月額予算 10,000 USD の環境で、月初に 1 日 500 USD の異常支出が発生した場合、Budgets の 80% アラート (8,000 USD) が発火するのは月の後半ですが、Cost Anomaly Detection は翌日には異常を検知して通知します。運用のベストプラクティスとして、まず AWS サービスモニターを作成して全サービスを監視し、影響額 100 USD 以上の異常を日次で通知する設定から始めることを推奨します。Cost Anomaly Detection は完全無料で利用でき、Cost Explorer API (us-east-1 リージョン) 経由で設定します。

誤検知を減らすチューニング

コスト異常検知を実用的に運用するには、通知が適切な頻度に保たれるようチューニングすることが重要です。閾値が低すぎると、通常の変動でも頻繁にアラートが鳴り、やがて無視されるようになります。逆に高すぎると、本当の異常を見逃します。監視の対象を、サービスやアカウント、コストカテゴリの単位で適切に区切ることで、変動の文脈を踏まえた精度の高い検知ができます。検知が発生したら、それが本当の異常だったのか、想定内の変動だったのかを振り返り、設定の見直しに反映します。検知精度を継続的に調整し、本当に注意すべき支出変動だけが通知される状態に保つことが、運用を形骸化させない鍵になります。

まとめ - Cost Anomaly Detection の活用指針

AWS Cost Anomaly Detection は、ML ベースの動的な異常検知でコストの予期しない変動を早期に発見するサービスです。固定閾値ではなく過去のパターンからの逸脱を検知するため、季節変動やトレンドを考慮した精度の高いアラートを提供します。根本原因分析による原因特定、SNS 通知による即時アラート、Cost Explorer との統合による詳細分析が主な強みです。完全無料で利用でき、設定も数分で完了するため、全 AWS アカウントで有効化することを推奨します。Budgets と併用することで、閾値ベースと ML ベースの二重のコスト監視体制を構築できます。

参考資料 (AWS 公式)

本ページの一次情報は AWS 公式サイトおよび公式ドキュメントです。最新の仕様 / 料金は次の公式ページで確認できます。

本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。