AWSの話題を中心に、日々の業務やプログラミングの徒然を綴るエンジニアブログです。

HANDS LAB

HANDS LAB ENGINEERS BLOG

ハンズラボエンジニアブログ

ハンズラボ本棚の更新通知をSlackに流したい!

Pocket

Pocket

はじめまして。ハンズラボ歴3ヶ月、pythonista歴3日の倉嶋です。

ハンズラボでは技術書は経費で落ちますので、みんなドンドン買ってきます。
総務担当がポチポチGoogleスプレッドシートに蔵書登録していたのですが、登録が間に合わず、未登録の蔵書が散見されるようになりました。
解決のため、BooklogにWeb本棚を作りました。
BookLog

モバイルアプリからもバーコードで登録できて便利!各自で登録できる!
ついでに新規登録した蔵書をSlackに流したい!ということでBooklogのRSSフィードを使って作りました。
ハンズラボっぽい縛りは以下のとおりです。
* せっかくだからAWS使おう。新機能のLambdaのScheduledEventだ!
* Lambdaでpython使えるようになったし、pythonで書いてみよう!

・・・と勢いこんで作ってみたはいいものの、python+lambdaの落とし穴にハマるハマる。
* python書くの初めてで、標準ライブラリか外部ライブラリかがわからない。
* 外部ライブラリはzipアップロード時に含める必要あり。pipで落とすときに-tオプション使ってディレクトリ指定する。
* 「1時間前の時刻を取得したい」ところなんですがRSSの時刻表記をYYYYMMDDにしたり時間計算したりがうまくいかない・・・。
* Lambdaのpythonは2.7なので、UTF-8文字列は明示的にu’’。
* UTF-8文字列のURLエンコードでハマる。asciiじゃないよエラーいっぱい出て泣く。
* AWSコンソールでは日本語文字列使えないぽいので、zipで固めてuploadする。(Lambdaのコンソールでコード書いてsaveすると文字化けする。コメントもろとも)
* zipファイルアップロード時に「fileb://」ってつけないとNG。
aws lambda update-function-code --function-name check_booklog_tl --zip-file fileb://booklog2slack.zip
* アップロード時、本体のファイル名はlambda_function.py固定。
* def lambda_handler(event, context)がないと動かないのでローカルでのテスト時にいちいち書き換えないといけない。
* Scheduled Eventの登録で謎のエラー・・・いつの間にか登録できてたのでエラーの原因がわからん・・・。

半日くらいの見込みだったのですが80行のコードに2日位かかって、ようやく完成しました。
github

Booklog_Lambda_Slack_IF
おかげさまで社内ではそれなりに好評です。
反省点は、「公式ドキュメント、大事」「似たようなことやってる人を探すの、大事」です。
いきなりやりたいことをやる前に、公式のサンプルプロジェクトをやっておけば半分の時間で完成できた気がします。

ちなみに、シェルスクリプトで作った参考実装は1時間くらいでできました。Lambdaでbashが動いてくれれば・・・。

Pocket