📚
Organizationsを利用したAWS Health通知の集約
概要
- 背景
- どのシステムでも障害情報の通知は要求される
- AWSを利用していると往々に複数アカウントを活用する
- 利用しているアカウントの障害情報を集約の上通知したいという願望があるが全アカウントに通知機構を作りこむのは効率的ではないし抜けもれリスクもある
- 対応
- Organizationsを利用している場合はアカウント委任を実施して障害情報集約が可能
構成
- 今回通知までSNSによる通知を想定して実装してみる
- アカウント間の集約→Organizations
- リージョン間の通知の集約→EventBus
やってみる
1. 委任アカウントの設定
- organizationsの管理アカウントへログイン
- AWS Healthの組織ビューの有効化
- (任意)委任先アカウントを指定
- 必要に応じで集約先のアカウントを変更する
- 以下コマンド発行
aws organizations register-delegated-administrator --account-id ACCOUNT_ID --service-principal health.amazonaws.com
- この時点でOrg配下のアカウントの障害情報が一覧化できるようになります
2. EventBridgeのリソースを作成する
-
前提
- 集約リージョン以外の構築はStacksetsで効率化できると思います
- ある程度汎用的なCfnのコードだけこちらでは紹介します
-
EventBridgeリソース @ 集約リージョン
AWSTemplateFormatVersion: "2010-09-09"
Description: "EventBridge bus"
Resources:
# EventBridge Bus(Custom) @ 集約リージョン
CustomEventBus:
Type: "AWS::Events::EventBus"
Properties:
Name: evb-bus-custom
# EventBridge Rule(default bus) @ 集約リージョン
HealthEvent:
Type: AWS::Events::Rule
Properties:
Description: "health dashboard event logging"
EventBusName: "default"
EventPattern:
source:
- "aws.health"
Targets:
- Arn: [SNS-Arn]
Id: SNS
Name: evb-rule-health
# EventBridge Rule(Custome bus) @ 集約リージョン
HealthScheduledChangeOtherRegion:
Type: "AWS::Events::Rule"
Properties:
Description: "SNS topic rule from AWS Health events Information of Scheduled Change in Custom EventBus"
EventBusName: !Ref CustomEventBus
EventPattern:
source:
- "aws.health"
Name: evb-rule-health-OtherRegion
State: "ENABLED"
Targets:
- Arn: [SNS-Arn]
Id: SNS
- EventBridgeリソース @ 集約リージョン以外
AWSTemplateFormatVersion: "2010-09-09"
Description: EventBridge Config
Resources:
HealthEvent:
Type: AWS::Events::Rule
Properties:
Description: "health dashboard event logging"
EventBusName: "default"
EventPattern:
source:
- "aws.health"
Targets:
- Arn:[EventBus(Custom)のArn]
Id: CustomEventBus
RoleArn: [EventBus(Custom)にアタッチするIAMロールArn]
Name: evb-rule-health
3. 通知テスト
- AWS Healthのテストイベントはサポート経由で作れるので試験が必要な際には活用できる
Discussion