pydantic
AWS Lambda 関数とうまく統合します。このガイドでは、AWS Lambda 関数用にpydantic
セットアップする方法について説明します。
AWS Lambda 関数用の Python ライブラリのインストール¶
AWS Lambda 関数で Python ライブラリを利用する方法は数多くあります。 AWS Lambda ドキュメントで概要が説明されているように、最も一般的なアプローチは次のとおりです。
.zip
ファイル アーカイブを使用してコードと依存関係をパッケージ化する- AWS Lambda Layers を使用して複数の関数間でライブラリを共有する
- コンテナイメージを使用してコードと依存関係をパッケージ化する
これらのアプローチはすべてpydantic
で使用できます。最適なアプローチは、特定の要件と制約によって異なります。コンテナー イメージを使用した依存関係管理はより簡単であるため、ここでは最初の 2 つのケースについて詳しく説明します。コンテナー イメージを使用している場合は、このコメントがpydantic
インストールに役立つ可能性があります。
!!!ヒント 複数の関数にわたってpydantic
使用する場合は、複数の関数にわたるライブラリのシームレスな共有をサポートする AWS Lambda Layers を検討することをお勧めします。
選択した依存関係管理アプローチに関係なく、依存関係管理プロセスをスムーズに行うには、これらのガイドラインに従うことが有益です。
AWS Lambda 関数用のpydantic
のインストール¶
コードと依存関係を含む.zip
ファイル アーカイブを構築するとき、または Lambda レイヤーの.zip
ファイルを整理するときは、依存関係のインストールと管理にローカル仮想環境を使用することになるでしょう。 pip
使用している場合、これは少し難しい場合があります。pip pip
ローカル プラットフォーム用にコンパイルされたホイールをインストールするため、Lambda 環境と互換性がない可能性があります。
したがって、次のようなコマンドを使用することをお勧めします。
pip install \
--platform manylinux2014_x86_64 \ # (1)!
--target=<your_package_dir> \ # (2)!
--implementation cp \ # (3)!
--python-version 3.10 \ # (4)!
--only-binary=:all: \ # (5)!
--upgrade pydantic # (6)!
- Lambda ランタイムに対応するプラットフォームを使用してください。
- パッケージ (通常は Lambda レイヤーの
python
) をインストールするディレクトリを指定します。 - CPython 実装を使用します。
- Python のバージョンは Lambda ランタイムと互換性がある必要があります。
- このフラグにより、パッケージには事前に構築されたバイナリ ホイールが確実にインストールされます。
- 最新バージョンの
pydantic
がインストールされます。
トラブルシューティング¶
no module named 'pydantic_core._pydantic_core'
¶
の
no module named `pydantic_core._pydantic_core`
エラーは、 pydantic
が正しくインストールされていないことを示す一般的な問題です。この問題をデバッグするには、(インポートが失敗する前に) 次の手順を試してください。
-
インストールされている
pydantic-core
パッケージの内容を確認します。コンパイルされたライブラリとその型スタブは両方とも存在しますか?from importlib.metadata import files print([file for file in files('pydantic-core') if file.name.startswith('_pydantic_core')]) """ [PackagePath('pydantic_core/_pydantic_core.pyi'), PackagePath('pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so')] """
上に出力されたような 2 つのファイルが表示されるはずです。コンパイル ライブラリ ファイルは、OS と Python のバージョンに応じて名前が異なる .so または .pyd になります。
-
ラムダの Python バージョンが、上記のコンパイル済みライブラリのバージョンと互換性があることを確認してください。
import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))
> '.cpython-312-x86_64-linux-gnu.so'¶
ここにはコンパイルされたライブラリと同じサフィックスが表示されることが予想されます。たとえば、ここでは次のサフィックスが表示されます。 .cpython-312-x86_64-linux-gnu.so
確かに一致します _pydantic_core.cpython-312-x86_64-linux-gnu.so
。
これら 2 つのチェックが一致しない場合、ビルド ステップではラムダのターゲット プラットフォームに適切なネイティブ コードがインストールされていません。ビルド手順を調整して、インストールされるライブラリのバージョンを変更する必要があります。
最も可能性の高いエラー:
-
OS または CPU アーキテクチャが一致していません (例: darwin と x86_64-linux-gnu)。ラムダの依存関係をインストールするときに正しい
--platform
引数をpip install
に渡してみるか、正しいプラットフォームの Linux Docker コンテナ内にビルドしてみてください。現時点で考えられるプラットフォームは次のとおりです。--platform manylinux2014_x86_64
または--platform manylinux2014_aarch64
、ただし、これらは将来の Pydantic メジャー リリースで変更される可能性があります。 -
Python のバージョンが一致しません (例:
cpython-310
とcpython-312
)。正しい--python-version
引数をpip install
に渡してみるか、ビルドで使用されている Python バージョンを変更してください。
email-validator
のパッケージ メタデータが見つかりませんでした¶
Pydantic はimportlib.metadata
のversion
を使用して、インストールされているemail-validator
のバージョンを確認します。このパッケージのバージョン管理メカニズムは、Python でのパッケージのバージョン管理の業界標準ではありますが、AWS Lambda とは多少互換性がありません。この問題を解決するには、いくつかの方法があります。
サーバーレス フレームワークを使用してラムダをデプロイしている場合は、 email-validator
パッケージの適切なメタデータがデプロイ パッケージに含まれていない可能性があります。のようなツール serverless-python-requirements
メタデータを削除してパッケージのサイズを削減します。この問題は、 serverless.yml
ファイルでslim
設定を false に設定することで解決できます。
pythonRequirements:
dockerizePip: non-linux
slim: false
fileName: requirements.txt
この修正の詳細と、関連する可能性のあるその他のslim
設定については、こちらをご覧ください。
コードや依存関係に.zip
アーカイブを使用している場合は、パッケージに必要なバージョンのメタデータが含まれていることを確認してください。これを行うには、 email-validator
パッケージの.zip
アーカイブにdist-info
ディレクトリが含まれていることを確認してください。
この問題は、 jsonschema
などの他の一般的な Python ライブラリでも報告されているため、問題と潜在的な修正についての詳細を参照することもできます。
追加リソース¶
その他のデバッグのヒント¶
AWS Lambda にpydantic
インストールするのにまだ苦労している場合は、他の開発者が遭遇したさまざまな問題と解決策をカバーしているこの問題を参照してください。
event
およびcontext
データの検証¶
pydantic
使用して AWS Lambda 関数のevent
とcontext
データを検証する方法の詳細については、ブログ投稿をご覧ください。
本文总阅读量次