En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je résoudre les erreurs « unknown service », « parameter validation failed » ou « object has no attribute » provenant d'une fonction Lambda Python (Boto3) ?

Lecture de 5 minute(s)
0

La fonction AWS Lambda de My Python (Boto3) renvoie les erreurs « unknown service », « parameter validation failed » ou « object has no attribute ».

Brève description

Une fonction Python (Boto3) qui n'utilise pas la dernière version de Boto3 peut renvoyer les 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 créer une couche Lambda manuellement ou avec Docker. Il est recommandé de mettre à niveau votre couche Lambda via Docker afin de vous assurer que vos fichiers binaires sont adaptés au système d'exploitation Lambda.

Important : Les procédures suivantes supposent que vous disposez de la dernière version de Botocore. Si vous ne disposez pas de la dernière version de Botocore, vous devez effectuer la mise à niveau de Botocore avant de pouvoir passer à la dernière version de Boto3. Pour en savoir plus, consultez la page botocore sur le site Web de GitHub.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

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 :

  • Installez le package pip3 pour Python 3. Ou, si vous possédez une version précédente de pip, mettez-la à niveau. Pour en savoir plus, consultez la page Installation du site Web de pip.
  • Installez ou mettez à jour l'AWS CLI avec pip3.

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

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

Prérequis : Installez Docker sur votre système. Pour télécharger la dernière version de Docker, consultez la section Installation de Docker.

Créez et appliquez votre couche

Procédez comme suit :

  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. Remplacez boto3-mylayer par un nom personnalisé pour votre package.
    Une fois l'exécution de la commande terminée, un fichier portant le nom de votre package s'affiche dans le répertoire actuel, tel que boto3-mylayer.zip.

  3. 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

Les commandes de l'interface de ligne de commande AWS suivantes fonctionnent pour les systèmes d'exploitation Linux, Unix et macOS.

Remarque : Dans chaque commande, veillez à remplacer boto3-mylayer par le nom que vous préférez pour le dossier lib et la couche Lambda.

Procédez comme suit :

  1. Créez un dossier lib :

    LIB_DIR=boto3-mylayer/pythonmkdir
  2. Installez la bibliothèque dans LIB_DIR.

    pip3 install boto3 -t $LIB_DIR
  3. Pour compresser toutes les dépendances dans ** /tmp/boto3-mylayer.zip**, exécutez la commande suivante.

    cd boto3-mylayer
    zip -r /tmp/boto3-mylayer.zip
  4. Pour publier la couche, exécutez la commande suivante.

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

    La commande renvoie l’Amazon Resource Name (ARN) de la nouvelle couche.
    Exemple de sortie :

    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 :

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

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

Tous les services et arguments AWS sont maintenant disponibles pour votre fonction Lambda.

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

Utilisation d'archives de fichiers .zip pour les fonctions Python Lambda

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 15 jours