Ga naar inhoud

pydantic kan goed worden geïntegreerd met AWS Lambda-functies. In deze handleiding bespreken we hoe u pydantic instelt voor een AWS Lambda-functie.

Python-bibliotheken installeren voor AWS Lambda-functies

Er zijn veel manieren om Python-bibliotheken te gebruiken in AWS Lambda-functies. Zoals uiteengezet in de AWS Lambda-documentatie , zijn de meest voorkomende benaderingen:

Al deze benaderingen kunnen worden gebruikt met pydantic . De beste aanpak voor u hangt af van uw specifieke vereisten en beperkingen. We gaan hier dieper in op de eerste twee gevallen, omdat het beheer van afhankelijkheid met een containerimage eenvoudiger is. Als u een containerimage gebruikt, vindt u deze opmerking mogelijk nuttig bij het installeren pydantic .

!!! tip Als u pydantic voor meerdere functies gebruikt, kunt u AWS Lambda Layers overwegen, die het naadloos delen van bibliotheken tussen meerdere functies ondersteunen.

Ongeacht de aanpak die u kiest voor het beheer van afhankelijkheden, het is nuttig om u aan deze richtlijnen te houden om een soepel beheerproces voor afhankelijkheden te garanderen.

pydantic installeren voor AWS Lambda-functies

Wanneer u uw .zip bestandsarchief aan het bouwen bent met uw code en afhankelijkheden, of uw .zip bestand organiseert voor een Lambda-laag, gebruikt u waarschijnlijk een lokale virtuele omgeving om uw afhankelijkheden te installeren en te beheren. Dit kan een beetje lastig zijn als je pip gebruikt, omdat pip wielen installeert die zijn gecompileerd voor je lokale platform, en die mogelijk niet compatibel zijn met de Lambda-omgeving.

We raden u daarom aan een opdracht te gebruiken die lijkt op het volgende:

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. Gebruik het platform dat overeenkomt met uw Lambda-runtime.
  2. Geef de map op waar u het pakket wilt installeren (vaak python voor Lambda Layers).
  3. Gebruik de CPython-implementatie.
  4. De Python-versie moet compatibel zijn met de Lambda-runtime.
  5. Deze vlag zorgt ervoor dat het pakket vooraf gebouwde binaire wielen is geïnstalleerd.
  6. De nieuwste versie van pydantic wordt geïnstalleerd.

Problemen oplossen

no module named 'pydantic_core._pydantic_core'

De

no module named `pydantic_core._pydantic_core`

fout is een veelvoorkomend probleem dat aangeeft dat u pydantic verkeerd hebt geïnstalleerd. Om dit probleem op te lossen, kunt u de volgende stappen proberen (vóór de mislukte import):

  1. Controleer de inhoud van het geïnstalleerde pydantic-core pakket. Zijn de gecompileerde bibliotheek en de type-stubs beide aanwezig?

    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')] """

Je zou twee bestanden verwachten zoals hierboven afgedrukt. Het compileerbibliotheekbestand zal een .so of .pyd zijn met een naam die varieert afhankelijk van het besturingssysteem en de Python-versie.

  1. Controleer of de Python-versie van uw lambda compatibel is met de hierboven gecompileerde bibliotheekversie.

    import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))

    > '.cpython-312-x86_64-linux-gnu.so'

Je zou hier hetzelfde achtervoegsel verwachten als de gecompileerde bibliotheek, hier zien we bijvoorbeeld dit achtervoegsel .cpython-312-x86_64-linux-gnu.so klopt inderdaad _pydantic_core.cpython-312-x86_64-linux-gnu.so .

Als deze twee controles niet overeenkomen, hebben uw bouwstappen niet de juiste native code voor het doelplatform van uw lambda geïnstalleerd. U moet uw bouwstappen aanpassen om de versie van de geïnstalleerde bibliotheek die wordt geïnstalleerd te wijzigen.

Meest waarschijnlijke fouten:

  • Uw besturingssysteem of CPU-architectuur komt niet overeen (bijv. Darwin versus x86_64-linux-gnu). Probeer het juiste --platform argument door te geven aan pip install bij het installeren van uw lambda-afhankelijkheden, of bouw in een Linux docker-container voor het juiste platform. Mogelijke platforms op dit moment zijn onder meer --platform manylinux2014_x86_64 of --platform manylinux2014_aarch64 , maar deze kunnen veranderen met een toekomstige grote release van Pydantic.

  • Uw Python-versie komt niet overeen (bijvoorbeeld cpython-310 versus cpython-312 ). Probeer het juiste --python-version argument door te geven aan pip install , of wijzig op een andere manier de Python-versie die in uw build wordt gebruikt.

Er zijn geen pakketmetagegevens gevonden voor email-validator

Pydantic gebruikt version van importlib.metadata om te controleren welke versie van email-validator is geïnstalleerd. Dit mechanisme voor pakketversiebeheer is enigszins incompatibel met AWS Lambda, ook al is het de industriestandaard voor versiebeheer van pakketten in Python. Er zijn een paar manieren om dit probleem op te lossen:

Als u uw lambda implementeert met het serverloze raamwerk, is het waarschijnlijk dat de juiste metagegevens voor het email-validator niet zijn opgenomen in uw implementatiepakket. Gereedschappen zoals serverless-python-requirements verwijder metagegevens om de pakketgrootte te verkleinen. U kunt dit probleem oplossen door de slim instelling in uw serverless.yml -bestand op false in te stellen:

pythonRequirements:
    dockerizePip: non-linux
    slim: false
    fileName: requirements.txt

U kunt hier meer lezen over deze oplossing en andere slim instellingen die mogelijk relevant zijn.

Als u een .zip archief gebruikt voor uw code en/of afhankelijkheden, zorg er dan voor dat uw pakket de vereiste versiemetagegevens bevat. Om dit te doen, moet u ervoor zorgen dat u de map dist-info opneemt in uw .zip archief voor het email-validator .

Dit probleem is gemeld voor andere populaire Python-bibliotheken zoals jsonschema , dus u kunt daar ook meer lezen over het probleem en mogelijke oplossingen.

Extra bronnen

Meer foutopsporingstips

Als je nog steeds worstelt met het installeren van pydantic voor je AWS Lambda, kun je dit probleem raadplegen, dat een verscheidenheid aan problemen en oplossingen behandelt die andere ontwikkelaars tegenkwamen.

Valideren van event en context

Bekijk onze blogpost voor meer informatie over hoe u pydantic kunt gebruiken om event en context in AWS Lambda-functies te valideren.


本文总阅读量