📊

Redash Slack botをAWS Lambdaで動かすようにしましたよ

2021/10/13に公開

レンティオ株式会社でエンジニアをしているKIMIです。

先日、社内で利用しているRedash Slack bot (Slack にRedash のDashboard, Query URL を投稿するとグラフ, クエリ結果をキャプチャして返してくれるやつ) をAWS Lambda で動かすようにしたのですが、Redash, Slack Bot for Redash にはものすごく感謝していて、我々も微力ながら貢献できればなということで成果をシェアしたいと思います。

そのままでは動かないと思いますが、参考になる部分が少しでもあればうれしいです。
https://github.com/rentio/redashbot-serverless

なぜLambda なのか

レンティオではBIツールにOSS Redash のDocker を使っていて、Slack との連携はSlack Bot for Redash のV1 を長い間利用していました。

両方ともAmazon ECS で運用していたのですがSlack bot が安定稼働しないことが徐々に目立ち始め、連絡をもらうとAWS Console から再起動するということをやっていました。

ちゃんと調べたわけではないのですが、

  • V1 はRTM API で動いていてWebSocket (+我々の使い方)に問題がある?
  • Slack Bot はmicro インスタンスで運用していたのでパワー不足?

あたりの原因が当時考えられてとりあえず、Bolt で書き直されたSlack Bot for Redash のV2 にバージョンアップをやり始めたのですが、Events API になったのならLambda で動かせるのでは🤔
そのほうがお安いのでは💴

という結論に至り、Bolt で書き直しつつ自分たちでLambda に持っていってみよう!みたいな流れで開発がスタートしました。

工夫したポイント

Lambda 化するにあたり次のことを対応しました。これだけに限らずAWS Lambda でSlack bot を作るのに対応が必要になるところでしょうか。

  • 3秒以内にレスポンスを返さないとSlack がリトライしてくるので、最初のリクエストだけ受け取るようにする
  • Lambda Layer を使う設定VPC 内のリソースにアクセスする ための設定Serverless Framework を使うことで簡潔に対応できた
  • スクショを撮るためのPlaywright のサイズが大きいので node_modules をLambda Layer に展開しデプロイパッケージと分離することでコンソールエディタ が使えるまでサイズダウンできた

    AWS Lambda コンソールのコードエディタを使用すると、Lambda 関数のコードを記述し、テストして、実行結果を表示できます。コードエディタは、Node.js や Python など、コンパイルを必要としない言語をサポートしています。コードエディタでは、.zip アーカイブのデプロイパッケージのみをサポートしますが、展開パッケージのサイズは 3 MB 未満にする必要があります。

今後の課題

  • ローカルでのテスト手法がいまいち固まっていないのでなんとかしたい
  • AWS SAM を使うのがよさげなので試してみたいところ
  • そのほかにもいろいろあるかもしれませんがPull Request 歓迎です!

採用情報

レンティオでは絶賛、エンジニアを募集しています!
https://www.wantedly.com/companies/rentio

Discussion