ほとラボ

It works!

AWS Lambda で Bot フレームワークを作ってみたかった

ChatOps Advent Calendar 2015 22日目(遅刻)

あるとき「AWS Lambda で動く Bot フレームワークを作って Lamchan って名前でリリースしたらウケるんじゃね!?」と閃いたものの挫折した話。

(※ 〜chan という名前は Bot の名前として使われることが多い、...と思っている。少なくとも僕の周辺では多い。おそらく ikachan が元ネタだと思われる)

当時考えていたこと

Bot ってわざわざサーバに載せなくても、AWS Lambda に載せればもっと楽に低コストに運用できるんじゃないだろうか。

こんな感じ。(チャットツールが Slack の場合)

チャット上での1メッセージをひとつのイベントと捉えて、それを Lambda で処理するというシンプルなアイデア

なぜ挫折したか

「1メッセージ」を「1 HTTP リクエストというイベント」として扱うのって結構無理あるじゃん、って思ったから。

たとえば Slack でメッセージを処理する際に Incoming/Outgoing Webhooks を用いると、様々な制約があったり過剰にコストがかかってしまったりする。 Bot のような用途では本来は Real Time Messaging API を使うべきだが、これは WebSocket で接続しなければならなず Lambda で扱うためには結局 WebSocket サーバを立てなければならない。 そもそも HTTP はオーバーヘッドが大きく、こういう秒単位で通信が発生する用途で使用するのは間違ったやり方のように思う。

もし Lambda Function を直接叩けるサーバレス WebSocket クライアントみたいなサービスがあればいいが、 そんなニッチなものがあるはずがなく、結局サーバ立てて WebSocket するのが一番だよね、という結論に落ち着いた。

まとめ

t2.nano インスタンスが出て EC2 での Bot 運用も手軽になってきた し、Heroku は相変わらず少しクセはあるものの慣れれば超楽チンだし、無理にサーバレスとか夢見ずに Bot 運用したほうがいい気がした。

Lambda はもっと別の用途で活用しよう。