Lambda のコードを依存関係込でデプロイするには、すべてをまとめてzipファイルに格納する必要がある。 詳しくはこちら https://docs.aws.amazon.com/lambda/latest/dg/python-package.html
以下のようなファイル構成で、main.pyがhandlerのコードを含む。
.
├── main.py
└── requirements.txt
$ cat requirements.txt
boto3==1.34.58 ; python_version >= "3.12" and python_version < "4.0"
botocore==1.34.58 ; python_version >= "3.12" and python_version < "4.0"
zipファイルを作成
ライブラリの階層に注意してzipにする。 zipファイルのルートにライブラリが配置されるようにする。
## 依存関係を `package`(名前はなんでもいい) ディレクトリにインストールする
$ mkdir -p package
$ pip install -r requirements.txt -t ./package
## rootにインストール済みライブラリを含むzipファイルを作成する
$ cd package
$ zip -r ../my_deployment_package.zip .
## zipファイルのrootに自分のコードを追加する
$ cd ../
$ zip my_deployment_package.zip main.py
$ unzip -t my_deployment_package.zip
......
testing: boto3/ OK
testing: boto3/s3/ OK
testing: boto3/s3/constants.py OK
testing: boto3/s3/__init__.py OK
testing: main.py
zipファイルをアップロード
$ aws lambda create-function --function-name ${FUNCTION_NAME} --runtime python3.12 --handler main.lambda_handler --role arn:aws:iam::000000000000:role/myrole --zip-file fileb://my_deployment_package.zip
# 更新
$ aws lambda update-function-code --function-name ${FUNCTION_NAME} --zip-file fileb://my_deployment_package.zip