Zum Inhalt

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)!
  1. Verwenden Sie die Plattform, die Ihrer Lambda-Laufzeitumgebung entspricht.
  2. Geben Sie das Verzeichnis an, in dem Sie das Paket installieren möchten (häufig python für Lambda Layers).
  3. Verwenden Sie die CPython-Implementierung.
  4. Die Python-Version muss mit der Lambda-Laufzeitumgebung kompatibel sein.
  5. Dieses Flag stellt sicher, dass das Paket vorgefertigte Binärräder installiert.
  6. 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):

  1. Ü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.

  1. Ü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 an pip 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 an pip 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.


本文总阅读量