morishitaです。
AWSで様々なサービスを使っていて、常々不便に思っていたことがあります。
それは Slackに通知できない ということです。
もちろん、Lambda を使って Slack にメッセージを送るのは、難しくないしすぐできます。実際、Cloud Watch Alert の重要なものは SNS(Simple Notification Service) + Lambda で Slack に通知していたりします。
先日、紹介した Amplify Console はメール通知機能を備えており、ビルド、デプロイの成否をメールで通知してくれます。Amplify Consoleの様に開発プロセスの一部に組み込まれるサービスにとって通知のニーズが必要とはAWSもわかっているなぁと感心しました。
しかし、一方で「その手段がメールだけって…」と軽い失望を覚えました。
Amplify Console のような比較的新しいサービスにおいてもそんな感じなので、AWS的にはあんまりやる気ないのかなと思っていました。
大きな手間でもないのだけど、だからこそIncoming WebhookのURL設定するだけ「デプロイ終わったよ」くらい送れる程度のことでいいからできればいいのに。
と思っていたところ、このAWSのミッシングピースを埋めるかもしれないサービスが発表されました!
2019/07/29時点でベータ版とのことですが、すでに東京リージョンでも使えるようです 1。
試してみました。
早速使ってみる
まあ、Slackになにか通知できるだけのサービス、そんなに難しくはないだろうとドキュメントを読むのもそこそこに触ってみました。
チャットサービスの選択
Chatbot Consoleにアクセスするとチャットサービスを選択ができます。
次の選択肢があります。
- Amazon Chime
- Slack
Amazon Chime はオンライン会議・チャットサービスとのことです。
AWSにはこんなサービスもあるのかと思いつつ、選択するのはもちろん Slack です。
Slackアプリケーションのインストール許可
Configure client ボタンをクリックして進むと、Slack に飛ばされて、Slack アプリケーションのインストール許可を求められます。
ブラウザでログインしている Slack アカウントがあればそれが表示されます。 右上のプルダウンで別のアカウントを選択することも可能です。
許可するインストールされます。 Slack側のアプリリストにも次のように追加されています。
チャネルの設定
インストールOKするとChatbotの設定に戻ります。 設定は3つのパートに分かれています。
まずは、Slack Channel の設定。
Private を選択すると Private channel ID
を直接入力します。
Public を選択すると接続した Slack にあるチャネルのリストから送信先のチャネルを選択できます。
続いて、IAMロールの設定。
既存のも選択できますが、Create an IAM role using a template
を選択すれば、必要な権限を持ったロールを作ってくれます。
最後にメッセージのソースとなる SNS(Simple Notification Service)のトピックの選択。
Chatbot は SNS のサブスクライバーの1つになるので、SNS のトピックを選択します。 既存のものからの選択になるので、適当なのがなければ予め作って置く必要あります。 複数のリージョンの複数のトピックを指定することも可能です。
Configure ボタンをクリックして設定完了です。
選択した SNS トピックをコンソールを確認すると、サブスクリプションに Chatbotのエンドポイントが追加されています。
テストメッセージ送信
とりあえず、疎通確認としてなにか送ってみようと SNS のコンソールからメッセージを発行してみましたが、一向に Slack のチャネルにはメッセージが届かない…。
試しに、メールのサブスクライバーを追加してメッセージを発行してみると、メールにはちゃんと届きます。
しかし、Slack には何度送っても届かない。
IAMロールも Chatbot のコーンソールが作ったものを使っているので権限不足ってこともないいだろうし、何が悪いのか…。
と、ここでドキュメントに立ち返ってみると、現状 Chatbot がサポートしてるサービスが限られているようです。
Using AWS Chatbot with Other AWS Services - AWS Chatbotに書いてありました。
次のサービスがサポートされています。
- Amazon CloudWatch
- AWS Health
- AWS Budgets
- AWS Security Hub
- Amazon GuardDuty
- AWS CloudFormation
これら以外のサービスからメッセージを送信してもしれっと無視されるようです。
EC2に負荷をかけてみた
なるほど。ならばということでEC2インスタンスを実験用に作って負荷をかけてみることにしました。
作ったインスタンスには次のようなアラームを設定しました。
そして、stress
コマンドで負荷をかけて見ると…。
来ました!
次のようなメッセージが Slack の設定したチャネルに届きました。
タイトル部分が該当する Cloud Watch Alert へのリンクになっていて、詳細を確認しやすくなっています。
グラフもついて、いまLambdaで自前で送っているメッセージより見やすいかも。
そして負荷をやめると次のメッセージが。
あれ、こちらはちょっとグラフの内容がおかしいような。 ベータサービスだから?
まとめ
- Chatbot で SNS 経由で各種サービスの通知をSlackに送信できる
- 特に CloudWatch Alert を Slack に送信するのは簡単
- 今は送信できるサービスが少ない
最初は SNS のどんなメッセージも送信できると思ったので、ちょっと期待通りではなかったですが、今後拡充されればもっと便利なサービスになるのではと思います。
参考
最後に
アクトインディではエンジニアを募集しています。 actindi.net
-
AWS Chatbot自体はリージョンに属さいないグローバルサービスのようです。↩