はじめに
AWSでなにか起きたら、できるだけ早く気づきたいですよね。
ということで今回はタイトルの通り、AWSのイベントをSlackに通知する方法をご紹介していきます。
Amazon SNS
とAWS Chatbot
というサービスを利用すると、いとも簡単にSlack通知を実装することができるんです。
本記事では、Slack通知の概要をざっと説明した後に、「CloudWatchのアラームが発生したらSlackに通知がいく」というような実装をしていきます。
※ 今回はCloudWatchのアラーム通知ですが、他のサービスの通知にも参考になるかと思います。
目次
Slack通知の概要
冒頭でも記載しましたが、通知にはAmazon SNS
(Simple Notification Service、以下SNSと記載)とAWS Chatbot
(以下Chatbotと記載)というサービスを利用します。
それぞれざっくり以下のようなサービスです。
サービス名 | 説明 |
---|---|
SNS | メッセージを受信&送信してくれる橋渡し的存在。 具体的にはAWSサービスからメッセージを受け取り、他のAWSサービスやメール, SMS等にメッセージやイベントを受け渡すサービス。 |
Chatbot | AWSのイベント情報をSlackに通知するサービス。 具体的には、まずSNSから通知イベントを受け取り、各種AWSサービスからアラームの内容を取得する。そしてアラームの内容をSlackまたはAmazon Chimeに対してメッセージを送信するサービス。 |
今回は以下のような流れで通知が行われます(以下の図参照)。
CloudWatchでアラームが発生すると、まずはSNSに通知がいきます。その通知がきたということをSNSはChatbotに送ります。そして最後にChatbotはCloudWatchから情報を取得し、その情報をSlackに送ります。
※ AWSのサービスとしてCloudWatchを例として挙げていますが、他のサービスもほぼ同じ流れです。
通知サービスの設定
ここでは以下の3つのことをしていきます。
- Slackチャンネルの作成
- SNSの設定
- Chatbotの設定
Slackのチャンネル作成
まずは通知を受信するためのチャンネルを作りましょう。
本記事ではtest
というチャンネルを作成しました。
【補足】 Slackチャンネルについて
異なるイベントを同じチャンネルに通知することも可能です。
例えば、CloudWatchのアラームとCodePipelineの通知を一緒のチャンネルに通知させることができます。どの範囲の通知を受け取るかでチャンネル名を決めるのが良いかもしれません。
SNSの設定
Slack通知の概要でも説明しましたが、SNSはメッセージを受け取り、それを各受信者に送信するサービスです。
SNSではメッセージを受信または、送信するポイントをトピックと呼びます。
- まずはSNSトピックを作成していきます。
今回は以下のような設定で進めます。画像外の部分はデフォルトの設定で進めていきます。
【補足】 トピックの種類について
|サービス名|説明|
|:--|:--|
|FIFO|受信したメッセージの順序付けが厳密に行われる。Amazon SQS(Simple Queue Service)と組み合わせて使用する|
|スタンダード|FIFOほど厳密なメッセージに順序付けはされない。様々な送信先を選択することができる|
- 次に作成したトピックが受け取ったメッセージを、どこに配信するのかという設定をしていきます。
この設定をサブスクリプションと呼びます。
今回の配信先はChatbotになります。配信先がChatbotの場合はChatbot側でサブスクリプションを設定するため、SNSの画面上では設定しません。
そのため、一旦Chatbotの設定をしていきます。
Chatbotの設定
- Chatbotのトップ画面からメッセージを送る先を設定していきます。
チャットクライアントをSlackに設定して、送信先のSlackを設定していきます(今回はtestという名前のワークスペースを用いています)。
連携が完了すると、Chatbotの画面に連携したSlackのワークスペースが表示されます。
ワークスペースの部分をクリックすると、チャンネルの設定をすることができます。
それではワークスペース内のチャンネルについて設定していきます。
ここでは、設定するのは以下の3つです。
- どのSlackチャンネルに通知するか
- Slackのユーザーにどのようなアクセス制限を設けるか
- どのSNSトピックからメッセージを受け取るか
順番に画面を見ていきます。
- どのSlackチャンネルに通知するか
今回は先ほど作成したtest
というパブリックなチャンネルを指定しました。
- Slackのユーザーにどのようなアクセス制限を設けるか
今回は画像のような設定を組んでいます。
Channelガードレール(Slackのチャンネルメンバーに与えられる権限)はあまり権限を与えたくなかったので、とりあえずAmazonSNSReadOnlyAccess
を設定しました(とりあえず感がすごいですが。。。)
今回は、チャンネルIAMロールを設定します。ロール名はtest-alarm-role
としました。
これでChatbotの設定は以上になります。
CloudWatchのアラーム通知設定
※ここでは、アラームの詳細な設定方法の説明はしません。あくまで通知の設定のみ説明します。
- それではCloudWatchの通知を設定していきます
すでにアラームを作成している場合は編集ボタンから、そうでない場合はアラームの作成ボタンを押します。
通知の設定をする箇所で、先ほど作成したSNSトピックを選択します(今回はtest-topic
)。
選択し終わったら通知の設定は完了です。
アラームの設定自体を完了させてください。
- 最後に動作確認をしてみましょう
今回はEC2インスタンスのメモリ使用率が80%以上だとアラームが出るように設定したので、メモリに負荷をかけてアラームを出していきます。
しばらくすると、Slackに通知がきました。
これで問題なく設定できたことがわかりました。
これで以上となります。
最後まで読んでいただきありがとうございました。