AWS Lambda と Chatbot の併用で柔軟な Ops を作る

この記事は チャットボット Advent Calendar 2016 - Qiita の 13 日目の記事として書きました。誰もいなかったんで。

つい先日 Codenize meetup でチャットボット反対派です!と言ったのですが、理由としては単純で、チャットボットに何でもやらせようとすると、チャットボットに実装が固まっていき、チャットボット自体が肥大化してメンテコストが増大するのが理由です。

いくつか小さなチャットボットに分割するのであれば、それもまぁそういう戦略かなと納得できるのです。個人的には小さなボットがうまく機能したほうが好きですし。とはいえ、エントリーポイントは分散してほしくないので、一つのボットが複数の機能を持ってほしくなります。

チャットボットは便利だから使いたい、でも実装を肥大化させたくない、よし、じゃあ実装を別の所にもたせて、呼び出しだけボットにやらせよう!ということで、手前味噌ではありますが、 ruboty-lambda のご紹介です。

ruboty から実装をパージして Lambda に寄せる

ruboty-lambda がやっていることはごく単純で、 ruboty から受け取ったファンクション名に、これまた同時に受け取った JSON をパラメータとしてパスしているだけです。

具体的なコマンドとしては、以下のようなイメージになります。

@robot lambda invoke function_name {"params":["any", "params"]}

無論、毎回こんな長いコマンド叩けるか!という場合であれば、 ruboty-alias なり、 ruboty-scoped_alias なりで別名を与えてあげてください。

もっと柔軟に alias する

ここまで来ると、全機能を alias で提供したくなってきたので、ちょっと試しに作ってみました。

ruboty-flexible_alias

ここまで来ると流石にやり過ぎ感が否めませんが……大体、エイリアスは KVS に保存されてしまうので、永続化どうするんだ問題とかあれとかこれとか……

とはいえ、 Flexible alias まで併用すると、別名にパラメータまで与えられるようになるので、入れるのは flexible_alias, lambda のみにして、すべての実装を AWS Lambda 側に寄せることも可能です。

今年作った ruboty プラグイン