AWS Lambda上でpythonのサードパーティライブラリを動かす

AWS Lambda上でpythonサードパーティライブラリを動作させるには、必要なライブラリをzipにまとめてLambdaにアップロードして、レイヤーとしてLambda関数に追加する必要がある。

検索するとヒットする情報では、単純に pip -t install でライブラリをインストールしてまとめているものが多いが、この方法ではC言語等のOS依存コードが入ったライブラリがLambda上で動作しないため、実行時に以下のようなエラーが発生する。

Unable to import module 'lambda_function': No module named 'pydantic_core._pydantic_core'

Lambdaの実行環境と異なる環境でzipを作成する場合は以下の手順でzipを作成する。

docs.aws.amazon.com

AWS Lambdaの環境

手順

  1. 適当なディレクトリ内で以下を実行してpythonディレクトリ以下に必要なライブラリをインストールする。
    <package_name>はインストールするライブラリ名を指定
    ※Lambdaの動作環境がarm64の場合は--platformmanylinux2014_aarch64に変更
pip install \
--platform manylinux2014_x86_64 \
--target=python \
--implementation cp \
--python-version 3.13 \
--only-binary=:all: --upgrade \ 
<package_name>
  1. pythonディレクトリをzipする。zip内で最上位のディレクトリがpythonディレクトリになるようにすること。

  2. 作成したzipをLambdaにアップロードする。
    Lambda上で「レイヤー」を選択し、「レイヤーを作成」してzipをアップロードする。アーキテクチャとランタイムは手順1で指定した設定に合わせること。

  3. 作成したレイヤーを関数にセットする。

以上でzip内のライブラリがLambda内で使用できるようになる。