Pourquoi les erreurs « unknown service » (service inconnu), « parameter validation failed » (échec de la validation des paramètres) ou « object has no attribute » (l'objet n'a aucun attribut) sont-elles générées avec ma fonction Lambda Python (Boto 3) ?

Date de la dernière mise à jour : 26/09/2019

Lorsque j'exécute ma fonction AWS Lambda écrite en Python, je reçois une erreur « unknown service » (service inconnu), « parameter validation failed » (échec de la validation des paramètres) ou « object has no attribute » (l'objet n'a aucun attribut). Comment les éliminer ?

Brève description

Ces erreurs peuvent se produire lorsque votre fonction Lambda est configurée pour utiliser l'un des environnements d'exécution Lambda pour Python et qu'elle essaie d'appeler un service AWS plus récent ou la dernière version d'une API AWS. La version du kit AWS SDK pour Python (Boto 3) fournie dans l'environnement d'exécution Lambda n'est pas la dernière version. Certains arguments peuvent être manquants pour certains services et API AWS.

Créez une couche qui utilise la dernière version de Boto 3, puis ajoutez la couche à la configuration de votre fonction.

Solution

Remarque : ces instructions sont fournies à titre indicatif et supposent que vous disposez d'un nouveau répertoire de travail. Pour un répertoire de travail existant, il peut être nécessaire de mettre à niveau botocore afin de mettre à niveau Boto 3. Adaptez les étapes que vous exécutez en fonction de votre système d'exploitation et de votre configuration Python.

Installation de pip et de l'interface de ligne de commande (CLI) AWS

1.    Si vous ne l'avez pas déjà fait, installez pip3 pour l'empaquetage Python 3. Si vous disposez d'une version précédente de pip, mettez-la à niveau.

2.    Installez ou mettez à niveau l'interface de ligne de commande (CLI) AWS en utilisant pip3. La dernière version de l'interface de ligne de commande (CLI) AWS inclut le modèle d'API de couches Lambda.

Créer une couche et l'ajouter à votre fonction Lambda

Remarque : ces commandes sont valides uniquement pour les systèmes Linux/Unix/macOS. Dans les commandes, remplacez boto3-mylayer par le nom de dossier lib et la couche Lambda de votre choix.

1.    Créez un dossier lib en exécutant la commande suivante :

LIB_DIR=boto3-mylayer/python
mkdir -p $LIB_DIR

2.    Installez la bibliothèque dans LIB_DIR en exécutant la commande suivante :

pip3 install boto3 -t $LIB_DIR

3.    Compressez toutes les dépendances dans /tmp/boto3-mylayer.zip en exécutant cette commande :

cd boto3-mylayer
zip -r /tmp/boto3-mylayer.zip .

4.    Publiez la couche en exécutant la commande suivante :

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

La commande renvoie l'ARN (Amazon Resource Name ) de la nouvelle couche, qui se présente comme suit :

arn:aws:lambda:region:$ACC_ID:layer:boto3-mylayer:1

5.    Ajoutez la couche à la configuration de votre fonction Lambda en exécutant cette commande :

Remarque : remplacez myfunction par le nom de votre fonction. Remplacez arn:aws:lambda:region:ACC_ID:layer:boto3-mylayer:1 par l'ARN de votre couche.

aws lambda update-function-configuration --function-name myfunction --layers arn:aws:lambda:region:ACC_ID:layer:boto3-mylayer:1

Tous les services et arguments AWS/arguments de mot-clé sont désormais disponibles pour votre fonction Lambda.

Astuce : utilisez print(boto3.__version__) et print(botocore.__version__) dans le code de votre fonction pour vérifier la version de Boto 3 et Botocore.


Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?