1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

パソナX-TECHAdvent Calendar 2024

Day 5

【Mac】Dockerを使ったLambdaレイヤーの作り方(Python版)

Last updated at Posted at 2024-12-05
  • 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関数のアーキテクチャは、その関数のページの下の方に書いてあります
    スクリーンショット 2024-12-05 14.32.48.png

4. zipにまとめる

  • 下記コマンドを実行
zip -r mypythonlibs.zip python > /dev/null
  • 「mypythonlibs.zip」というファイルが生成されているはずです

5. AWSコンソールでレイヤーを作成

  • AWSコンソールから、「Lambda」→「レイヤー」に移動し、「レイヤーの作成」ボタンを押す
  • 以下のように入力し、「アップロード」ボタンから先ほど作成したmypythonlibs.zipをアップロードする
    • ※mypythonlibs.zipが10MBを超える場合は、「Amazon S3 からファイルをアップロードする」の方式にしてください
      • 一旦S3にzipをアップロードし、そのパスを指定する、という流れです

スクリーンショット 2024-12-05 16.03.10.png

  • 説明」のところにライブラリのバージョンを書いておかないと、バージョンが非常に追いづらくなるため、画像のように書くことをお勧めします
  • 「作成」ボタンを押して完了です

補足

  • requirements.txtに複数のライブラリを書いて作成することもできます
requirements.txt
requests==2.32.3
jpholiday==0.1.10
  • 一つのLambda関数に追加できるLambdaレイヤーは個数制限があるので、複数の軽量なライブラリを一つのレイヤーにまとめて、頑張って切り詰めなければいけない場面もあるでしょう……
    • ※個数に余裕がある場合は、まとめない方が管理しやすいと思います
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?