Comment résoudre les erreurs « service inconnu », « échec de la validation des paramètres » et « l'objet ne possède aucun attribut » provenant d'une fonction Lambda Python (Boto3) ?

Lecture de 5 minute(s)
0

La fonction AWS Lambda de My Python (Boto3) renvoie les erreurs « service inconnu », « échec de la validation des paramètres » ou « l'objet ne possède aucun attribut ».

Brève description

Une fonction Lambda Python (Boto3) qui n'utilise pas la dernière version de Boto3 peut renvoyer l'une des erreurs suivantes :

  • service inconnu
  • échec de la validation des paramètres
  • l'objet n'a pas d'attribut

Ces erreurs se produisent lorsque la fonction essaie d'appeler un service AWS ou une API AWS nécessitant la dernière version de Boto3.
Pour résoudre ce problème, créez une couche Lambda qui utilise la dernière version de Boto3. Vous pouvez le faire manuellement ou utiliser Docker. Il est plus efficace de mettre à niveau votre couche Lambda via Docker, ce qui garantit que vos fichiers binaires sont corrects pour le système d'exploitation Lambda.

**Important :**Les procédures suivantes supposent que vous disposez de la dernière version de Botocore (sur GitHub). Si vous ne possédez pas la dernière version de Botocore, vous devez effectuer la mise à niveau de Botocore avant de pouvoir passer à la dernière version de Boto3. Implémentez la résolution selon les besoins de votre configuration spécifique et de Python.

Résolution

Remarque : Si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous que vous utilisez la version la plus récente de l'interface de ligne de commande AWS.

Il est recommandé de créer une couche Lambda sur le même système d'exploitation que celui sur lequel repose votre environnement d'exécution Lambda. Par exemple, les versions 3.8 et 3.9 de Python sont basées sur une Amazon Machine Image (AMI) Amazon Linux 2. Toutefois, Python 3.7 et Python 3.6 sont basés sur l'AMI Amazon Linux.

(Prérequis) Installer pip3 et la dernière version de l'AWS CLI

1.    Si ce n'est pas déjà fait, installez le package pip3 pour Python 3 depuis le site Web de pip.

-ou-

Si vous possédez une version précédente de pip, mettez-la à niveau depuis le site Web de pip.

2.    Installez ou mettez à niveau l'AWS CLI à l'aide de pip3.

**Remarque :**La dernière version de l'interface de ligne de commande AWS inclut le modèle d'API Lambda Layers.

Utiliser Docker pour créer ou mettre à jour une couche Lambda qui utilise la dernière version de Boto3

(Prérequis) Installer Docker

Assurez-vous que Docker est installé sur votre système et qu'il fonctionne. Pour télécharger la dernière version de Docker, consultez la section Installation de Docker.

Créez et appliquez votre couche

1.    Accédez au répertoire dans lequel vous souhaitez créer le fichier de couches.

2.    Exécutez la commande suivante dans l'interface de ligne de commande de votre système :

docker run --entrypoint "" -v "$PWD":/var/task "public.ecr.aws/lambda/python:3.9.2023.03.21.20" /bin/sh -c "mkdir -p /tmp/python && pip3 install boto3 -t /tmp/python && cd /tmp && yum install -y zip && zip -r /var/task/boto3-mylayer.zip ."

**Remarque :Remplacez ** public.ecr.aws/lambda/python:3.9.2023.03.21.20 par l'image de base de votre version de Python. Vous pouvez remplacer boto3-mylayer par un nom personnalisé pour votre package.

3.    Attendez que la commande soit terminée. Une fois l'opération terminée, un fichier portant le nom de votre package s'affiche dans le répertoire actuel, tel que boto3-mylayer.zip.

4.    Pour créer ou mettre à jour votre couche Lambda, exécutez la commande suivante :

aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb://boto3-mylayer.zip --compatible-runtimes python3.9 --region REGION_NAME

**Remarque :**Remplacez boto3-mylayer par le nom de votre package. Remplacez REGION_NAME par votre Région AWS. Incluez également les environnements d'exécution compatibles que vous avez spécifiés précédemment.

Créez manuellement une couche Lambda qui utilise la dernière version de Boto3

**Important :**Les commandes de l'interface de ligne de commande AWS suivantes fonctionnent pour les systèmes d'exploitation Linux, Unix et macOS. Dans chaque commande, veillez à remplacer boto3-mylayer par le nom que vous préférez pour le dossier lib et la couche Lambda.

1.    Créez un dossier lib :

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

2.    Installez la bibliothèque dans LIB_DIR :

pip3 install boto3 -t $LIB_DIR

3.    Compressez toutes les dépendances dans /tmp/boto3-mylayer.zip :

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

4.    Publiez la couche :

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

La commande renvoie le nom Amazon Resource Name (ARN)de la nouvelle couche.

Exemple d'ARN de couche Lambda

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

Ajoutez la nouvelle couche à la configuration de votre fonction Lambda

Pour ajouter la nouvelle couche à la configuration de votre fonction Lambda, exécutez la commande suivante :

**Important :Remplacez ** MY_FUNCTION par le nom de votre fonction. Remplacez LAYER_ARN par l'ARN de votre couche.

aws lambda update-function-configuration --function-name MY_FUNCTION --layers LAYER_ARN

Tous les services et arguments AWS sont désormais disponibles pour votre fonction Lambda.

**Conseil :**Pour confirmer la version de Boto3 et de Botocore, utilisez print(boto3).__version__) et print(botocore).__version__) dans votre code de fonction

Informations connexes

Création de fonctions Lambda avec Python

Exécutions Lambda

Déployez des fonctions Python Lambda avec des archives de fichiers .zip

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an