ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

AWS BudgetsとCost Anomaly DetectionをCloudFormationで管理してみた

この記事を共有する

目次

はじめに

こんにちは!パーソル&サーバーワークスの野間です。

AWS のコスト管理では、
AWS Budgets や AWS Cost Anomaly Detection(以下、Cost Anomaly Detection) を活用することで、
予算超過や想定外のコスト増加を早期に検知できます。

一方で、これらの設定は「最初に一度だけ手動で作って終わり」になりやすく、
こまめにしきい値を調整できず、設定が放置されてしまうなど運用上の課題もあります。

本記事では、AWS Budgets と Cost Anomaly Detection を
AWS CloudFormation(以下、CloudFormation)で定義・管理する方法を紹介します。

AWS Budget と Cost Anomaly Detection について

AWS Budgets は、月額コストの「予算」を設定し、
そのしきい値を超えた場合に通知を受け取ることができるサービスです。

「今月の利用料金が○円を超えたら通知する」といった形で、
コストの使いすぎを早期に把握することができます。

一方、Cost Anomaly Detection は、機械学習を用いて
過去の傾向から見て異常なコスト増加を自動的に検知する仕組みです。

明確な予算超過が発生していなくても、
「いつもと違うコストの動き」を検出できる点が特徴です。

AWS Budgets の CloudFormation 記述例

それでは、まず AWS Budgets を CloudFormation で記載していきます。
今回は以下のような設定シナリオです。

  • 予算額は Parameter(Amount)から取得し、環境ごとに変更しやすくする
  • 予算の 80% と 100% を超えた時点でメール通知を行う
AWSTemplateFormatVersion: '2010-09-09'

Parameters: BudgetName: Type: String Amount: Type: Number EmailAddress: Type: String
Resources: MonthlyCostBudget: Type: AWS::Budgets::Budget Properties: Budget: BudgetName: !Ref BudgetName BudgetType: COST TimeUnit: MONTHLY BudgetLimit: Amount: !Ref Amount ##Parameter「Amount」に予算額を設定 Unit: USD NotificationsWithSubscribers: ##設定1: 月額コストが予算の80%を超えた場合に通知 - Notification: NotificationType: ACTUAL ComparisonOperator: GREATER_THAN Threshold: 80 ThresholdType: PERCENTAGE Subscribers: - SubscriptionType: EMAIL Address: !Ref EmailAddress
##設定2: 月額コストが予算の100%を超えた場合に通知 - Notification: NotificationType: ACTUAL ComparisonOperator: GREATER_THAN Threshold: 100 ThresholdType: PERCENTAGE Subscribers: - SubscriptionType: EMAIL Address: !Ref EmailAddress

CloudFormation でデプロイが成功したら、
Billing and Cost Management > [予算] で設定を確認します。
cost-cloudformation-01.png

テンプレートファイルで設定した予算額やアラート設定が 正しく反映されていることを確認しました。

Cost Anomaly Detection の CloudFormation 記述例

続いて Cost Anomaly Detection を CloudFormation で記載していきます。
今回は以下のような設定シナリオです。

  • コストへの影響割合(ANOMALY_TOTAL_IMPACT_PERCENTAGE)が一定割合を超える かつ
  • コストへ影響金額(ANOMALY_TOTAL_IMPACT_ABSOLUTE)が一定金額を超える
    場合にアラートメールを送信する
AWSTemplateFormatVersion: '2010-09-09'

Parameters: EmailAddress: Type: String MonitorName: Type: String SubscriptionName: Type: String ThresholdPercentage: Type: Number ThresholdAbsolute: Type: Number
Resources: CostAnomalyMonitor: Type: AWS::CE::AnomalyMonitor Properties: MonitorName: !Ref MonitorName MonitorType: DIMENSIONAL MonitorDimension: SERVICE CostAnomalySubscription: Type: AWS::CE::AnomalySubscription Properties: Frequency: DAILY MonitorArnList: - !Ref CostAnomalyMonitor Subscribers: - Address: !Ref EmailAddress Type: EMAIL SubscriptionName: !Ref SubscriptionName ##しきい値設定:例)サービスの異常検出で、影響度が5%以上かつ絶対額が10ドル以上の場合に通知 ThresholdExpression: !Sub - | { "And": [ { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_PERCENTAGE", "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ ${ThresholdPercentage} ] } }, { "Dimensions": { "Key": "ANOMALY_TOTAL_IMPACT_ABSOLUTE", "MatchOptions": [ "GREATER_THAN_OR_EQUAL" ], "Values": [ ${ThresholdAbsolute} ] } } ] } - { ThresholdPercentage: !Ref ThresholdPercentage, ThresholdAbsolute: !Ref ThresholdAbsolute }

CloudFormation でデプロイが成功したら、
Billing and Cost Management > [コスト異常検出] で設定を確認します。
cost-cloudformation-02.png

設定したばかりなのでまだコスト異常は検出していませんでしたが、
コストモニターが作成されていることを確認しました。

アラートサブスクリプションについても、And 条件で設定できていれば問題ありません。 cost-cloudformation-03.png

AWS CodePipeline でパイプラインを作成したり、
Git 同期機能(GitSync)を使い CI/CD の仕組みを整えると
予算設定やアラート設定を継続的に見直しやすくなると感じました。

※Git 同期機能(GitSync)については過去記事「GitLabからAWSへ自動反映!GitSyncの設定を試してみた」をご参照ください。

まとめ

AWS Budgets や Cost Anomaly Detection は、AWS のコスト管理において非常に有用なサービスですが、
手動設定のままでは設定漏れや運用の属人化が発生しやすくなります。

今回のようにコスト管理もインフラの一部として扱い、IaC と CI/CD の仕組みに組み込むことで、
このような課題も解決していくことができると考えています。

これからコスト関連サービスの IaC 化に取り組む方の参考になれば幸いです!

この記事は私が書きました

野間 太一

記事一覧

猫とCloudFormationが好きです。

野間 太一

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。