AWS ChatbotでおしゃれにSlack通知したい！

# TL;DR
システムがトラブった時、通知や対応を迅速に行いたいですよね。
PagerDutyとかの3rdパーティ製のツールもありますが、せっかくAWSでワークロードを実施しているのでAWS内サービスで実現してみましょう。
ということで、AWS ChatbotとSlackを連携してCloudWatchアラームがトリガされたらSlackに通知してみたいと思います。

# AWS Chatbotとは？
> AWS Chatbot は、Slack チャンネルや Amazon Chime チャットルームで AWS のリソースを簡単にモニタリングおよび操作> できるようにしてくれるインタラクティブエージェントです。AWS Chatbot を使用すると、アラートを受信することや、診断情> 報の取得、AWS Lambda 関数の呼び出し、AWS サポートケースの作成を行うコマンドを実行することができるようになります。
> https://aws.amazon.com/jp/chatbot/

どうやら、インタラクティブに会話するような会話Botというものではなく、診断情報やアラートをチャットツールに連携してくれるエージェントのようなものであるらしい。
（※）Lambda関数やサポートケース作成のためのコマンドも実行できるらしいが、今回は未検証です。

Chatbotと統合されているAWSサービスは下記に記載されています。
https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html

# ChatbotとSlackを接続する
では実際にChatbotとSlackを接続してみましょう
Chatbotを動かすためにはSNSトピックも必要となるのでそちらも構築していきます
![Screen Shot 2021-11-22 at 5.47.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/67193ab4-4507-1bd7-7920-35f6397492cc.png)



### Slackワークスペースを作る
ここは割愛します。
Slackの[公式ガイド](https://slack.com/intl/ja-jp/help/articles/206845317-Slack-%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)を参照しましょう。

### Chatbot用SNSトピックを作成
Chatbotがアラートを受け取れるようにするためにSNSトピックを作成します。
今回は疎通取れればOKなので、SNS設定はスタンダードに設定、その他設定項目は初期状態。
![Screen Shot 2021-11-22 at 2.10.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/4d2b7477-fbdc-6c02-5749-923ef93806a3.png)

### Chatobot側操作
1. 「チャットクライアントを設定」からSlackを選択
![Screen Shot 2021-11-22 at 2.01.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/7791c5a2-da61-475f-fbbf-8577b9fd0acf.png)

1. ChatbotにSlackへのアクセス権限を付与
![Screen Shot 2021-11-22 at 2.02.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/b3d4efe6-3e66-362c-d829-5cfee4beb1f0.png)

1. 新しいチャネルを設定
![Screen Shot 2021-11-22 at 2.05.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/af2a1d37-437c-71e6-31e6-8367f061930c.png)

1. Slackチャネルの詳細設定（前編）
#####設定名
コンソール上に表示される「設定名」を入力
#####Slackチャネル
通知先のSlackチャネルを設定。今回はパブリックチャネルの「alert」に設定しました
![Screen Shot 2021-11-22 at 2.14.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/eba8ac32-b2f4-b1b8-97f1-008ccdb4bede.png)

1. Slackチャネルの詳細設定（後編）
####アクセス許可
Chatbotに付与するIAMロールを選択（ロールがない場合はこのタイミングで作成可能）
(※)IAMロールの中身はSupportやLambdaのInvokeやSSMが設定されています。気になる人はポリシーを確認してみましょう
####通知
**一番大事**。ここを設定しないとChatbotにAWSサービスからの通知が飛ばないので文鎮と化します。（ちなみに後でも設定はできる）
![Screen Shot 2021-11-22 at 2.17.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/b5ceaa0f-fe8b-a884-b9bb-257348a2e7a6.png)

1. 設定完了！
「設定済みチャネル」に先程入力した内容が表示されていればOK
![Screen Shot 2021-11-22 at 2.24.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/a28fbc51-7b99-31b2-92cb-08e071748226.png)

### CloudWatch Alarm 作成
#### CloudWatchコンソールからAlarmを作成
今回はテスト用に立てたEC2インスタンスのステータスチェックがFailした際に通知が飛ぶように設定する
稼働中のEC2が落ちたら通知されたいですよね。
![Screen Shot 2021-11-22 at 2.30.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/deeb3df4-9aba-d16d-5006-b11774daf544.png)

#### メトリクスはこちら
![Screen Shot 2021-11-22 at 2.45.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/8370f6b3-c099-1db8-d6cc-63d50eaea59c.png)

#### 設定内容
5分間のウィンドウ枠でステータスチェックが1度以上Failしたら通知する、という内容で設定
![Screen Shot 2021-11-22 at 3.03.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/7b340a7e-d864-174c-4c9e-7b414e9b8f37.png)

先程設定した監視条件に引っかかった際の挙動を設定
・アラーム状態に遷移して、先程作成したSNSトピックに通知を投げ込む、という内容で設定
![Screen Shot 2021-11-22 at 2.49.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/4727bae3-154b-9afa-126f-b72afe1f5e8b.png)

# Alart発火させてみる
それではテスト通知してみましょう。
コンソール上からCloudWatchアラームの状態を変更することはできないため、CLIから下記コマンドでAlarm状態に遷移させてみる。

```Bash
aws cloudwatch set-alarm-state --alarm-name test-ec2-alarm --state-value ALARM --state-reason "test"
```

するとこんな感じでSlackに通知が飛んでくる
見やすい上にグラフも付いてるし素敵！
![Screen Shot 2021-11-22 at 3.14.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/7947345f-306e-a4f0-08e7-0a4e46fb513d.png)

ちなみに、同様の内容をSNS→Email通知するとこんな感じのテキストメールが飛んできます。
![Screen Shot 2021-11-22 at 3.14.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290494/78f7de45-6a03-ff97-9a89-07efe6d88bf1.png)

Slack通知の方が見やすくていいですね。

# まとめ
日頃使っているChatツールとの連携がネイティブにできるのがChatbotの一番の嬉しみではないでしょうか。
メール通知でもアラートは飛ばせますが、連絡のチャネルが割れるのは辛いですよね。
SlackとChatbot間の連携も簡単にできるので、お手軽に通知の仕組みを作りたいときには非常に有用ではないでしょうか。