はじめに

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発行のため、一部手動で行う箇所が発生します。