Lambda にデプロイしたら容量関連でエラーが出ました。
エラー
An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation: Request must be smaller than 70167211 bytes for the UpdateFunctionCode operation zsh: exit 1
原因
このエラーは、AWS Lambda にデプロイしようとしているコードが、UpdateFunctionCode の最大許容サイズ(約70MB)を超えているために発生しています。
解決策
デプロイするパッケージをスリム化
Lambdaのコードサイズを減らすために、不要なファイルを削除したり、軽量なライブラリを使用したりします。
requirements.txt の見直し
- 使用していないライブラリを削除
- 軽量版のライブラリに変更(例: numpy → numpy-lite)
「pip install」 の際に 「--no-cache-dir」 を使用
「--no-cache-dir」 オプションで不要なキャッシュを含めないようにします。
pip install -r requirements.txt -t . --no-cache-dir
「.zip」 に含める不要なファイルを削除
例えば、「.git/」 や 「__pycache__/」 などを除外してパッケージングします。
zip -r lambda_function.zip . -x "*.git*" "*__pycache__*"
Lambda レイヤーを活用
ライブラリが大きくなりすぎる場合、Lambda レイヤーを利用して別途管理できます。
Lambdaレイヤーを作成
mkdir python pip install -r requirements.txt -t python/ zip -r layer.zip python
次に、AWS CLI でレイヤーを作成します。
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12
Lambda の「レイヤー」セクションでこのレイヤーを追加すれば、デプロイする ZIP サイズを減らせます。
Lambdaレイヤーを作成した後、それを Lambda 関数に紐づけるには以下のコマンドを実行します。
aws lambda update-function-configuration \
--function-name myFunction \
--layers arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1
S3 経由でデプロイ
Lambda の直接アップロードの制限(50MBのコード、250MBのデプロイパッケージ)を超える場合、S3 にアップロードしてから Lambda にデプロイできます。
S3 にアップロード
aws s3 cp lambda_function.zip s3://your-bucket-name/
S3 から Lambda へデプロイ
aws lambda update-function-code --function-name myFunction \
--s3-bucket your-bucket-name --s3-key lambda_function.zip
コンテナ(Docker)を使う
Lambda は コンテナイメージ でもデプロイ可能です。もし、コードが大きくなりすぎるなら、Docker を活用するのも選択肢です。
docker build -t my-lambda . docker tag my-lambda:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-lambda:latest docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/my-lambda:latest
Lambda のランタイムを「コンテナイメージ」に設定して使います。