[AWS]CloudWatchとChatbotでSlack通知

従来であればAWSからSlackに通知を送りたい場合にはLambdaを使うか、SlackのEメールアプリに対してSNS経由で連携するくらいしかありませんでした。

しかしAWS Chatbotがリリースしたことで簡単にSlackへの通知を送ることが可能となっています。
また、2020年3月6日のアップデートによりCloudFormationでChatbotを作成することが可能になったため、CloudWatchのアラーム+Chatbotの設定を一度に作成・管理できるようになりました。

今回はコンソールからAWS Chatbotを設定して実際にどのような通知が送信できるのか確認したいと思います。

事前準備


Chatbotを呼び出すためにSNSのトピックを用意しておく必要があります。
事前準備として名前と説明だけが書かれている空のトピックを作成しました。


サブスクリプションはChatbotを作成するときに登録するのでこの段階では空でも問題ありません。

Chatbot設定


AWSコンソールからChatbotを開きチャットクライアントを追加します。
現在ではAWS ChimeとSlackを選択可能ですが、今回はSlackを選択します。


すると現在ログインしているワークスペースとの連携を求められます。
複数のワークスペースにログインしている場合には右上のタブから対象を切り替えることができます。


クライアントの追加が完了すると[設定済みクライアント]にワークスペース名が追加されます。
また、このタイミングで自動的にSlackへAWSアプリケーションがインストールされます。

続いてAWS Chatbotを配置するチャンネルを設定します。
通知先のチャンネルを追加するには[新しいチャンネルの設定]を押します。


投稿先のチャンネルを選択します。
ここではプライベートチャンネルもリストに表示されてしまうため、運用の際には注意が必要です。

Chatbotで使用するIAMロールではSNSへのアクセス権限があれば機能しますが、最近CloudWatchLogsへのログ出力がサポートされたのでCloudWatchLogsへのロググループの作成権限とPUT権限もつけておくと良いでしょう。


SNSトピックの設定では事前準備で作成した物を設定します。
この時点でSNSのサブスクリプションとして登録されます。

これでSlack通知を送信するための準備は完了です!

動作確認用のWebページを用意


ターゲットの存在しないALBを作成しました。
リスナールールから固定レスポンスを返す設定をして擬似的なWebページとします。
Apacheなどを立てずにパッと用意できるのは便利ですね。


アクセスするとHelloWorldが表示されます。
ALBのDNSの反映が遅かったので今回はIPアドレスを直打ちしてブラウザで開いていますが、向き先はALBのものです。

CloudWatchAlarmを作成


先ほど作成したALBにアクセスすると固定レスポンスと503が返ることを利用して検証を行います。
ALBの5XXエラーメトリクスが1以上発生したときに使ってアラームが送信されるように設定をしました。


アラームの通知先をChatbotと結びついているSNSにして準備完了です。

Slack側での通知


事前にSlackの通知先のチャンネルにAWSアプリを追加しておく必要があります。

アラームが送信されるとどのAWSアカウントからどのような条件の閾値を越えたのか通知が送られてきます。
この通知はAlarm Stateが変更されるタイミングで送られてくるため、アラーム状態のまま放置してしまっても最初の1度しか通知が送られてきません

Slackのメッセージが激しく流れてしまうと見逃してしまう可能性もあるので運用には気をつけたいところですね。

今回はアラーム状態になった場合のみ通知を送るようにしていますが、アラーム状態からの復旧タイミングにも送られるようにするとなお良いでしょう。

終わりに

AWS ChatbotがCloudForamtionに対応したことを受けてChatbotでの通知機能を検証してみました。

通知される情報に問題がなければCloudWatch + AWS Chatbotを使った通知も悪くはないかもしれませんね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)