Pourquoi ma fonction Lambda accumule des tentatives de traitement de messages Amazon SQS valides et pourquoi place-t-elle ces messages dans ma file d'attente de lettres mortes ?

Dernière mise à jour : 01/11/2021

J'ai configuré ma fonction AWS Lambda pour traiter les messages dans une file d'attente Amazon Simple Queue Service (Amazon SQS). Désormais, certains de mes messages Amazon SQS valides sont reçus plusieurs fois jusqu'à la limite maxReceiveCount et se retrouvent dans ma file d'attente de lettres mortes. Pourquoi cela se produit-il et comment puis-je m'assurer que ma fonction Lambda traite tous mes messages Amazon SQS valides ?

Brève description

Si votre fonction Lambda est limitée, renvoie une erreur ou ne répond pas lors de la lecture d'un lot de messages Amazon SQS, les messages retournent dans votre file d'attente. Après l'expiration du délai de visibilité, votre fonction Lambda reçoit à nouveau le lot de messages. Si votre fonction ne parvient pas à traiter plusieurs fois des messages valides, Amazon SQS envoie les messages à votre file d'attente de lettres mortes, si vous en avez configuré une.

Afin d'éviter que des messages valides ne soient placés dans une file d'attente de lettres mortes, votre code de fonction doit être idempotent et capable de traiter des messages plusieurs fois. Pour plus d'informations, consultez Comment puis-je empêcher un message Amazon SQS d'appeler ma fonction Lambda plusieurs fois ?

Résolution

Vérifiez que le code de votre fonction Lambda est idempotent

Pour connaître les bonnes pratiques en matière d'idempotence et accéder à un exemple de logique de fonction, veuillez consulter la section Comment rendre ma fonction Lambda idempotente ?

Vérifiez que le délai de visibilité de votre file d'attente Amazon SQS est au moins six fois plus long que le paramètre de délai d'expiration de votre fonction Lambda

Définissez le délai de visibilité de votre file d'attente source au moins six fois plus long que le délai d'expiration de votre fonction. Ce délai supplémentaire permet à votre fonction de relancer le traitement d'un lot si la fonction est limitée lors du traitement d'un lot précédent.

Pour plus d'informations, consultez la section Définition du délai de visibilité dans le guide du développeur Amazon SQS.

Remarque : si votre fonction ne reçoit pas de messages en raison d'un délai de visibilité de la file d'attente trop court, les messages ne seront pas enregistrés dans vos journaux Amazon CloudWatch Logs.

Vérifiez que l'attribut maxReceiveCount est défini sur au moins cinq dans la politique de réadaptation de votre file d'attente source

Définissez l'attribut maxReceiveCount sur la politique de réadaptation de la file d'attente source sur au moins cinq. Si votre fonction renvoie une erreur ou ne peut pas être appelée parce qu'elle atteint la simultanéité maximale, il est possible que le traitement aboutissent avec des tentatives supplémentaires. Un attribut maxReceiveCount défini sur une valeur supérieure ou égale à cinq donne à vos messages plus de chances d'être traités avant qu'ils ne soient envoyés dans votre file d'attente de lettres mortes.

Pour plus d'informations, consultez les sections Comment fonctionnent les files d'attente de lettres mortes ? et Évitez le traitement incohérent des messages dans le guide du développeur Amazon SQS.

Identifiez et résolvez les erreurs renvoyées par votre fonction Lambda

Suivez les instructions de la section Comment puis-je résoudre les problèmes d'échec de fonction Lambda ? Votre fonction supprime automatiquement les messages de votre file d'attente uniquement si elle ne renvoie pas d'erreur.


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


Besoin d'aide pour une question technique ou de facturation ?