🍤

LambdaとAurora Serverlessでユビキタス言語管理用のSlack Botを作ってみた

2022/02/16に公開

はじめに

チームに新しいメンバーが増えると、チームで利用されている言語の理解が難しいという声が毎回上がってきていました
共有フォルダにスプレッドシートで管理するSlackにチャンネルを作りそこに溜めていく という案が出されたものの、いつの間にかメンテナンスされなくなり、また新しいメンバーが入って来た時に同じ問題が掘り起こされるという状態でした
そんな中で、こちらの記事を見つけ、自分のいるチームでもやってみようと思ったのがきっかけです
また、BoltやAurora Serverlessを勉強する良い機会だなと思ったのもモチベーションに繋がりました

できたもの

Slackのコマンドとして呼び出す

存在しないキーワードの場合は登録ボタンが表示されます

キーワードの登録用のモーダルの表示

登録完了

登録したキーワードの場合は、編集と削除ができます

あいまい検索にも対応しています

設計図

全体設計

利用した主な技術

  • Bolt
    • Slack API を使いやすくするための Node.js フレームワーク
  • serverless-express
    • Boltからリクエストを良しなに吸収してくれるミドルウェア(Lambda上で動かしています)
  • Serverless Stack
    • IaCツール。CDKのラッパーで、ローカル環境での開発に便利。
  • Aurora Serverless
    • リクエストが来ない時は自動でインスタンスを一時停止してくれるので、コスト面でGood

Serverless Stackを利用したデプロイ

git clone https://github.com/tabio/slack-bot-ubiquitous.git
cd slack-bot-ubiquitous
npm install
npx sst deploy # AWSの設定を事前に行っておく必要あり

Slackアプリを使うための準備

Boltを利用するためにトークンやコマンド利用設定が必要になります

Signing Secretの取得

Basic InformationのApp Credentialsの中にあります

Bot User OAuth Token

OAuth & Permissionsの中にあります

SlackからAPI Gatewayにリクエストできるようにする

API Gatewayのエンドポイントを入力してSlackとBoltがやり取りできるようにします

Interactivity & Shortcuts

Event Subscriptions

DBの準備

Aurora ServerlessへはAWS Console -> RDS -> クエリエディタ を使って接続します

ユビキタス言語登録用のテーブルを作成します
 

おわりに

AWS環境上で動くSlackアプリを作成することができました
Slack上での設定が色々あり大変だったこともあり、今回備忘録がてら記事化してみました
気になるところとしては、Aurora Serverlessを利用しているため、リクエストが無いとDBが止まってしまいます
そのため、使いたい時に直ぐ使うことができない場合があります
そこは、実際に運用してみてRDSのインスタンスに切り替えるか検討してみたいと思います

その他

こちらにソースコードをおいておきましたので良かったら見てやってください🙏

Discussion