Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

BoltとServerless Frameworkを使ってSlackチャットボットをAWS Lambdaで実行する

はじめに

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

手順

  1. Bolt入門ガイドに沿ってアプリを作成。
  2. seratch/serverless-slack-bolt-aws をテンプレートとしてアプリを作成。
  3. ngrokを使ってURLを生成、テスト。
  4. sls deployを使ってLambdaに公開。

1. Bolt入門ガイドに沿ってアプリを作成。

Bolt入門ガイドの手順に従って、Slackのアプリを新規作成します。
こちらの手順を完了すると、ローカルマシン上でボットを起動し、Slackチャンネルから応答させることができます。
上記手順ではngrokの利用方法について記載はないので、以下を参考にインストールしてください。

2. seratch/serverless-slack-bolt-aws をテンプレートとしてアプリを作成。

AWS Lambdaにコードをデプロイするために、Serverless Frameworkを使います。
npmを使ってServerless Frameworkをインストールします。

npm i -g serverless

seratch/serverless-slack-bolt-awsという便利なテンプレートが公開されていますので、こちらを使ってアプリを作成します。
以下の手順に従って、アプリのインストールとトークンの設定を行います。

上記手順で生成したhandler.jsApplication Logicというコメント箇所を、作成した自分のボットのコードで置き換えます。
.envファイルには、先の手順で使用したSLACK_SIGNING_SECRETSLACK_BOT_TOKENをそれぞれ設定ください。
AWS_ACCESS_KEY_IDAWS_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から運用しているサービスのデプロイなどもできると思います。
ぜひ参考いただければと思います。

参照

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?