AWS 「APIGateway」と「Lambda」でサーバレス「slack bot」を作る
- 2016.10.07
- Webサイト
- AWS, Lambda, API Gateway, slack bot, slack, Outgoing Webhook, Incoming Webhook

こんにちは、
「決戦は金曜日」、、、ではなく、
「日曜日はプレゼン」な、ヤマです。
タイトル通り、
AWSの「API Gateway」と「Lambda」を使って、社内専用の「slack bot」を
作ってみたいと思ってます。
サーバレスで。
すべての手順を書くと、ものすごく面倒なので、いつものように概要だけ。
ハショリマス。
slackは既にアカウントをお持ちという前提で。
処理の全体は以下のようになります。
以下、作成手順
1)Outgoing Webhook を登録します
Outgoing Webhookには、ボットを呼び出すキーワードを「Trigger Words」に設定します。
API Gatewayを呼び出すためのURLを指定します。(後から作るAPI GatewayのエンドポイントURLを指定してください)
2)Incoming Webhook を登録します
Incoming Webhookでは、Lambda(AWS)から投稿するためのURLが生成されますので、
作って控えておきましょう。
3)Lambdaを作成します
node.jsを触った事がないので、ここは下記の記事を参考にさせて頂きました。
http://qiita.com/tmtysk/items/7161b11e20ac5e2dfc01
投稿先は、slackのIncomingWebhookで生成されたURLです。
4)API Gatewayを登録します
「APIを作成」から作成します。
POSTメソッドを作成し、「メソッドリクエスト」内の「URLクエリ文字列パラメータ」に、
OutgoingWebhookで渡されるパラメータ群を設定します。
詳しくは、OutgoingWebhook画面内にある「Outgoing Payload and Responses」をexpandすると
表示されますので、そちらをご覧ください。
続いて、「統合リクエスト」内にある、本文テンプレートマッピングを編集します。
slackからPOSTされる「x-www-form-urlencoded」を、Lambdaで処理する「JSON」へマッピングするための処理です。
こちらの記事が参考になりそうです。
http://tech.feedforce.jp/aws-lambda.html
最後に、デプロイしてエンドポイントURLが生成されますので、OutgoingWebhookのURLで指定します。
えらいハショッテしまいました。。。(・ω・;)
slackに対して、特定の文字列を投稿すると、OutgoingWebhook(slack)が反応して、APIGateway(AWS)を呼び出し、
APIGateway(AWS)はOutgoingWebhook(slack)でPOSTされるデータをうまいこと、JSONに変換して、Lambda(AWS)へ渡します。
Lambda(AWS)でデータを受け取り、好きなように処理したあと、
IncomingWebhook(slack)に対して投稿すれば、ボットからslackへ自動的に投稿される、
という仕組みです。
Lambdaの裏では、node.jsが動いています。
Java8やPythonも動きますので、
完全にサーバレスなWEBアプリが作れちゃいます。
もちろんさらにその裏ではDBサービスとの連携もできます(たぶん。。。)
Lambdaでは、リクエスト回数と、実行時間、処理に割り当てるメモリによって
料金が変わるようです。
わざわざサーバを立てず、お手軽に連携アプリを作るなら、選択肢の一つとしていかがでしょうか。
ちなみに今回は、AWSの色んなサービスを使ってみようと思い、
勉強も兼ねて作っています。
間違いなどありましたら、ぜひご指摘ください!