読者です 読者をやめる 読者になる 読者になる

■LINE BOT on AWS

技術

お疲れ様です、ししなみです 掲題の件についての解説になります。 本当は本当にiPad でやりたいところですが、pythonistaで python のソースをzipで固めてS3にUPする方法が現状わかっていないので、涙を飲んでmacでやります。

必要資材

  • AWSのアカウント

あるよね?

  • LINE のアカウント

まずPCからログインできるようにするためにはスマホが必要です、iPadだけではできません
スマホから事前にPCからログインできるようにして
LINE Developer > Messenger API からアカウントを作っておいてください。
https://developers.line.me の Messenger API のところにドキュメントがあるので(動画でもあります) みておくと吉。 なお ビジネスセンターのアカウントと Developerのアカウントが両方が必要です。

python と pipのインストール

$ brew install python
$ python --version
Python 2.7.10
$ which python
/usr/local/bin/python

デフォルトでは mac に pip が入っていないので、brew install python で pipを入れます。
which して /usr/local/bin になってれば成功

また、Lambdaは 2.7で動作するので、python2.7 であることを確認します。

pip がエラーを吐くので修正

http://sysop.hatenablog.com/entry/2017/02/05/231821

上記URLにある通り、pipコマンドが変なエラーを出してとまっちゃうので、.pydistutils.cfg を HOMEディレクトリに置きます。

$ touch ~/.pydistutils.cfg 
$ vi ~/.pydistutils.cfg 

[install]
prefix=

requests とソース の インストール

$ mkdir linebot
$ cd !*
$ wget https://raw.githubusercontent.com/sishinami/LINEBOTonAWSLambda/master/lambda_function.py
$ pip install requests -t .
$ zip -r linebot *

ししなみの GitHubから デフォルトソースを落としてください。 平文で書いているので、180秒ほどで中読んでください。

Lambda function の作成

f:id:sysop:20170207113443p:plain

microservice-http-endpoint-python
を選択(余談ですが、別にどれ選んでも最後はソース上書きするのでなんでもいいです)

f:id:sysop:20170207113539p:plain

APINameは任意で適当にどうぞ Secrity は LINE DeveloperからAPI KEYを入れる方法わかんないので Openで。 もし誰か、API Key入れる方法わかったら教えてください。

ソースのUP

namaは Cloudwatchlog で表示される名前になります。

Description は任意なので好き勝手つけましょう。

Code entry type を Upload a zip にして 先ほど作った zip を選択。

環境変数に ChannelAccessTokenの設定

環境変数に LINE の Channel Access Tokenが必要なので f:id:sysop:20170207162415p:plain

LINE Developer 画面から Channel Access Token をコピーして

Lambda Function のEnvironment variables に ACCESS_TOKENを設定してください。

f:id:sysop:20170207163514p:plain

他に、role 設定を求められますが、デフォルトで
lambda_basic_execution が存在しているはずなのでそれを使います。

それ以外はデフォルトでいいので Save > Create function

次の画面で表示される URLを今度は LINE Developer の WebHookに設定します

f:id:sysop:20170207163640p:plain f:id:sysop:20170207170253p:plain

以上、お疲れ様でした。

動かない時とかデバッグとか

CloudWatchLog に ログが出ますが、表示まで2分くらいかかります、のんびり待ちましょう。
あとストリームなので、AWSの機嫌次第で 複数まとめて出力されたり しなかったりします。

  • LINE Developer 画面で Verify しても 502 Bad Gateway が出る

ソースの 最後で response を print していますが、これを print(respose.text) に直してください
もし、Cloudwatch に表示されるエラーが invalid replay token なら 無視して実機確認しましょう、多分動いてます。