Lambdaには予めpip installインストールされているライブラリがある。 しかしインストールされておらずimportでエラーになるライブラリもある。 それらを入れる簡単な方法。
Lambda layer
- Uploadしただけでは使えない。
- 各Lambda Functionに使用するLambda layerを紐付ける必要がある。 最大5個/Function。
- Deploy package全体として解凍後250MBを超えれない。(ハードリミットでService quotaを引き上げれない)
Lambda layerでよく使われるLibrariesトップ10
| ライブラリ名 | 分野 | 解凍後の容量(目安) | 容量に関する注意点 |
| SciPy | 数値計算 | 100 MB 超 | 最も大容量。複雑な数値計算用。NumPyとの合計で簡単に250MB制限に近づく。 |
| pandas | データ処理 | 数十 MB (NumPy+10~30MB) | データ分析に必須だが、NumPyに依存し大容量。 |
| NumPy (Np) | 数値計算 | 数十 MB (40~50MB以上) | ネイティブコードを含むため、Layer容量圧迫の主因。 |
| Pillow (PIL) | 画像処理 | 10 MB 程度 | 画像処理のデファクトスタンダード。ネイティブコードを含みやや重い。 |
| BeautifulSoup / lxml | スクレイピング | 数 MB | HTML/XML解析。lxmlのバイナリの有無でサイズが変動。 |
| SQLAlchemy | データベース | 数 MB | ORM(オブジェクトリレーショナルマッピング)。 |
| PDFminer.six | ドキュメント処理 | 数 MB | PDFからのテキスト抽出。 |
| Requests | HTTP通信 | 1 MB 未満 | 外部API連携のデファクトスタンダード。非常に軽量。 |
| OpenAI | LLM API | 1 MB 未満 | LLMクライアントSDK。軽量。 |
| markdown-it-py | Markdown処理 | 1 MB 台 | Markdown処理。軽量。 |
| PyYAML | 設定/処理 | 1 MB 未満 | YAML設定ファイルの読み書き。軽量。 |
| Psycopg2 / PyMySQL | データベース | 1 MB 未満 | RDB接続用ドライバ。 |
| SlackClient / tweepy | 外部連携 | 1 MB 未満 | 各サービスSDK。軽量。 |
Lambda layer作成手順
- Lambda layerを使用するLambda functionのPythonバージョンを確認
- ローカルPCでLambda functionが使っているバージョンのPythonをインストールする
- Lambda layer用のzipを作るためのDirectoryを作る
- そのDirectoryに対象ライブラリをpipでインストール
- zipにする
- Lambda layerを作成する。 この時そのzipをアップロードする
- そのLambda layerを使用するLambda functionに、そのLambda layerを追加する
Lambda functionのPythonバージョン確認
Lambda functionで使っているPythonバージョンと同じバージョン環境で作成したzipで作ったLambda layerしか使えません。 Lambdaでは、まだPython3.14や3.15は使えません。 なので必ずLambdaで使えるバージョン を確認すること。
- AWSコンソールで、Lambda ==> Functions =>対象のFunctionをクリック
- Codeタブクリック
- スクロールダウンするとRuntime settingsがある。
- Runtimeの下に、私の場合、 Python3.13とあったので、最新のPython3.13.9をインストールする事にする。
ローカルPCにPython3.13.9インストール
pyenvを使うこと。 pyenvがなければここを参照にインストールすることをおすすめします。 私も以前入れてなくて苦労しました。『pyenv インストール Windows&uBuntu 使い方一覧』
- pyenv install 3.13.9
- 私の場合、会社の共同開発PCなので、lambda layerのzipを作るためのディレクトリに移動して、localを指定して、そのディレクトリだけ、新しいPythonバージョンになるように切り替えました。(Pyenvは超便利です)
- pyenv local 3.13.9
zip作成
私は将来、PyYAML、makdown-it-py、OpenAI、Request、BeautifulSoupを入れておこう。多分10MBくらいと思う。 今回はAIエージェント用にMarkdownでのPromptにRAGから取り出した情報を、YAMLとして追記するので2つだけにしよう。(JSONよりYAMLのほうが見やすい。 自分で書くと間違えそうだが、ライブラリにYAML化してもらうと便利。)
# 1. 作業ディレクトリの作成と移動 mkdir lambda_python_dependencies cd lambda_python_dependencies # 2. Pythonランタイムの規定に合わせ、"python"ディレクトリを作成 # Lambdaは、このディレクトリを探します mkdir python # 3. pythonディレクトリにPyYAMLとmarkdown-it-pyをインストール pip install PyYAML markdown-it-py --target python # 4. pythonディレクトリをルートとしてzipファイルを作成 zip -r spec_processor_layer.zip python
以下エラーが表示される。
競合の原因: これは、私が使っているローカル環境(~/aws/lambda/layers/stchat)に、SageMakerのライブラリ(sagemaker 2.235.1)がインストールされており、そのsagemakerが古いバージョンのprotobufを要求している一方、システムには新しいprotobuf 5.29.1がインストールされているために発生しています。
Lambda Layerへの影響: この競合はローカル環境で起きているものであり、Lambda LayerにインストールしたPyYAMLやmarkdown-it-py自体には影響はありません。Lambda環境では、sagemakerやprotobufのバージョンはローカルとは関係なく実行されるため、この警告は無視して大丈夫です。
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. sagemaker 2.235.1 requires protobuf<5.0,>=3.12, but you have protobuf 5.29.1 which is incompatible.
Lambda layer作成
- Lambda==>左のメニューLayers
- Create layer
- 名前を入れて、Descriptionsを記入して、x86_64などのArchitectureを入れて
- 本来はLambdaのRuntimeと同じRuntimeでローカル環境で構築しないといけない。
- 名前の最後に_3_13と入れた。(『.』は使えない)
- Compatible runtimesでPython3.13を選択
- Create
これでLambda layerが出来ました。
Lambda functionに関連付ける
- Lambda==> Lambda layerを追加するfunctionを選択する
- Codeタブをクリック
- スクロールダウンするとLayersがある
- Add layerする(AddしたいLayerを選択する)
1つのFunctionには5個のLayerまでAddでます。 しかしそのfunctionと、Lambda layerが解凍された状態で最大250MB以下である必要があります。
Lambda functionのバージョン変更方法
作ったLambda layerと、そのLambda layerを使いたい(関連付けたい)functionのPythonバージョンが違っていたら正常に動作しない可能性もあるので、Lambda functionのバージョンが違っていたら、Lambda layerを作り直すか、Lambda functionのPythonバージョンを変更しなければならない。
- Lambda==> Lambda layerを追加するfunctionを選択する
- Codeタブをクリック
- スクロールダウンすると、Runtime settingsがある。
- Editをクリック
- Runtimeの下のプルダウンから、Lambda layerと同じバージョンを選択する。
- Save
これでLambda layerとLambda functionが同じバージョンになり、バージョン不一致エラーにならない。

コメント