share facebook facebook2 twitter menu hatena pocket slack

2015.12.14 MON

ラムダこりゃ(Amazon Lambda チュートリアル 4)〜 Lambda と Python で「赤い霊柩車シリーズ」の過去の作品名をTwitter につぶやかせる 〜

川原 洋平

WRITTEN BY川原 洋平

引き続き Lambda を触ってみたいと思います。

tl;dr

Python の勉強を兼ねて Wikipedia の「赤い霊柩車シリーズ」ページから過去の作品のタイトルを取得して作品名と放映年を Twitter に呟かせる bot を Lambda で作ってみた。

赤い霊柩車シリーズとは

Wikipedia より抜粋。

赤い霊柩車シリーズ』(あかいれいきゅうしゃシリーズ)は、フジテレビ系の2時間ドラマ「金曜プレミアム」(毎週金曜日21:00 – 22:52)で1992年から放送されているテレビドラマシリーズ。主演は片平なぎさ。(略)推理作家・山村美紗の作品「葬儀屋社長 石原明子シリーズ」を原作とする。片平なぎさの代表的作品であり、2012年までの29作の平均視聴率が17.0%という人気シリーズである。

片平なぎさもさることながら、脇役として山村美紗の娘、山村紅葉が出演しており、大村崑との掛け合いなどが楽しめる、サスペンスなのにあまり怖くなくて家族で楽しめる作品だと思う。

メモ

Lambda Function Python 版

github.com

以下、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 を利用したいので以下のように設定。
20151010203919

しかし、以下のようにエラー。

20151010095818

ん、東京リージョンではリソースが不足しているのかしら…ということで、ヴァージニア(US-EAST)で試したところ登録することが出来た。

つぶやき

20151010192013

緊張感のあるタイトルである。

20151010214857

ログも上記のように。

ということで…

Python で作成する Lambda Function

  • Lambda にアップロードする際の手順に慣れが必要(virtualenv というのを使うことも出来る)
  • ローカルのデバッグってどうするのか引き続き調べる必要がある

一日に一回

一日に一回だけ呟かせるようにした。

20151010204756

元記事は

ラムダこりゃ(Amazon Lambda チュートリアル 4)〜 Lambda と Python で「赤い霊柩車シリーズ」の過去の作品名をTwitter につぶやかせる 〜