【Python】AWS Lambda簡単デプロイ方法 | スクラムとは 仕事が進まなく技術力もないリーダーのごっこ遊び

Python信者とDocker信者はイコールなのかもしれない。

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」を追記する必要があります。

PYTHONPATH

上記のようにpip3 installでターゲット指定したディレクトリ名を指定します。