- zipをローカルで作成し、それをAWSコンソール上でアップロードする方法です
- LambdaのランタイムはPythonを想定しています
-
pip
でインストールできるライブラリが対象です - Lambdaレイヤーの詳しい説明は省きます
- 参考元(AWS公式): https://repost.aws/ja/knowledge-center/lambda-layer-simulated-docker
前提
- ローカルPC上でdockerコマンドが実行できること
手順
1. ディレクトリ作成
- ローカルPCのターミナルで好きな場所にディレクトリを作り、その中に移動
2. requirements.txt作成
-
requirements.txt
を作成し、レイヤーにしたいライブラリを記載する
(例)pandasのver.2.2.3のレイヤーを作成したい場合
requirements.txt
pandas==2.2.3
3. ライブラリをローカルに作成
- 下記コマンドを実行
docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.13" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.13/site-packages/; exit"
- 実行が終わると、「python」というディレクトリが作られており、その中にライブラリが入っているはずです
補足
- 上記はPython3.13の場合です。Lambda関数のPythonのバージョンに合わせて、上記コマンドの2箇所の数字を変えてください
- platformを指定することもできます
-
x86_64
で作成したい場合は下記のように--platform=linux/x86_64
をつけます
-
docker run --platform=linux/x86_64 -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.13" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.13/site-packages/; exit"
- platformはLambda関数の「アーキテクチャ」に合わせる必要があります
- 特に、対象のLambda関数のアーキテクチャが
x86_64
かつ、M2以降のAppleシリコンのMacを使用している方は、こちらをつけないとLambda実行時にエラーになると思います
- 特に、対象のLambda関数のアーキテクチャが
- Lambda関数のアーキテクチャは、その関数のページの下の方に書いてあります
4. zipにまとめる
- 下記コマンドを実行
zip -r mypythonlibs.zip python > /dev/null
- 「mypythonlibs.zip」というファイルが生成されているはずです
5. AWSコンソールでレイヤーを作成
- AWSコンソールから、「Lambda」→「レイヤー」に移動し、「レイヤーの作成」ボタンを押す
- 以下のように入力し、「アップロード」ボタンから先ほど作成した
mypythonlibs.zip
をアップロードする- ※mypythonlibs.zipが10MBを超える場合は、「Amazon S3 からファイルをアップロードする」の方式にしてください
- 一旦S3にzipをアップロードし、そのパスを指定する、という流れです
- ※mypythonlibs.zipが10MBを超える場合は、「Amazon S3 からファイルをアップロードする」の方式にしてください
- 「説明」のところにライブラリのバージョンを書いておかないと、バージョンが非常に追いづらくなるため、画像のように書くことをお勧めします
- 「作成」ボタンを押して完了です
補足
- requirements.txtに複数のライブラリを書いて作成することもできます
requirements.txt
requests==2.32.3
jpholiday==0.1.10
- 一つのLambda関数に追加できるLambdaレイヤーは個数制限があるので、複数の軽量なライブラリを一つのレイヤーにまとめて、頑張って切り詰めなければいけない場面もあるでしょう……
- ※個数に余裕がある場合は、まとめない方が管理しやすいと思います