pydantic
lässt sich gut in AWS Lambda-Funktionen integrieren. In diesem Leitfaden besprechen wir, wie man pydantic
für eine AWS Lambda-Funktion einrichtet.
Installieren von Python-Bibliotheken für AWS Lambda-Funktionen¶
Es gibt viele Möglichkeiten, Python-Bibliotheken in AWS Lambda-Funktionen zu verwenden. Wie in der AWS Lambda-Dokumentation beschrieben, gehören zu den gängigsten Ansätzen:
- Verwenden Sie ein
.zip
Dateiarchiv, um Ihren Code und Ihre Abhängigkeiten zu verpacken - Verwenden von AWS Lambda Layers zur gemeinsamen Nutzung von Bibliotheken über mehrere Funktionen hinweg
- Verwenden eines Container-Images zum Verpacken Ihres Codes und Ihrer Abhängigkeiten
Alle diese Ansätze können mit pydantic
verwendet werden. Der für Sie beste Ansatz hängt von Ihren spezifischen Anforderungen und Einschränkungen ab. Wir werden die ersten beiden Fälle hier ausführlicher behandeln, da die Abhängigkeitsverwaltung mit einem Container-Image einfacher ist. Wenn Sie ein Container-Image verwenden, könnte dieser Kommentar für die Installation pydantic
hilfreich sein.
!!! Tipp Wenn Sie pydantic
über mehrere Funktionen hinweg verwenden, sollten Sie AWS Lambda Layers in Betracht ziehen, die die nahtlose gemeinsame Nutzung von Bibliotheken über mehrere Funktionen hinweg unterstützen.
Unabhängig davon, für welchen Ansatz des Abhängigkeitsmanagements Sie sich entscheiden, ist es von Vorteil, diese Richtlinien einzuhalten, um einen reibungslosen Abhängigkeitsmanagementprozess sicherzustellen.
pydantic
für AWS Lambda-Funktionen installieren¶
Wenn Sie Ihr .zip
Dateiarchiv mit Ihrem Code und Ihren Abhängigkeiten erstellen oder Ihre .zip
Datei für eine Lambda-Ebene organisieren, werden Sie wahrscheinlich eine lokale virtuelle Umgebung verwenden, um Ihre Abhängigkeiten zu installieren und zu verwalten. Dies kann etwas knifflig sein, wenn Sie pip
verwenden, da pip
für Ihre lokale Plattform kompilierte Räder installiert, die möglicherweise nicht mit der Lambda-Umgebung kompatibel sind.
Daher empfehlen wir Ihnen, einen Befehl ähnlich dem folgenden zu verwenden:
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)!
- Verwenden Sie die Plattform, die Ihrer Lambda-Laufzeitumgebung entspricht.
- Geben Sie das Verzeichnis an, in dem Sie das Paket installieren möchten (häufig
python
für Lambda Layers). - Verwenden Sie die CPython-Implementierung.
- Die Python-Version muss mit der Lambda-Laufzeitumgebung kompatibel sein.
- Dieses Flag stellt sicher, dass das Paket vorgefertigte Binärräder installiert.
- Die neueste Version von
pydantic
wird installiert.
Fehlerbehebung¶
no module named 'pydantic_core._pydantic_core'
¶
Der
no module named `pydantic_core._pydantic_core`
Ein Fehler ist ein häufiges Problem, das darauf hinweist, dass Sie pydantic
falsch installiert haben. Um dieses Problem zu beheben, können Sie die folgenden Schritte ausführen (vor dem fehlgeschlagenen Import):
-
Überprüfen Sie den Inhalt des installierten
pydantic-core
Pakets. Sind sowohl die kompilierte Bibliothek als auch ihre Typ-Stubs vorhanden?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')] """
Sie sollten damit rechnen, zwei Dateien wie die oben gedruckten zu sehen. Die Kompilierungsbibliotheksdatei ist eine .so- oder .pyd-Datei mit einem Namen, der je nach Betriebssystem und Python-Version variiert.
-
Überprüfen Sie, ob die Python-Version Ihres Lambda mit der oben gefundenen kompilierten Bibliotheksversion kompatibel ist.
import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))
> '.cpython-312-x86_64-linux-gnu.so'¶
Sie sollten damit rechnen, hier dasselbe Suffix wie in der kompilierten Bibliothek zu sehen. Hier sehen wir beispielsweise dieses Suffix .cpython-312-x86_64-linux-gnu.so
stimmt tatsächlich überein _pydantic_core.cpython-312-x86_64-linux-gnu.so
.
Wenn diese beiden Prüfungen nicht übereinstimmen, haben Ihre Build-Schritte nicht den richtigen nativen Code für die Zielplattform Ihres Lambda installiert. Sie sollten Ihre Build-Schritte anpassen, um die Version der installierten Bibliothek zu ändern, die installiert wird.
Wahrscheinlichste Fehler:
-
Ihre Betriebssystem- oder CPU-Architektur stimmt nicht überein (z. B. Darwin vs. x86_64-linux-gnu). Versuchen Sie, bei der Installation Ihrer Lambda-Abhängigkeiten das richtige Argument
--platform
anpip install
zu übergeben, oder erstellen Sie einen Build in einem Linux-Docker-Container für die richtige Plattform. Mögliche Plattformen sind derzeit unter anderem--platform manylinux2014_x86_64
oder--platform manylinux2014_aarch64
, aber diese können sich mit einer zukünftigen Hauptversion von Pydantic ändern. -
Ihre Python-Version stimmt nicht überein (z. B.
cpython-310
vs.cpython-312
). Versuchen Sie, das korrekte Argument--python-version
anpip install
zu übergeben, oder ändern Sie auf andere Weise die in Ihrem Build verwendete Python-Version.
Für email-validator
wurden keine Paketmetadaten gefunden¶
Pydantic verwendet version
von importlib.metadata
um zu überprüfen, welche Version des email-validator
installiert ist. Dieser Mechanismus zur Paketversionierung ist etwas inkompatibel mit AWS Lambda, obwohl es sich um den Industriestandard für die Versionierung von Paketen in Python handelt. Es gibt mehrere Möglichkeiten, dieses Problem zu beheben:
Wenn Sie Ihr Lambda mit dem serverlosen Framework bereitstellen, ist es wahrscheinlich, dass die entsprechenden Metadaten für das email-validator
Paket nicht in Ihrem Bereitstellungspaket enthalten sind. Werkzeuge wie serverless-python-requirements
Entfernen Sie Metadaten, um die Paketgröße zu reduzieren. Sie können dieses Problem beheben, indem Sie die slim
-Einstellung in Ihrer serverless.yml
Datei auf „false“ setzen:
pythonRequirements:
dockerizePip: non-linux
slim: false
fileName: requirements.txt
Weitere Informationen zu diesem Fix und anderen möglicherweise relevanten slim
-Einstellungen finden Sie hier .
Wenn Sie ein .zip
Archiv für Ihren Code und/oder Ihre Abhängigkeiten verwenden, stellen Sie sicher, dass Ihr Paket die erforderlichen Versionsmetadaten enthält. Stellen Sie dazu sicher, dass Sie das Verzeichnis dist-info
in Ihr .zip
Archiv für das email-validator
Paket aufnehmen.
Dieses Problem wurde für andere beliebte Python-Bibliotheken wie jsonschema
gemeldet, sodass Sie dort auch mehr über das Problem und mögliche Korrekturen lesen können.
Zusätzliche Ressourcen¶
Weitere Debugging-Tipps¶
Wenn Sie immer noch Schwierigkeiten haben, pydantic
für Ihr AWS Lambda zu installieren, können Sie sich an dieses Problem wenden, das eine Vielzahl von Problemen und Lösungen abdeckt, auf die andere Entwickler gestoßen sind.
Validierung von event
und context
¶
Schauen Sie sich unseren Blogbeitrag an, um mehr darüber zu erfahren, wie Sie pydantic
zur Validierung event
und context
in AWS Lambda-Funktionen verwenden.
本文总阅读量次