Lambdaのデプロイではまった話

AWS, Lambda, Python

はじめに

LambdaでPythonの外部ライブラリPillowを含めてデプロイしようとしたときにはまった話です。
調べてみると結構でてきますが、備忘録を兼ねて。

どんなミスをしたか

Macのターミナル上でpipを使いPillowをインストールし、zipで圧縮してデプロイパッケージ作成、デプロイしてテストを行うと
image-20180328033724794.png
失敗してしまいました。
調べてみると、Pillowはインストール時にOSに合わせてビルドするそう。
LambdaはAmazon Linux上で動いている(参考)ので、Amazon Linux上でデプロイパッケージを作成しなければならないとのこと。

やり方

自分がやった方法になります。
EC2をAmazon Linuxでたてて、そこでデプロイパッケージを作成。
LambdaのランタイムはPython3.6にする必要があったため、Python3.6をインストール

適当なディレクトリを作成して、デプロイしたいコード(lambda_function.pyとする)を置く。
そのディレクトリに移動し、以下のコマンドを実行してPillowをインストール。

Pythonのオプションmで先程インストールしたPython3.6のモジュールのpipを使う。
pipのオプションtでインストール先を指定できるので、カレントディレクトリにインストール。
以下のようになります。

あとはすべてまとめてzipで圧縮。

デプロイパッケージ(deploy.zip)が完成。

まとめ

OS依存ライブラリが様々あるようなので、デプロイパッケージはAmazon Linux上で作成しましょう。
自分はEC2を立てましたが、DockerにAmazon Linux公式イメージがありますので、それを使っても良いかもしれません。

AWS, Lambda, Python