Comment résoudre les problèmes liés à la fonction Lambda SQS ReportBatchItemFailures ?

Lecture de 3 minute(s)
0

J'ai configuré la réponse partielle par lots pour ma fonction AWS Lambda sur laquelle Amazon Simple Queue Service (Amazon SQS) est configuré en tant que source d'événement. Maintenant, ma fonction Lambda renvoie une liste de « ReportBatchItemFailures » et l'une des situations suivantes se produit : Lambda réessaie un lot de messages entier lorsqu'il n'y a pas eu d'erreur de fonction, ou Lambda ne réessaie aucun des lots de messages partiels. Comment résoudre ce problème ?

Solution

Remarque : vous devez configurer manuellement la réponse partielle par lot sur votre fonction Lambda pour traiter par programme des lots Amazon SQS partiels. Pour plus d'informations, consultez Signalement des échecs d'éléments de lot dans le Guide du développeur AWS Lambda.

Exemple de commande AWS Command Line Interface (AWS CLI) pour activer la réponse partielle par lots pour une fonction Lambda

Important : remplacez par**<esm_UUID>**  par votre identifiant unique universel (UUID) de votre mappage de source d'événement Amazon SQS. Pour récupérer l'UUID de votre mappage de source d'événement, exécutez la commande d'AWS CLI list-event-source-mappings. Si vous recevez des erreurs lors de l'exécution des commandes d'AWS CLI, assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

aws lambda update-event-source-mapping --uuid <esm_UUID> --function-response-types "ReportBatchItemFailures"

Pour dépanner ReportBatchItemFailures lorsque Lambda tente à nouveau un lot de messages SQS entier alors qu'il n'y a pas eu d'erreur de fonction

Consultez la réponse par lot partielle dans le code de votre fonction Lambda pour voir s'il existe l'une des réponses suivantes. Remédiez ensuite le problème en fonction de la réponse enregistrée.

Remarque : Lambda traite un lot comme un échec complet si votre fonction renvoie l'une des réponses suivantes.

Réponses pour un EventResponse qui n'est pas un JSON valide

return "Hello world"
return ""

Réponse pour une valeur itemIdentifier vide

return {"batchItemFailures":[{"itemIdentifier": ""}]}

Réponse pour une valeur itemIdentifier nulle

return {"batchItemFailures":[{"itemIdentifier": None}]}

Réponse pour une valeur itemIdentifier avec un nom de clé incorrect

return {"batchItemFailures":[{"bad_key": messageID}]}

Réponse pour une valeur itemIdentifier dont l'ID de message n'existe pas

return {"batchItemFailures":[{"itemIdentifier": "random_ID"}]}

Important : votre fonction Lambda doit renvoyer une valeur JSON itemIdentifier valide.

Pour résoudre le problème de ReportBatchItemFailures lorsque Lambda ne réessaie aucun des lots de messages partiels

Consultez la réponse par lot partielle dans le code de votre fonction Lambda pour voir s'il existe l'une des réponses suivantes. Remédiez ensuite le problème en fonction de la réponse enregistrée.

Remarque : Lambda traite un lot comme un succès complet lorsque votre fonction renvoie l'une des réponses suivantes.

Réponse pour une liste batchItemFailures vide

return {"batchItemFailures":[]}

Réponse pour une liste batchItemFailures nulle

return {"batchItemFailures": None}

Réponses pour un EventResponse avec une valeur JSON vide ou inattendue

return {}
return {"Key1":"Value1"}

Réponses pour un EventResponse nul

return
return None

Important : votre fonction Lambda doit renvoyer une réponse contenant une valeur JSON « batchItemFailures » qui inclut une liste d'ID de message valides.


Informations connexes

Comment puis-je empêcher un message Amazon SQS d'appeler ma fonction Lambda plusieurs fois ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans