35
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python + AWS Lambda + API GatewayでLINE BOT

Last updated at Posted at 2016-10-23

title.png

API Gateway + AWS Lambdaで遊ぶために、LINE BOTを作っていたので紹介。
LINE BOTの作り方とかは、公式のドキュメントやPythonのSDKが充実しているので省きます。

ソースコードは、Githubで公開してるのでよければ参考にしてください。

機能一覧

実装済みの機能

newsweather コマンドは話のネタにいいらしく、知り合いが実際にグループで使ってくれているらしい。
あと意外と choice コマンドも結構使われている。

機能 様子
Greeting greeting.png
Choice choice.png
Shuffle shuffle.png
Weather weather.png
News news.png

ニュースは最初Yahoo NEWSのRSSからとっていたのですが、Google NEWSはサムネイル画像がとれるものがあったため、置き換えました。

やってみたいこと

  • 呼ばれた回数とかも、記録して可視化できると面白いかも
  • 日報をLINEで管理してみたい
    • Slackよりもスマホからサッと開ける
    • これもどこかで見れるといいかも

こういうのあれば、便利そうっていうのがあれば、コメントとかお待ちしてます。

PythonのServerless Framework

ここからはちょっと技術的な話。
Lambdaだけならフレームワークは使わなくてもAWS CLIから簡単に扱えるのですが、API Gatewayの方はAWS CLIで操作するのがかなり大変です。まだブラウザでAWSのWebサイトを開いて手動で操作したほうが簡単かなという印象でした。
エンドポイントが増えてくると、API Gatewayの設定をうまくやってくれるフレームワークが無いと厳しいです。

調べてみたら、Pythonで人気のServerless Frameworkは2つあります。

Zappa

最初はZappaのコードを見てみたのですが、API GatewayからLambdaに渡されるEventをWSGI Environに変換していて、FlaskやDjangoのようなWSGIフレームワークが動かせます。あとはデプロイ時に各フレームワークのURL定義からAWS CloudFormation用のファイルを生成して、API Gatewayの設定をやってくれているみたいです。

Chalice

Chaliceの方はZappaとは違ってWSGIに変換せず、API Gatewayに特化しています。 無駄なことしていないだけあって、ソースコードも分かりやすいですね。 Zappaの場合は、Flaskの機能でもAPI Gatewayを通して本当に動くのか考えないといけませんが、chaliceのドキュメンテーションに書いてある機能はちゃんと動く安心感もありますね。

今回はChaliceを採用してみましたが、こちらはコードもシンプルでかなり扱いやすいです。

まとめ

  • LINE BOTつくってみた
  • LINE BOTの機能、こういうのあれば便利そうとかあればコメントとかください
  • chaliceとてもいい
  • API GatewayもJSONのWeb APIとかならサッと作れたりする
    • リクエストやレスポンスのpayloadが10MBまでという制約があるのでファイル・画像のアップロードとかしたい場合は気をつけてください

おわり

35
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?