Aller au contenu

pydantic s'intègre bien aux fonctions AWS Lambda. Dans ce guide, nous verrons comment configurer pydantic pour une fonction AWS Lambda.

Installation des bibliothèques Python pour les fonctions AWS Lambda

Il existe de nombreuses façons d'utiliser les bibliothèques Python dans les fonctions AWS Lambda. Comme indiqué dans la documentation AWS Lambda , les approches les plus courantes incluent:

Toutes ces approches peuvent être utilisées avec pydantic . La meilleure approche pour vous dépendra de vos exigences et contraintes spécifiques. Nous aborderons ici les deux premiers cas plus en profondeur, car la gestion des dépendances avec une image de conteneur est plus simple. Si vous utilisez une image de conteneur, ce commentaire pourrait vous être utile pour installer pydantic .

!!! Astuce Si vous utilisez pydantic sur plusieurs fonctions, vous souhaiterez peut-être envisager les couches AWS Lambda, qui prennent en charge le partage transparent des bibliothèques entre plusieurs fonctions.

Quelle que soit l’approche de gestion des dépendances que vous choisissez, il est avantageux de respecter ces directives pour garantir un processus de gestion des dépendances fluide.

Installation pydantic pour les fonctions AWS Lambda

Lorsque vous créez votre archive de fichiers .zip avec votre code et vos dépendances ou que vous organisez votre fichier .zip pour une couche Lambda, vous utiliserez probablement un environnement virtuel local pour installer et gérer vos dépendances. Cela peut être un peu délicat si vous utilisez pip car pip installe des roues compilées pour votre plate-forme locale, qui peuvent ne pas être compatibles avec l'environnement Lambda.

Ainsi, nous vous suggérons d'utiliser une commande similaire à la suivante:

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. Utilisez la plateforme correspondant à votre runtime Lambda.
  2. Spécifiez le répertoire dans lequel vous souhaitez installer le package (souvent python pour Lambda Layers).
  3. Utilisez l'implémentation CPython.
  4. La version Python doit être compatible avec le runtime Lambda.
  5. Cet indicateur garantit que le package est installé avec des roues binaires pré-construites.
  6. La dernière version de pydantic sera installée.

Dépannage

no module named 'pydantic_core._pydantic_core'

Le

no module named `pydantic_core._pydantic_core`

L'erreur est un problème courant qui indique que vous avez mal installé pydantic . Pour déboguer ce problème, vous pouvez essayer les étapes suivantes (avant l'échec de l'importation):

  1. Vérifiez le contenu du package pydantic-core installé. La bibliothèque compilée et ses stubs de type sont-ils tous deux présents?

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

Vous devriez vous attendre à voir deux fichiers comme ceux imprimés ci-dessus. Le fichier de la bibliothèque de compilation sera un .so ou .pyd avec un nom qui varie selon le système d'exploitation et la version de Python.

  1. Vérifiez que la version Python de votre lambda est compatible avec la version de la bibliothèque compilée trouvée ci-dessus.

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

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

Vous devriez vous attendre à voir ici le même suffixe que la bibliothèque compilée, par exemple ici nous voyons ce suffixe .cpython-312-x86_64-linux-gnu.so correspond effectivement _pydantic_core.cpython-312-x86_64-linux-gnu.so .

Si ces deux vérifications ne correspondent pas, vos étapes de construction n'ont pas installé le code natif correct pour la plate-forme cible de votre lambda. Vous devez ajuster vos étapes de construction pour modifier la version de la bibliothèque installée qui est installée.

Erreurs les plus probables:

  • L'architecture de votre système d'exploitation ou de votre processeur ne correspond pas (par exemple, Darwin vs x86_64-linux-gnu). Essayez de transmettre l'argument --platform correct à pip install lors de l'installation de vos dépendances lambda, ou construisez dans un conteneur Docker Linux pour la plate-forme appropriée. Les plates-formes possibles incluent actuellement --platform manylinux2014_x86_64 ou --platform manylinux2014_aarch64 , mais ceux-ci pourraient changer avec une future version majeure de Pydantic.

  • Votre version de Python ne correspond pas (par exemple cpython-310 vs cpython-312 ). Essayez de transmettre l'argument --python-version correct à pip install , ou modifiez la version Python utilisée sur votre build.

Aucune métadonnée de package n'a été trouvée pour email-validator

Pydantic utilise version de importlib.metadata pour vérifier quelle version du email-validator est installée. Ce mécanisme de gestion des versions de packages est quelque peu incompatible avec AWS Lambda, même s'il s'agit de la norme industrielle pour la gestion des versions des packages en Python. Il existe plusieurs façons de résoudre ce problème:

Si vous déployez votre lambda avec le framework sans serveur, il est probable que les métadonnées appropriées pour le package email-validator ne soient pas incluses dans votre package de déploiement. Des outils comme serverless-python-requirements supprimez les métadonnées pour réduire la taille du package. Vous pouvez résoudre ce problème en définissant le paramètre slim sur false dans votre fichier serverless.yml:

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

Vous pouvez en savoir plus sur ce correctif et sur d'autres paramètres slim qui pourraient être pertinents ici .

Si vous utilisez une archive .zip pour votre code et/ou vos dépendances, assurez-vous que votre package contient les métadonnées de version requises. Pour ce faire, assurez-vous d'inclure le répertoire dist-info dans votre archive .zip pour le package email-validator .

Ce problème a été signalé pour d'autres bibliothèques Python populaires telles que jsonschema , vous pouvez donc également en savoir plus sur le problème et les correctifs potentiels.

Ressources supplémentaires

Plus de conseils de débogage

Si vous avez toujours du mal à installer pydantic pour votre AWS Lambda, vous pouvez consulter ce numéro , qui couvre une variété de problèmes et de solutions rencontrés par d'autres développeurs.

Validation des données event et context

Consultez notre article de blog pour en savoir plus sur l'utilisation pydantic pour valider les données event et context dans les fonctions AWS Lambda.


本文总阅读量