AWS Health Aware (Ver.2.2.1)のCloudFormation版を組織に導入してみる
AWS Health Aware (以降 AHA)はAWS Healthの通知フレームワークです。
組織(AWS Organizations)やAWSアカウント単体の AWS Health イベントの通知を管理します。 テンプレートを展開するだけで、 Slackチャンネルや Eメール、EventBridge など 各種エンドポイントへの 通知設定を簡単に構築できます。
このAHAを以前にブログで紹介しました。
あれからバージョンも上がったので、再度展開してみます。 最近の Healthのアップデート もあり、特に委任周りで手順が簡素化されています。 そのため、今回は既存AHAを削除して再インストールします。
新しいバージョン(Ver.2.2 以降)の要素も紹介します。
要旨
- AHAの新しいバージョンについて
Version 2.2.1
: Python 3.8 から Python 3.11 に更新Version 2.2
: EventBridge イベントバスへ送られるスキーマを改善
- AHAの展開方法 in Organizations環境
- ✅ 管理アカウント上の作業
- Health Organizational View の有効化
- AWS Health の委任設定
- ✅ 委任先メンバーアカウント上の作業
- 通知先エンドポイント(Slack WebhookやEventBridgeなど)の作成
- AHAパッケージのS3格納
- AHAテンプレートの展開
- ✅ 管理アカウント上の作業
AHAの展開 その1(管理アカウント)
まずは 管理アカウント上 で行う作業を記載します。 すでに実施されている場合は省略できます。
Health Organizational View の有効化
Health Organizational View を有効化します。 AWS Health ページの [組織の状態] → [設定] から有効化できます。
AWS Health の委任設定
以下コマンドを実行して、メンバーアカウントに AWS Healthを委任します。
# (注意) ACCOUNT_ID 部分を委任したいメンバーアカウントのIDに置き換えます aws organizations register-delegated-administrator \ --account-id ACCOUNT_ID \ --service-principal health.amazonaws.com
AHAの展開 その2(委任先メンバーアカウント)
次に 委任先メンバーアカウント上 で行う作業を記載します。
通知先のエンドポイントの作成
この設定は 委任先メンバーアカウント上 で行います。
最低一つ、通知先のエンドポイントを作成します。 サポートしているエンドポイントは以下のとおりです。
- Amazon Chime
- Slack
- Microsoft Teams
- EventBridge
今回は EventBridge を使います。 カスタムイベントバス aha-eventbus
を作成しました。
そして、 aha-eventbus
上に EventBridgeルール catch-all-aha-events
を作成しています。 ルールのターゲットに CloudWatchロググループを設定して、 内容を確認できるようにします。
AHAテンプレート展開の準備
リポジトリのクローン
AHAリポジトリを一旦ローカルへ落とします。
$ git clone https://github.com/aws-samples/aws-health-aware.git Cloning into 'aws-health-aware'... remote: Enumerating objects: 257, done. remote: Counting objects: 100% (96/96), done. remote: Compressing objects: 100% (39/39), done. remote: Total 257 (delta 79), reused 57 (delta 57), pack-reused 161 Receiving objects: 100% (257/257), 1.46 MiB | 15.13 MiB/s, done. Resolving deltas: 100% (137/137), done. $ ls aws-health-aware
パッケージのファイルを圧縮
パッケージのルートにある handler.py
と messagegenerator.py
を zip圧縮します。 名前を aha-v2.2.1.zip
としました。
zipファイルのS3格納
aha-v2.2.1.zip
を委任先メンバーアカウント上の適当なS3バケットへ格納します。
AHAテンプレート展開
パッケージにある CFN_DEPLOY_AHA.yml
を CloudFormationスタックとして展開します。
スタック名を適当 (AHA-Deployment 等) に入力します。 以下記載のパラメータで、展開しました。
⬇ Customize Alerts/Notifications ~ Package Information
パラメータ | 値 | 参考: デフォルト |
---|---|---|
AWS Organizations Enabled? | Yes | No |
The types of events to get alerted on | (デフォルト値) | issue|accountNotification|scheduledChange |
Name of S3 Bucket | ( aha-v2.2.1.zip ファイルがあるS3バケット) | |
Name of .zip file in S3 Bucket | aha-v2.2.1.zip |
⬇ Communication Channels - Slack/Microsoft Teams/Amazon Chime And/or EventBridge
パラメータ | 値 | 参考: デフォルト |
---|---|---|
Slack Webhook URL | (デフォルト値) | None |
Microsoft Teams Webhook URL | (デフォルト値) | None |
Amazon Chime Webhook URL | (デフォルト値) | None |
EventBusName | aha-eventbus | None |
Email From | (デフォルト値) | none@domain.com |
Email To | (デフォルト値) | none@domain.com |
Subject of Email | (デフォルト値) | AWS Health Alert |
⬇ More Configurations - Optional
パラメータ | 値 | 参考: デフォルト |
---|---|---|
EventSearchBack | (デフォルト値) | 1 |
Which regions to search for events in | ap-northeast-1,global | all regions |
ARN of the AWS Organizations Management Account assume role (if using) | (デフォルト値) | None |
Deploy in secondary region? | (デフォルト値) | No |
Exclude any account numbers? | (デフォルト値) | None |
参考: 展開前の変更セット
イベントを確認する
[2023/10/10] 現時点で通知を貰っていないので、貰い次第サンプルとして記載します。
新しい AWS Health Aware の EventBridgeスキーマについて
Ver.2.2 以降のAHAのEventBridgeスキーマは以下のようになっています。
{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "AHA Event", "source": "aha", "account": "123456789012", "time": "2022-07-14T03:56:10Z", "region": "region of the eventbus", "resources": [ "i-1234567890abcdef0" ], "detail": { "eventArn": "arn:aws:health:region::event/id", "service": "service", "eventTypeCode": "typecode", "eventTypeCategory": "category", "region": "region of the Health event", "startTime": "2022-07-02 12:33:26.951000+00:00", "endTime": "2022-07-02 12:33:26.951000+00:00", "lastUpdatedTime": "2022-07-02 12:36:18.576000+00:00", "statusCode": "status", "eventScopeCode": "scopecode", "eventDescription": { "latestDescription": "description" }, "affectedEntities": [{ "entityValue": "i-1234567890abcdef0", "awsAccountId": "account number", "awsAccountName": "account name" }] } }
– Readme for new AHA Event schema より引用
以前のスキーマと比べてフィルタルールを作成しやすいように改善されていますね。 (参考: 過去バージョンのイベントサンプル)
おわりに
以上、新しい AWS Health Aware を組織に導入してみました。
新しい EventBridgeスキーマを活用したい場合や、 内部のPythonバージョンを更新する必要がある場合に参考になれば幸いです。