はじめに
LambdaでPythonの外部ライブラリPillowを含めてデプロイしようとしたときにはまった話です。 調べてみると結構でてきますが、備忘録を兼ねて。
どんなミスをしたか
Macのターミナル上でpipを使いPillowをインストールし、zipで圧縮してデプロイパッケージ作成、デプロイしてテストを行うと

失敗してしまいました。 調べてみると、Pillowはインストール時にOSに合わせてビルドするそう。 LambdaはAmazon Linux上で動いている(参考)ので、Amazon Linux上でデプロイパッケージを作成しなければならないとのこと。
やり方
自分がやった方法になります。 EC2をAmazon Linuxでたてて、そこでデプロイパッケージを作成。 LambdaのランタイムはPython3.6にする必要があったため、Python3.6をインストール
$ sudo yum install python36
適当なディレクトリを作成して、デプロイしたいコード(lambda_function.pyとする)を置く。 そのディレクトリに移動し、以下のコマンドを実行してPillowをインストール。
$ python36 -m pip install pillow -t .
Pythonのオプションmで先程インストールしたPython3.6のモジュールのpipを使う。 pipのオプションtでインストール先を指定できるので、カレントディレクトリにインストール。 以下のようになります。
$ ls
lambda_function.py PIL Pillow-5.0.0.dist-info
あとはすべてまとめてzipで圧縮。
$ zip -r deploy.zip *
$ ls
lambda_function.py PIL Pillow-5.0.0.dist-info deploy.zip
デプロイパッケージ(deploy.zip)が完成。
まとめ
OS依存ライブラリが様々あるようなので、デプロイパッケージはAmazon Linux上で作成しましょう。 自分はEC2を立てましたが、DockerにAmazon Linux公式イメージがありますので、それを使っても良いかもしれません。
海津 純平