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:
- Utilisation d'une archive de fichier
.zip
pour empaqueter votre code et vos dépendances - Utilisation d'AWS Lambda Layers pour partager des bibliothèques entre plusieurs fonctions
- Utiliser une image de conteneur pour empaqueter votre code et vos dépendances
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)!
- Utilisez la plateforme correspondant à votre runtime Lambda.
- Spécifiez le répertoire dans lequel vous souhaitez installer le package (souvent
python
pour Lambda Layers). - Utilisez l'implémentation CPython.
- La version Python doit être compatible avec le runtime Lambda.
- Cet indicateur garantit que le package est installé avec des roues binaires pré-construites.
- 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):
-
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.
-
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
vscpython-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.
本文总阅读量次