Lambdaのデプロイパッケージの制限(解凍後サイズ 250MB)を回避する方法について教えてください

質問・問題

Lambdaでは、解凍後サイズ 250MB を超えるzipファイル形式のデプロイパッケージはアップロードできない制限があると思いますが、この制約を回避する方法はありますでしょうか?

以下ドキュメントに、250MBの上限は「レイヤーやカスタムランタイムなど、アップロードするすべてのファイルに適用されます」との記載があり、Layers は利用できないようでした。

Lambda クォータ
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html

また、コンテナイメージでのアップロードではなく、zipファイルのデプロイパッケージアップロードにおける方法を検討しています。

Lambda コンテナイメージの作成
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images-create.html


回答・解決方法

概要:

Lambdaのデプロイパッケージのサイズ制約を回避する方法として、以下の方法が考えられます。

  • EFS を使用する方法
  • S3 に必要なファイルを保存し、関数から /tmp にダウンロードし使用する方法
  • 不要なライブラリ等を削除し、必要な最小限のデプロイパッケージを作成する方法

詳細:

Lambda コンテナイメージ以外の方法では、以下に記載の EFS を使用いただく方法が考えられます。

[Lambda で Amazon EFS を使用する]
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-efs.html

[新機能 – Lambda関数の共有ファイルシステム – Amazon Elastic File System for AWS Lambda]
https://aws.amazon.com/jp/blogs/news/new-a-shared-file-system-for-your-lambda-functions/

=== (抜粋)
LambdaのEFSは、コンソール、AWSコマンドラインインターフェイス(CLI)、AWS SDK、およびAWS サーバーレスアプリケーションモデル(SAM)を使用して構成できます。この機能により、大きなファイルを処理する必要があるデータ集約型のアプリケーションを構築できます。たとえば、1.5 GBのファイルを数行のコードで解凍したり、10 GBのJSONドキュメントを処理したりできます。 AWS Lambdaの250 MBパッケージデプロイメントサイズ制限より大きいライブラリまたはパッケージをロードして、新しい機械学習、データモデリング、財務分析、およびETLジョブシナリオを有効にすることもできます。
===

他には S3 に必要なファイルを保存し、関数から /tmp にダウンロードし使用する方法も考えられますが、上記 EFS を使用する方法がよりシンプルとなります。

また、不要なライブラリ等を削除いただき、必要な最小限のデプロイパッケージを作成いただく方法もございます。こちらの方法では関数の実行時にデプロイパッケージをダウンロードして解凍する時間の短縮にも繋がります。

[AWS Lambda 関数を使用するためのベストプラクティス]
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html#function-code

=== (抜粋)
 ・デプロイパッケージのサイズをランタイムに必要な最小限のサイズにします。これにより、呼び出しに先立ってデプロイパッケージをダウンロードして解凍する所要時間が短縮されます。Java または .NET Core で作成した関数の場合は、デプロイパッケージの一環として AWS SDK ライブラリ全体をアップロードしないようにします。代わりに、SDK のコンポーネントを必要に応じて選別するモジュール (DynamoDB、Amazon S3 SDK モジュール、Lambda コアライブラリなど) を使用します。
===

※ 上記内容は執筆時点でのAWSドキュメントや、AWSサポートへの問い合わせの回答に基づいたものとなっております。将来的な仕様変更やドキュメント修正等により変更となる可能性がございます。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください