はじめに
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公式イメージがありますので、それを使っても良いかもしれません。
この記事を書いた人
- 2017年入社の新卒です。
最近書いた記事
- 2019.10.11Pythonのアンパックとタプル
- 2019.01.22JavaScript側でsubmitができない
- 2018.12.13「AWS Toolkit for PyCharm について」~ RecoChoku Tech Night #09 4社合同 AWS re:Invent参加レポート で登壇しました ~
- 2018.12.02シリコンバレー1日ツアーに参加してきました(前半)