引き続き Lambda を触ってみたいと思います。
tl;dr
Python の勉強を兼ねて Wikipedia の「赤い霊柩車シリーズ」ページから過去の作品のタイトルを取得して作品名と放映年を Twitter に呟かせる bot を Lambda で作ってみた。
赤い霊柩車シリーズとは
Wikipedia より抜粋。
『赤い霊柩車シリーズ』(あかいれいきゅうしゃシリーズ)は、フジテレビ系の2時間ドラマ「金曜プレミアム」(毎週金曜日21:00 - 22:52)で1992年から放送されているテレビドラマシリーズ。主演は片平なぎさ。(略)推理作家・山村美紗の作品「葬儀屋社長 石原明子シリーズ」を原作とする。片平なぎさの代表的作品であり、2012年までの29作の平均視聴率が17.0%という人気シリーズである。
片平なぎさもさることながら、脇役として山村美紗の娘、山村紅葉が出演しており、大村崑との掛け合いなどが楽しめる、サスペンスなのにあまり怖くなくて家族で楽しめる作品だと思う。
メモ
Lambda Function Python 版
以下、Function を作成するにあたってのメモ。
- HTML の解析には BeautifulSoup というモジュールを利用することで簡単に HTML を解析することが出来た
- ConfigParser が便利だけど
"
や'
までも展開されるので注意する - コメント行が日本語だと Lambda 上で実行すると怒られたので
# -*- coding: utf-8 -*-
を追加
あと、ローカルで実行している時には気づかなったが Lambda 上で実行する場合に変数を雑に設定していると怒られた。
# JSON を解析
json = json.loads(htmldata.read())
上記のように書いていると...
UnboundLocalError: local variable 'json' referenced before assignment
上記のようなエラーで怒られてれしまう。
パッケージング
作成した Function をアップロードするにあたって外部モジュールを利用している場合にはあらかじめダウンロードしておいて Function のスクリプトと合わせて ZIP で固める必要がある。ドキュメントに従って以下のように固めるテンプルした。
# MacOS X 環境で homebrew でインストールした Python を利用している場合には必要 % cat << EOT >> ~/.pydistutils.cfg [install] prefix= EOT # パッケージ用のディレクトリを作成 % mkdir lambda-korya-twitter-akaireikyusha # ディレクトリ以下に必要なモジュールをインストール % pip install BeautifulSoup - t lambda-korya-twitter-akaireikyusha % pip install twitter - t lambda-korya-twitter-akaireikyusha # Function もディレクトリに含める % ls -l lambda-korya-twitter-akaireikyusha/lambda_function.py -rwxr-xr-x 1 kappa staff 1736 Oct 10 19:09 lambda-korya-twitter-akaireikyusha/lambda_function.py # zip で固める % cd lambda-korya-twitter-akaireikyusha % zip -r your_function.zip * # 消しておく % rm -f ~/.pydistutils.cfg
create-function
以下のように Lambda Function を作成する。
aws lambda --region us-east-1 \ create-function \ --function-name akai-reikyusha \ --runtime python2.7 \ --role arn:aws:iam::1234567890123:role/lambda_basic_execution \ --handler lambda_function.lambda_handler \ --timeout 10 \ --zip-file fileb://your_function.zip
update-function-code
以下のようにデバッグした Function をアップロード、デバッグ、アップロードを繰り返す...。
# アップロード % aws lambda --region us-east-1 update-function-code --function-name akai-reikyusha --zip-file fileb://your_function.zip
Scheduled event
前の記事と同様に Scheduled event を利用したいので以下のように設定。
しかし、以下のようにエラー。
ん、東京リージョンではリソースが不足しているのかしら...ということで、ヴァージニア(US-EAST)で試したところ登録することが出来た。
つぶやき
緊張感のあるタイトルである。
ログも上記のように。
ということで...
Python で作成する Lambda Function
- Lambda にアップロードする際の手順に慣れが必要(virtualenv というのを使うことも出来る)
- ローカルのデバッグってどうするのか引き続き調べる必要がある
一日に一回
一日に一回だけ呟かせるようにした。