AWS Lambda 上で pytz とか Python-msgpack 等の外部ライブラリを使用する方法です.
TL;DR
lambda_function.py と同じディレクトリ階層にライブラリのモジュール一式を
設置してまとめて ZIP するだけ
pip でカレントディレクトリにインストールする
例:
$ pip install pytz==2017.2 -d ./
pip install の -d オプションは続く指定ディレクトリにモジュールをダウンロードします.
上記コマンドを実行するとカレントディレクトリに,
- pytz
- pytz-2017.2.dist-info
が生成されます. この要領で必要なライブラリ一式用意します.
落とし穴
大体のモジュールはこの方法で用意できますが, 中には OS 依存のモジュールがあります.
(ujson 等)
Lambda が実行されるマシンの OS は AmazonLinux なので例えば MacOS 上で作成したモジュールは使用できません. AmazonLinux 上で pip install したモジュールである必要があります.
幸い AmazonLinux は Docker イメージが公開されていますので Docker コンテナ内で pip install すれば OK です.
https://hub.docker.com/_/amazonlinux/
Python や pip 等も含めて Dockerfile はこんな感じになりました.
https://gist.github.com/t-miya/fd90e5bd7602b915a05498ddfa4549d0
どれが OS 依存非依存のライブラリか判別するのは大変なので基本的に AmazonLinux 環境でモジュール生成するといいです.
SVC 管理する場合
lambda_function のソースコードのバージョン管理する際は AmazonLinux 上で各ライブラリの wheel を作成しておくとリポジトリの見通しがよくなります. さらに wheel になっていれば展開時の環境はなんでもよく, サイトからのダウンロードも不要なのでスクラップ & ビルドしやすくなります.