AWS

AWS Budgets と SNS・Lambdaでリアルタイムコスト超過検知と自動対処

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


スポンサードリンク

AWS Budgets の基本と二段階アラート設定

アラートしきい値の種類

種類 目的 設定例
相対パーセンテージ(予測コスト) コストが急上昇したときに早期警告を出す 80 % 超過時に通知
絶対金額(実績コスト) 予算上限に達した瞬間で確実に検知 100 %(上限)超過時に通知

ポイント:二段階アラートを組み合わせることで、早期警告最終的な上限突破 の両方を網羅できます。

作成手順(コンソール)

  1. AWS マネジメントコンソール → BillingBudgets
  2. Create budget」 → Cost budget を選択
  3. 予算期間(Monthly / Annual)と上限金額を入力(例:月額 150,000 円
  4. Add alert threshold」ボタンで以下を追加

  5. 80 %(相対) → 通知先は後述の SNS トピック

  6. 100 %(絶対) → 同じく SNS

  7. 設定が完了したら「Create budget」をクリック。画面に二つのしきい値が表示されます。

参考: 予算アクションを設定する – AWS コスト管理


予算アクション(Budget Action)と UI 確認ポイント

2026 年時点の UI 状況

  • 「予算アクション」 の画面は、2026 年現在もコンソールに残っており、「Add action」 ボタンから直接 SNS トピックや Lambda 関数を紐付けられます。
  • AWS は UI 改訂の可能性を常に保持しているため、「Budget Action」タブが見当たらない場合は、コンソール左側メニューの「Actions」セクションを確認してください

アクション設定フロー(概要)

手順 操作内容
1 予算詳細画面で対象しきい値横の Add action をクリック
2 SNS topic または AWS Lambda function を選択
3 必要に応じて IAM role for Budgets(例:budgets-action-role)を作成し、最小権限 sns:Publish / lambda:InvokeFunction を付与
4 「Add action」ボタンで保存。画面右上に「Action configured」のマークが表示されます

注意:IAM ロールは 予算アクション専用 に作成し、他のリソースへの権限は付与しないよう徹底してください。


SNS トピックの作成・メール/Slack への配信手順

1. SNS トピックを作成する

項目 設定例
名前 budget-alerts
タイプ Standard
暗号化 デフォルトの AWS‑managed KMS キー(自動暗号化)

コンソール: SNS → Topics → Create topic

2. メール購読を追加

  1. 作成したトピックの「Create subscription
  2. Protocol: EmailEndpoint: 通知受信者メールアドレス
  3. 送られてくる確認メールのリンクをクリックしてサブスクリプションを有効化

3. Slack(Incoming Webhook)への配信設定

Slack に直接 SNS がメッセージを投げることはできませんが、HTTPS プロトコル のサブスクリプションとして Incoming Webhook URL を指定すれば実現できます。

手順詳細

ステップ 内容
a. Slack で Incoming Webhook を作成
(App → Incoming Webhooks → Add to Workspace)
発行された URL(例:https://hooks.slack.com/services/AAA/BBB/CCC)をコピー
b. SNS コンソールでトピックの「Create subscription」を選択
c. Protocol: HTTPS
Endpoint: 先ほど取得した Webhook URL を貼り付け
d. Enable raw message delivery にチェック(※推奨)
これにより SNS が送る JSON ペイロードがそのまま Slack に渡ります
e. Delivery status logging(オプション)を有効化し、失敗時の再試行や CloudWatch Logs への出力を設定

注意点

  • HTTPS エンドポイントは TLS 1.2 以上 が必須です。Slack の Webhook は常に TLS 1.2 で提供されますので問題ありません。
  • SNS が Slack に送信できない場合、IAM ポリシーや VPC エンドポイントの設定 を再確認してください(インターネットアクセスが遮断されていると失敗します)。

4. 最小権限ポリシー例

このポリシーを BudgetsSNSPublishRole にアタッチし、予算アクション設定画面でロールを選択します。


Lambda 関数で実装する自動対処フロー(EC2・RDS 停止)

前提条件

条件 内容
Lambda ランタイム Python 3.9 以上(本稿は 3.9)
IAM ロール ec2:StopInstancesrds:StopDBInstancerds:ListTagsForResourcerds:DescribeDBInstances を最小権限で付与
対象リソースのタグ AutoStop=true(文字列は小文字でも OK)

重要:RDS の停止はエンジンに依存します。Aurora、MySQL、PostgreSQL、MariaDB、Oracle がサポート対象です。SQL Server など一部のエンジンでは StopDBInstance API が利用できません。その旨をコード内でコメントし、実行前に対象インスタンスが対応エンジンか必ず確認してください。

完全サンプルコード

重要ポイントまとめ

項目 内容
エンジン制限 StopDBInstance が利用できない SQL Server 系は除外(コード内でフィルタ)
タグ名の統一 AutoStop=true(大文字・小文字は問わないが、統一して運用)
ログ出力 CloudWatch Logs に情報とエラーを残すことで、失敗時に再通知や手動復旧が容易になる
テスト方法 予算のしきい値を 80 % のみ設定し、実際に SNS が届くか確認。その後閾値を 100 % に上げて Lambda が正常に起動することを検証

CloudWatch Billing Alarm との比較と選択基準

項目 AWS Budgets CloudWatch Billing Alarm
対象範囲 コスト・使用量・予算(タグ別・サービス別) 主に月次請求額のみ
アラート方式 相対%・絶対金額・予測ベースの二段階設定が可能 静的な閾値(例:$100 超過)
通知先 SNS、Lambda、Chatbot、AWS Chatbot (Slack) など多彩 SNS のみ(カスタムロジックは別途実装必要)
UI/UX 「Add alert threshold」→「Add action」で一括設定可能 CloudWatch コンソールで別々に作成する手間がある
自動対処 Budgets → Lambda で即時実行可 Alarm → SNS → 別途 Lambda を呼び出す構成が必要
推奨シーン 部門・タグ単位で細かく管理したい大規模環境 小規模アカウントや単純な請求額監視

選択基準

  • 多様な通知先や自動処理が必須AWS Budgets が最適。
  • シンプルに月次請求だけをモニタリングしたいCloudWatch Billing Alarm でも十分。

ベストプラクティスチェックリスト

カテゴリ 確認項目
リージョン・サービス整合性 Budgets は全リージョン対象。SNS と Lambda が同一リージョンか、クロスリージョンの場合は適切な VPC エンドポイントを設定
予算・アラートの重複回避 同一金額・期間で複数予算が作成されていないか、コンソールの Budget list で一覧確認
IAM 権限最小化 Budgets → SNS: sns:Publish のみ、Lambda 起動は lambda:InvokeFunction のみ付与。RDS 停止ロールはエンジン制限を考慮し、rds:StopDBInstancerds:ListTagsForResource に限定
SNS 暗号化 デフォルト KMS キーで暗号化し、外部公開しない。必要に応じてカスタム CMK を使用
タグ戦略の統一 コストセンター・環境(dev/prod)用タグは事前に定義し、未タグ付リソースには自動で CostCenter=Unassigned タグを付与する Lambda も併せて運用
テスト実施 小額予算で「80 %」アラートだけ発火させ、SNS と Lambda の連携が正しく機能するか検証。その後「100 %」に変更し自動停止処理を確認
モニタリング・ログ保管 Lambda の CloudWatch Logs を永続化(Retention 30 日以上)し、失敗時は別途 SNS に再通知設定
予算の定期レビュー 四半期ごとに Cost Explorer と照らし合わせて実績を確認。閾値・タグの見直しや不要なリソースの除外を実施
Slack 連携の安全性 HTTPS エンドポイントは TLS 1.2+ を必須とし、SNS の Raw Message Delivery を有効化して JSON ペイロードがそのまま Slack に届くことを確認

まとめ

  • 二段階アラート(相対%+絶対金額)で早期警告と確実な上限突破検知を同時に実現。
  • 予算アクション UI は 2026 年も有効で、SNS または Lambda を直接紐付けられる点が大きなメリット。
  • Slack 通知は HTTPS プロトコルのサブスクリプションとして設定し、TLS と Raw Message Delivery の要件を満たすことが必須。
  • RDS 停止はエンジン依存であるため、コード内に除外ロジックを実装し、対象外エンジンへの呼び出しを防止。
  • 最小権限 IAM ロールと暗号化設定でセキュリティリスクを低減しつつ、CloudWatch Logs による可観測性を確保。

上記手順・ベストプラクティスをそのままテンプレート化すれば、数分で AWS Budgets + SNS + Lambda の自動コストアラート基盤が構築できます。ぜひ実装し、予算超過リスクを根本から排除してください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-AWS