AWS Lambdaは便利ですが、pythonモジュールを使うにはamazon linux上でpipしたモジュールが必要になるのでそのZIPファイルの作り方を紹介する。
0 準備:Lambdaのpythonバージョンを確認しておく
import subprocess
def lambda_handler(event, context):
cmd = "python -V"
print(subprocess.check_output(cmd.split()))
2019/03/07現在のpython3.6のバージョンは 3.6.8
1. docker pull amazonlinux
でamazonlinuxのイメージファイルを持ってくる
2. docker run -it amazonlinux bin/bash
3. コンテナ内での操作
コンテナ内でやることは下記3つ
- python3.6.8を使えるようにする
- pip で必要モジュールをインストール
- zipで固める
yum -y groupinstall 'Development tools'
yum -y install openssl-devel sqlite-devel
mkdir ~/src
cd ~/src
yum -y install wget
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
tar zxvf Python-3.6.8.tgz
cd Python-3.6.8
./configure --prefix=$HOME/local/myPython-3.6.8
make
make install
curl -kL https://bootstrap.pypa.io/get-pip.py | python
pip install --upgrade virtualenv
virtualenv --python $HOME/local/myPython-3.6.8/bin/python3.6 $HOME/py368
source $HOME/py368/bin/activate
cd
mkdir python
cd python
pip install pandas -t .
zip -r modules.zip python
タブをもう一枚開いて
docker ps
でコンテナIDを確認して
docker cp コンテナID:root/modules.zip modules.zip
すれば出来上がり!
ZIPはS3に置いてダウンロードして使ったり、軽めのモジュールならlambda_handler.pyと一緒に固めて直接lambdaに放り込むのもアリ。
感想
AWS側で主要モジュールぐらいは用意してもよいのでは?
Layerとかで選べて、 scikit learn, pandas, numpyくらいはあったら楽。