はじめに
AWS LambdaとBoltフレームワークを使って、Slackのチャットボットを作成しました。
Bolt入門ガイドの手順では、ngrok
を使ってローカルPC上にボットを起動します。
実際の運用ではローカルPC上ではなくサーバ上にアプリを起動すると思いますが、AWS環境へのデプロイ方法の詳細は記載されていないため、備忘録も兼ねて投稿します。
各種ツールやライブラリの概要
名称 | 概要 |
---|---|
Slack | チャットツール。アプリを作成しカスタマイズできる。 |
Bolt | Slackアプリ開発のためのフレームワーク。 |
AWS Lambda | AWSが提供するサーバレス環境。 |
Serverless Framework | AWS Lambdaを始めとしたサーバレス環境にデプロイするためのフレームワーク。 |
ngrok | ローカル環境をhttpsで公開できるサービス。開発環境として利用。 |
今回実行した環境
項目 | バージョン |
---|---|
OS | macOS Catalina |
nodejs | v10.16.0 |
@slack/bolt | 2.0.1 |
Serverless Framework | 1.68.0 |
手順
- Bolt入門ガイドに沿ってアプリを作成。
-
seratch/serverless-slack-bolt-aws
をテンプレートとしてアプリを作成。 - ngrokを使ってURLを生成、テスト。
- sls deployを使ってLambdaに公開。
1. Bolt入門ガイドに沿ってアプリを作成。
Bolt入門ガイドの手順に従って、Slackのアプリを新規作成します。
こちらの手順を完了すると、ローカルマシン上でボットを起動し、Slackチャンネルから応答させることができます。
上記手順ではngrok
の利用方法について記載はないので、以下を参考にインストールしてください。
- ngrokが便利すぎる - https://qiita.com/mininobu/items/b45dbc70faedf30f484e
2. seratch/serverless-slack-bolt-aws
をテンプレートとしてアプリを作成。
AWS Lambdaにコードをデプロイするために、Serverless Frameworkを使います。
npmを使ってServerless Frameworkをインストールします。
npm i -g serverless
seratch/serverless-slack-bolt-aws
という便利なテンプレートが公開されていますので、こちらを使ってアプリを作成します。
以下の手順に従って、アプリのインストールとトークンの設定を行います。
上記手順で生成したhandler.js
のApplication Logic
というコメント箇所を、作成した自分のボットのコードで置き換えます。
.env
ファイルには、先の手順で使用したSLACK_SIGNING_SECRET
、SLACK_BOT_TOKEN
をそれぞれ設定ください。
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
は、デプロイ先のAWSアカウントで作成したIAMのものを利用します。
ngrokを使ってURLを生成、テスト。
以下のコマンドでローカルPCでボットを起動し確認できます。
$ sls offline
起動後、先の手順と同じようにngrok
を使ってURLを生成しします。
$ ngrok http 3000
SlackアプリのEvent Subscriptions
メニューにあるRequest URL
に生成したURLを入力します。
URLの末尾には/dev/slack/events
を加えてください。
例えば以下のようなURLになります。
https://xxxxxxxx.ngrok.io/dev/slack/events
sls deployを使ってLambdaに公開。
以下コマンドでAWS環境にデプロイできます。
$ sls deploy
URLが生成されますので、ngrok
の時と同様、Request URL
に入力します。
Slackのチャンネルでボットが応答すれば設定完了です。
以上、Boltフレームワークで作成したSlackチャットボットをAWSにデプロイする方法でした。
現在は、個人的な利用目的でしかチャットボットを運用していませんが、AWS CodePipelineなどと組み合わせれば、Slackから運用しているサービスのデプロイなどもできると思います。
ぜひ参考いただければと思います。
参照
- Slack Bolt 入門ガイド - https://slack.dev/bolt-js/ja-jp/tutorial/getting-started
- Serverless Framework の Bolt 用テンプレート - https://github.com/seratch/serverless-slack-bolt-aws