- 公開日
- 最終更新日
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 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 > [コスト異常検出] で設定を確認します。

設定したばかりなのでまだコスト異常は検出していませんでしたが、
コストモニターが作成されていることを確認しました。
アラートサブスクリプションについても、And 条件で設定できていれば問題ありません。

AWS CodePipeline でパイプラインを作成したり、
Git 同期機能(GitSync)を使い CI/CD の仕組みを整えると
予算設定やアラート設定を継続的に見直しやすくなると感じました。
※Git 同期機能(GitSync)については過去記事「GitLabからAWSへ自動反映!GitSyncの設定を試してみた」をご参照ください。
まとめ
AWS Budgets や Cost Anomaly Detection は、AWS のコスト管理において非常に有用なサービスですが、
手動設定のままでは設定漏れや運用の属人化が発生しやすくなります。
今回のようにコスト管理もインフラの一部として扱い、IaC と CI/CD の仕組みに組み込むことで、
このような課題も解決していくことができると考えています。
これからコスト関連サービスの IaC 化に取り組む方の参考になれば幸いです!
この記事は私が書きました
野間 太一
記事一覧猫とCloudFormationが好きです。