アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

AWS Chatbotを触ってみた

morishitaです。

AWSで様々なサービスを使っていて、常々不便に思っていたことがあります。

それは Slackに通知できない ということです。

もちろん、Lambda を使って Slack にメッセージを送るのは、難しくないしすぐできます。実際、Cloud Watch Alert の重要なものは SNS(Simple Notification Service) + Lambda で Slack に通知していたりします。

先日、紹介した Amplify Console はメール通知機能を備えており、ビルド、デプロイの成否をメールで通知してくれます。Amplify Consoleの様に開発プロセスの一部に組み込まれるサービスにとって通知のニーズが必要とはAWSもわかっているなぁと感心しました。
しかし、一方で「その手段がメールだけって…」と軽い失望を覚えました。

tech.actindi.net

Amplify Console のような比較的新しいサービスにおいてもそんな感じなので、AWS的にはあんまりやる気ないのかなと思っていました。

大きな手間でもないのだけど、だからこそIncoming WebhookのURL設定するだけ「デプロイ終わったよ」くらい送れる程度のことでいいからできればいいのに。

と思っていたところ、このAWSのミッシングピースを埋めるかもしれないサービスが発表されました!

aws.amazon.com

2019/07/29時点でベータ版とのことですが、すでに東京リージョンでも使えるようです 1

試してみました。

早速使ってみる

まあ、Slackになにか通知できるだけのサービス、そんなに難しくはないだろうとドキュメントを読むのもそこそこに触ってみました。

チャットサービスの選択

Chatbot Consoleにアクセスするとチャットサービスを選択ができます。

次の選択肢があります。

  • Amazon Chime
  • Slack

Amazon Chime はオンライン会議・チャットサービスとのことです。
AWSにはこんなサービスもあるのかと思いつつ、選択するのはもちろん Slack です。

f:id:HeRo:20190729083055p:plain
チャットサービスの選択

Slackアプリケーションのインストール許可

Configure client ボタンをクリックして進むと、Slack に飛ばされて、Slack アプリケーションのインストール許可を求められます。

f:id:HeRo:20190729083155p:plain
Slackアプリのインストールダイアログ

ブラウザでログインしている Slack アカウントがあればそれが表示されます。 右上のプルダウンで別のアカウントを選択することも可能です。

許可するインストールされます。 Slack側のアプリリストにも次のように追加されています。

f:id:HeRo:20190729083244p:plain
Slackアプリに追加されている

チャネルの設定

インストールOKするとChatbotの設定に戻ります。 設定は3つのパートに分かれています。

まずは、Slack Channel の設定。

f:id:HeRo:20190729084005p:plain
Slack チャネルの設定

Private を選択すると Private channel ID を直接入力します。 Public を選択すると接続した Slack にあるチャネルのリストから送信先のチャネルを選択できます。

続いて、IAMロールの設定。

f:id:HeRo:20190729084039p:plain
IAMロールの設定

既存のも選択できますが、Create an IAM role using a template を選択すれば、必要な権限を持ったロールを作ってくれます。

最後にメッセージのソースとなる SNS(Simple Notification Service)のトピックの選択。

f:id:HeRo:20190729084102p:plain
SNSトピックの設定

ChatbotSNS のサブスクライバーの1つになるので、SNS のトピックを選択します。 既存のものからの選択になるので、適当なのがなければ予め作って置く必要あります。 複数のリージョンの複数のトピックを指定することも可能です。

Configure ボタンをクリックして設定完了です。

選択した SNS トピックをコンソールを確認すると、サブスクリプションに Chatbotのエンドポイントが追加されています。

f:id:HeRo:20190729084228p:plain
SNSトピックのサブスクリプション

テストメッセージ送信

とりあえず、疎通確認としてなにか送ってみようと 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インスタンスを実験用に作って負荷をかけてみることにしました。

作ったインスタンスには次のようなアラームを設定しました。

f:id:HeRo:20190729084430p:plain
Cloud Watch Alert

そして、stress コマンドで負荷をかけて見ると…。

来ました!

次のようなメッセージが Slack の設定したチャネルに届きました。

f:id:HeRo:20190729084508p:plain
Slackに送られたAlert通知

タイトル部分が該当する Cloud Watch Alert へのリンクになっていて、詳細を確認しやすくなっています。
グラフもついて、いまLambdaで自前で送っているメッセージより見やすいかも。

そして負荷をやめると次のメッセージが。

f:id:HeRo:20190729084538p:plain
Slackに送られたOK通知

あれ、こちらはちょっとグラフの内容がおかしいような。 ベータサービスだから?

まとめ

  • ChatbotSNS 経由で各種サービスの通知をSlackに送信できる
  • 特に CloudWatch AlertSlack に送信するのは簡単
  • 今は送信できるサービスが少ない

最初は SNS のどんなメッセージも送信できると思ったので、ちょっと期待通りではなかったですが、今後拡充されればもっと便利なサービスになるのではと思います。

参考

最後に

アクトインディではエンジニアを募集しています。 actindi.net


  1. AWS Chatbot自体はリージョンに属さいないグローバルサービスのようです。