PythonスクリプトをLambdaで実行できるようにデプロイしたいが、"Unable to import module 'lambda_function': No module named '*'"とが出てpip3でインストールしたモジュールが使えない。ぐぐってもあんまいいのは出てこなくて。Docker信者みたいなヤツの説明が出てくる。
Docker でシミュレートされた環境を使用して Lambda レイヤーを作成する (amazon.com)
python - Unable to import module 'lambda_function': No module named * - Stack Overflow
サクッと作るだけのスクリプトごときにこんな労力は無駄です。
ある程度Pythonでスクリプトが出来上がったら下記の3ステップでOK
1.pip3でインストールしたモジュール一覧を呼び出しそのモジュールをテキストに吐き出す。できたテキストの必要なモジュールだけを保存
pip3 freeze > requirements.txt
2.スクリプトソースの場所に移動し、その場所に再度モジュールをインストールする。
pip3 install --target ./package -r requirements.txt
3.ソースフォルダ上でZIPで固める
cd フォルダ移動
rm lambda_function.zip
zip -r lambda_function.zip .
これでモジュールも入った状態でlambda用のZIPができた。
あとは、デプロイするだけ。デプロイはAWS CLIを使えば楽。
aws lambda update-function-code --function-name test-lambda --zip-file fileb://lambda_function.zip --region ap-northeast-1
赤のファンクション名・リージョンは変更してください。
lambdaファンクションの環境変数の設定で、「PYTHONPATH」を追記する必要があります。
上記のようにpip3 installでターゲット指定したディレクトリ名を指定します。