コンテンツにスキップ

pydantic AWS Lambda 関数とうまく統合します。このガイドでは、AWS Lambda 関数用にpydanticセットアップする方法について説明します。

AWS Lambda 関数用の Python ライブラリのインストール

AWS Lambda 関数で Python ライブラリを利用する方法は数多くあります。 AWS Lambda ドキュメントで概要が説明されているように、最も一般的なアプローチは次のとおりです。

これらのアプローチはすべて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)!
  1. Lambda ランタイムに対応するプラットフォームを使用してください。
  2. パッケージ (通常は Lambda レイヤーのpython ) をインストールするディレクトリを指定します。
  3. CPython 実装を使用します。
  4. Python のバージョンは Lambda ランタイムと互換性がある必要があります。
  5. このフラグにより、パッケージには事前に構築されたバイナリ ホイールが確実にインストールされます。
  6. 最新バージョンのpydanticがインストールされます。

トラブルシューティング

no module named 'pydantic_core._pydantic_core'

no module named `pydantic_core._pydantic_core`

エラーは、 pydanticが正しくインストールされていないことを示す一般的な問題です。この問題をデバッグするには、(インポートが失敗する前に) 次の手順を試してください。

  1. インストールされている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 になります。

  1. ラムダの 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-310cpython-312 )。正しい--python-version引数をpip installに渡してみるか、ビルドで使用されている Python バージョンを変更してください。

email-validatorのパッケージ メタデータが見つかりませんでした

Pydantic はimportlib.metadataversionを使用して、インストールされている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 関数のeventcontextデータを検証する方法の詳細については、ブログ投稿をご覧ください。


本文总阅读量