0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】完全無料Webモニタリング+「予算超過で自動停止する」コストガードレール(フェイルセーフ)をCLIで一撃構築

0
Last updated at Posted at 2026-10-26

※本記事は [ストックリスト:AWS CLIでゼロから構築するWeb監視システム&自動コスト防衛] の第3弾です。

1. はじめに

👉 [前回の記事] https://qiita.com/4eena/items/b2225d1399d482c0ba27

AWSでWebサイトやモニタリングシステムを構築する際、誰もが恐れるのが**「予期せぬ課金や破産(クラウドアラート見落としによる破産)」**です。

多くの記事では「AWS Budgetsでアラートメールを飛ばす」ところで終わりますが、**「メールに気づかなかったら結局課金される」**というリスクが残ります。

そこで本記事では、**「予算上限($1.00や無料枠の80%)に達した瞬間、システム自らが定期実行ルールを無効化(DisableRule)して自動停止する『セルフヒーリング/フェイルセーフ機構』」**をAWS CLIのみで一撃構築する手順を解説します。


2. システム構成とガードレールアーキテクチャ

🌐 ① メインシステム(Webモニタリング&配信)

  • EventBridge (check-site-status-rule): 5分おきに定期実行
  • Lambda (check-site-status): サイト死活チェック&HTML生成
  • S3: 生成された静的コンテンツの格納
  • CloudFront: キャッシュ配信(高速・無料枠内での配信)

🛡️ ② コスト防衛ガードレール(自律停止機構)

  1. AWS Budgets: 毎月の予算(例: $1.00)およびアラート閾値を監視
  2. Amazon SNS (budget-alert-topic): 予算超過メッセージの受取&中継
  3. 番犬Lambda (budget-guardrail-lambda): SNSトリガーで起動し、events:DisableRule APIを実行
  4. 対象ルール: check-site-status-rule を DISABLED に変更して定期実行を即座に遮断

image.png


3. 主な構築コマンド(AWS CLI / CloudShell)

※マネジメントコンソールを使わず、再現性の高いCLI/IaCアプローチで構築します。

① 防衛用Lambda(budget-guardrail-lambda)のコード

import json
import boto3
import os

events = boto3.client('events')
RULE_NAME = os.environ.get('TARGET_RULE_NAME', 'check-site-status-rule')

def lambda_handler(event, context):
    print("Received event:", json.dumps(event))
    print(f"Target rule to disable: {RULE_NAME}")
    try:
        response = events.disable_rule(Name=RULE_NAME)
        print("Successfully disabled rule:", response)
        return {
            'statusCode': 200,
            'body': json.dumps(f'Rule {RULE_NAME} disabled successfully.')
        }
    except Exception as e:
        print(f"Error disabling rule: {str(e)}")
        raise e

② 環境変数の設定コマンド例

aws lambda update-function-configuration \
  --function-name budget-guardrail-lambda \
  --environment "Variables={TARGET_RULE_NAME=check-site-status-rule}"

4. 動作検証(テストと目視確認)

構築して終わりではなく、**「本当に自律停止するか」**を目視確認・ログ検証します。

① 手動テストの実行

# 1. 現在の状態を確認 (ENABLED)
aws events describe-rule --name check-site-status-rule --query "State" --output text

# 2. ガードレールLambdaを擬似実行(予算超過アラート模倣)
aws lambda invoke --function-name budget-guardrail-lambda response.json

# 3. ルールが自動停止したか確認 (DISABLED)
aws events describe-rule --name check-site-status-rule --query "State" --output text

② コンソール・ログでのダブルチェック(検証エビデンス)

  • EventBridge コンソール: 「スケジューラ / クラシックイベントルーティング」上のルール状態が緑の 有効 から即座に 無効 に切り替わることを確認。
  • CloudWatch Logs: /aws/lambda/budget-guardrail-lambda 内に以下の成功ログが記録されていることを確認。

    Target rule to disable: check-site-status-rule
    Successfully disabled rule: {'ResponseMetadata': {'HTTPStatusCode': 200...}}


5. まとめ・工夫したポイント

  • 「人間頼みの運用」からの脱却: メール通知だけでなく、システム自らがリソースを止めるアーキテクチャを実現。
  • CLI駆動の再現性: すべての構築手順をCLI化することで、他プロジェクトへの水平展開や自動化が容易。
  • 依存関係の分離: 配信側(CloudFront/S3)は生かしたまま、課金元となる「定期トリガー(EventBridge)」のみをピンポイントで止める最小限の影響範囲設計。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?