はじめに
AWS Organizationsで複数のアカウントを管理している場合、各アカウントのHealthイベントを個別に監視するのは非効率です。
本記事では、委任管理者アカウント1つで全メンバーアカウントのHealthイベントを一括通知するシンプルな構成を紹介します。
アーキテクチャ概要
Organizations構成における管理アカウントから、Health Dashboardの組織ビューを有効化し、あるメンバーアカウントを委任管理者として設定します。
これで委任管理者アカウントのオレゴンリージョン1つにEventBridgeルールを設定するだけで、Organizations組織の全アカウント/全リージョンのHealthイベントを受信できます。
重要な技術ポイント
1. 組織ビューと委任管理者
AWS Healthの組織ビューを有効にすると、管理アカウントまたは委任管理者アカウントが、組織内の全アカウントからHealthイベントを受信できます。
セキュリティのベストプラクティスとして、管理アカウントではなく委任管理者アカウントを使用することが推奨されています。
最大5つのメンバーアカウントを委任管理者として登録可能です。
2. バックアップリージョンへの自動配信
2025年11月のアップデートにより、AWS Healthは全てのHealthイベントを、プライマリリージョンとバックアップリージョンの両方に自動配信するようになりました。
- 標準パーティションでは、オレゴンリージョンが全リージョンのバックアップとして機能
- オレゴンリージョンのバックアップはバージニア北部リージョン
これにより、オレゴンリージョンに1つのEventBridgeルールを設定するだけで、全リージョンのHealthイベントを受信できます。
3. グローバルイベントも受信可能
IAMなどのリージョン固有ではないグローバルイベント("eventRegion": "global")も、オレゴンリージョンにバックアップイベントとして配信されます。
4. バックアップイベントの識別
EventBridgeで受信するイベントにはdetail.backupEventフィールドが含まれます:
-
"backupEvent": "true"- バックアップリージョンで受信 -
"backupEvent": "false"- プライマリリージョンで受信
構築手順
ステップ1: 組織ビューの有効化
- Organizations管理アカウントでAWS Healthコンソールにアクセス
- ナビゲーションペインで「組織の状態」>「設定」を選択
- 「組織ビューの有効化」をクリック
ステップ2: 委任管理者の登録
管理アカウントのCloudShellまたはAWS CLIで以下のコマンドを実行:
aws organizations register-delegated-administrator \
--account-id <委任管理者アカウントID> \
--service-principal health.amazonaws.com
ステップ3: EventBridgeルールの作成
委任管理者アカウントのオレゴンリージョンで:
- EventBridgeコンソールを開く
- 「ルールを作成」をクリック
- イベントパターンを設定:
{
"source": ["aws.health"],
"detail-type": ["AWS Health Event"]
}
- ターゲットとして「SNSトピック」を選択
- SNSトピックを指定(SNSトピック作成がまだの場合は新規作成する)
- 「ターゲット入力の設定」で「一致したイベントの一部」を選択
- 一致したイベントの一部を指定:
$.detail
※この設定により、イベントの詳細情報のみがSNSに送信されます。detail.affectedAccountフィールドで実際に影響を受けたアカウントを確認できます。 - ルールを作成する
ステップ4: SNSトピックの設定
- SNSコンソールでトピックを開く
- 「サブスクリプションを作成」をクリック
- プロトコル: Email
- エンドポイント: 通知先メールアドレス
- 確認メールが届くので、リンクをクリックして承認
以上で構築は終わりです。
動作確認
設定後、以下のようなHealthイベントが発生すると、メール通知が届きます:
- EC2インスタンスのメンテナンス予定
- サービス障害情報
- セキュリティ通知
- 請求関連の通知
発展的な活用例
EventBridgeのターゲットをLambda関数に変更することで、高度な自動化が可能です:
例1: メールの可読性向上
import json
import boto3
sns = boto3.client('sns')
TOPIC_ARN = "arn:aws:sns:ap-northeast-1:123456789012:your-topic"
def lambda_handler(event, context):
detail = event['detail']
# 必要な情報を整形
subject = f"[AWS Health] {detail.get('service')} - {detail.get('eventTypeCode')}"
message = f"""
[AWS Health Notification]
■ サービス
{detail.get('service')}
■ イベント種別
{detail.get('eventTypeCode')}
■ ステータス
{detail.get('statusCode')}
■ 影響リソース
{', '.join([e.get('entityValue') for e in detail.get('affectedEntities', [])])}
■ 詳細
{detail.get('eventDescription')[0].get('latestDescription')}
■ 開始時刻
{detail.get('startTime')}
■ 終了時刻
{detail.get('endTime')}
"""
# 整形済みメッセージをSNSへ再送
sns.publish(
TopicArn=TOPIC_ARN,
Subject=subject,
Message=message
)
例2: 重要度に応じた通知先の振り分け
def lambda_handler(event, context):
event_detail = event['detail']
# アクション必須の場合は緊急連絡先へ
if event_detail.get('actionability') == 'ACTION_REQUIRED':
send_to_pagerduty(event_detail)
# セキュリティ関連はセキュリティチームへ
if 'SECURITY' in event_detail.get('personas', []):
send_to_security_team(event_detail)
# 請求関連は財務チームへ
if 'BILLING' in event_detail.get('personas', []):
send_to_finance_team(event_detail)
例3: Jiraでチケット自動作成
import boto3
import requests
def lambda_handler(event, context):
# Healthイベントの詳細を取得
event_detail = event['detail']
# Jira APIでチケット作成
jira_url = "your-domain.atlassian.net/rest/api/3/issue"
payload = {
"fields": {
"project": {"key": "OPS"},
"summary": f"AWS Health: {event_detail['eventTypeCode']}",
"description": event_detail['eventDescription'][0]['latestDescription'],
"issuetype": {"name": "Task"}
}
}
# Jira APIコール処理...
注意事項
高可用性について
今回の構成では、オレゴンリージョンのEventBridgeにイベントを配信できない等の問題が発生した場合、通知を受信できなくなります。
高可用性が必要な場合は、以下の構成を検討してください:
- オレゴンリージョンのバックアップであるバージニア北部リージョンにルールを設定
-
detail.communicationIdを使用して重複排除を実装
コスト
- EventBridgeルール: 無料(カスタムイベントバスを使用しない場合)
- SNS: 月100万件まで無料、以降$0.50/100万件
- Lambda: 月100万リクエスト、40万GB秒まで無料
通常のHealthイベント通知であれば、ほぼ無料枠内で運用可能です。
まとめ
本記事では、AWS Healthの組織ビューと委任管理者、EventBridgeを活用して、シンプルかつ柔軟な全アカウント一括通知システムを構築する方法を紹介しました。
ポイント:
- オレゴンリージョン1つで全リージョン・全アカウントをカバー
- グローバルイベントも受信可能
- EventBridgeの柔軟性により、メール以外の通知先にも簡単に拡張可能
- Lambda関数を追加することで、カスタムロジックの実装やJiraチケット化など高度な自動化が実現
まずはシンプルなメール通知から始めて、必要に応じてLambda関数を追加していくアプローチがおすすめです。


