はじめに
EC2やRDSのメンテナンス対応を行なった経験はございますでしょうか。
メンテナンス通知が増えてくると対応を見落とし、予期せぬサービス遮断にも繋がりかねませんので、メンテナンス通知が拾えるようにAWS Health Dashboardの情報をSlackに通知したいと思います。
使用するAWSサービス
- AWS Chatbot
- SNS
- EventBridge
構成
メンテナンスのイベント発生からSlack通知までの流れは以下になっています。
1. EventBridgeにてAWS Health Dashboardのメンテナンスイベントを検知
2. 検知内容をSNSに通知
3. SNSからAWS Chatbotに通知
4. AWS ChatbotからSlackに通知
Slack通知例
本設定を行うことで以下のような通知がSlackに通知されます。
※黒塗りしていますがインスタンスIDも表示されます。
手順
SNSトピックの作成
AWS Chatbotに通知するためのSNSトピックを作成します。
タイプはスタンダードを選択し、名前は任意の名前を入力しトピックを作成します。
EventBridgeの作成
AWS Health Dashboardの通知を検知するためのEventBridgeのルールを作成します。
名前には任意の名前を入力し、ルールタイプはイベントパターンを持つルールを選択します。
メソッドはカスタムパターンを選択し、イベントパターンに通知したいイベントをjsonで記載します。
※以下はEC2,RDSのメンテナンス通知の例です。(リソースを絞る必要が無ければ行ごと削除すればOK)
{ "source": ["aws.health"], "detail-type": ["AWS Health Event"], "detail": { "service": ["EC2","RDS"], "eventTypeCategory": ["scheduledChange"] } }
ターゲットタイプはAWSのサービスを選択し、プルダウンからターゲットをSNSトピック,トピックを前手順で作成したSNSトピックを選択する。
タグを任意で設定し、内容確認後、ルールを作成します。
AWS Chatbotの作成
SNSから通知された内容をSlackに通知するためのAWS Chatbotを作成します。
Slackのワークスペースにリダイレクトされるので予めSlackのワークスペースにログインしておきます。
チャットクライアントはプルダウンよりSlackを選択します。
通知を連携するワークスペースに問題ないことを確認します。
Slackのワークスペースが連携されたらチャンネルを設定します。
設定名には任意の設定名を入力し、Slack通知先のチャンネルIDを入力します。
※チャンネルIDの確認方法
Slackより通知したいチャンネルを右クリック > チャンネル詳細を表示するを選択すると下部に記載されています。
ロール名には任意のロール名を入力し、ガードレールポリシーにはプルダウンよりReadOnlyAccessにチェックを入れます。
リージョンを選択し、前手順で作成したSNSトピックを選択します。
IaCについて
- CloudFormationにて作成可能です。
- ワークスペースID発行のため、一部手動で行う箇所が発生します。