Files d'attente de lettres mortes (DLQ)) d'Amazon SNS - Amazon Simple Notification Service

Files d'attente de lettres mortes (DLQ)) d'Amazon SNS

Une file d'attente de lettres mortes est une file d'attente Amazon SQS qu'un abonnement Amazon SNS peut cibler pour les messages qui ne peuvent pas être remis aux abonnés avec succès. Les messages qui ne peuvent pas être remis en raison d'erreurs du client ou d'erreurs de serveur sont conservés dans la file d'attente de lettres mortes pour une analyse ou un retraitement ultérieur. Pour de plus amples informations, consultez Configuration d'une file d'attente de lettres mortes Amazon SNS pour un abonnement et Nouvelle tentative de distribution des messages Amazon SNS.

Note
  • L'abonnement Amazon SNS et la file d'attente Amazon SQS doivent être sous le même compte et la même région AWS.

  • Pour une rubrique FIFO, utilisez une file d'attente FIFO d'Amazon SQS en tant que file d'attente de lettres mortes pour l'abonnement Amazon SNS.

  • Pour utiliser une file d'attente Amazon SQS chiffrée en tant que file d'attente de lettres mortes, vous devez utiliser une clé KMS personnalisée avec une politique de clé qui accorde au principal de service Amazon SNS l'accès aux actions d'API AWS KMS. Pour plus d'informations, consultez Chiffrement au repos dans ce guide et Protection des données Amazon SQS à l'aide du chiffrement côté serveur (SSE) et de AWS KMS dans le Guide du développeur Amazon Simple Queue Service.

Pourquoi les distributions de messages échouent-elles ?

En général, la distribution des messages échoue lorsqu'Amazon SNS ne peut pas accéder à un point de terminaison souscrit en raison d'une erreur côté client ou côté serveur. Lorsqu'Amazon SNS reçoit une erreur côté client ou continue de recevoir une erreur côté serveur pour un message au-delà du nombre de tentatives spécifié par la politique de nouvelle tentative correspondante, Amazon SNS rejette le message – sauf si une file d'attente de lettres mortes est attachée à l'abonnement. Les distributions qui échouent ne modifient pas le statut de vos abonnements. Pour de plus amples informations, consultez Nouvelle tentative de distribution des messages Amazon SNS.

Erreurs côté du client

Des erreurs côté client peuvent se produire lorsque des métadonnées d'abonnement Amazon SNS sont obsolètes. Ces erreurs se produisent généralement lorsqu'un propriétaire supprime le point de terminaison (par exemple une fonction Lambda abonnée à une rubrique Amazon SNS) ou lorsqu'un propriétaire modifie la politique attachée au point de terminaison souscrit d'une manière qui empêche Amazon SNS de délivrer des messages au point de terminaison. Amazon SNS ne tente pas de nouveau d'envoyer des messages qui échouent en raison d'une erreur côté client.

Erreurs côté serveur

Des erreurs côté serveur peuvent se produire lorsque le système responsable du point de terminaison souscrit devient indisponible ou renvoie une exception indiquant qu'il ne peut pas traiter une demande valable à partir d'Amazon SNS. Lorsque des erreurs côté serveur se produisent, Amazon SNS relance les distributions échouées à l'aide d'une fonction backoff exponentiel ou linéaire. Pour les erreurs côté serveur causées par des points de terminaison gérés par AWS qui reposent sur Amazon SQS ou AWS Lambda, Amazon SNS relance la distribution jusqu'à 100 015 fois, sur 23 jours.

Les points de terminaison gérés par le client (notamment HTTP, SMTP, SMS ou push mobile) peuvent également provoquer des erreurs côté serveur. Amazon SNS tente de nouveau l'envoi vers ces types de points de terminaison également. Alors que les points de terminaison HTTP prennent en charge les politiques de nouvelle tentative définies par le client, Amazon SNS définit une politique de nouvelle tentative de distribution interne à 50 fois sur 6 heures, pour les points de terminaison SMTP, SMS et push mobiles.

Fonctionnement des files d'attente de lettres mortes

Une file d'attente de lettres mortes est attachée à un abonnement Amazon SNS (plutôt qu'à une rubrique), car les messages sont délivrés au niveau de l'abonnement. Cela vous permet d'identifier plus facilement le point de terminaison cible d'origine pour chaque message.

Une file d'attente de lettres mortes associée à un abonnement Amazon SNS est une file d'attente Amazon SQS ordinaire. Pour de plus amples informations sur la période de rétention des messages, consultez Quotas liés aux messages dans le Guide du développeur Amazon Simple Queue Service. Vous pouvez modifier la période de rétention des messages à l'aide de l'action d'API SetQueueAttributes d'Amazon SQS. Pour rendre vos applications plus résilientes, nous vous recommandons de fixer à 14 jours la période de rétention maximale pour les files d'attente de lettres mortes.

Comment les messages sont-ils déplacés dans une file d'attente de lettres mortes ?

Vos messages sont déplacés dans une file d'attente de lettres mortes à l'aide d'une politique de redirection. Une politique de redirection est un objet JSON qui fait référence à l'ARN de la file d'attente de lettres mortes. L'attribut deadLetterTargetArn spécifie l’ARN. L'ARN doit pointer vers une file d'attente Amazon SQS dans le même Compte AWS et la même région que votre abonnement Amazon SNS. Pour de plus amples informations, consultez Configuration d'une file d'attente de lettres mortes Amazon SNS pour un abonnement.

Note

Pour une rubrique FIFO, utilisez une file d'attente FIFO d'Amazon SQS en tant que file d'attente de lettres mortes pour l'abonnement Amazon SNS.

L'objet JSON suivant est un exemple de politique de redirection attachée à un abonnement SNS.

{ "deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue" }

Comment puis-je déplacer des messages hors d'une file d'attente de lettres mortes ?

Vous pouvez déplacer les messages hors d'une file d'attente de lettres mortes de deux façons :

  • Éviter d'écrire une logique de consommateur Amazon SQS – Définissez votre file d'attente de lettres mortes comme source d'évènement pour la fonction Lambda afin de purger votre file d'attente de lettres mortes.

  • Écrire une logique de consommateur Amazon SQS – Utilisez l'API Amazon SQS, le kit SDK AWS ou la AWS CLI pour écrire une logique consommateur personnalisée pour l'interrogation, le traitement et la suppression des messages dans la file d'attente de lettres mortes.

Comment puis-je contrôler et consigner les files d'attente de lettres mortes ?

Vous pouvez utiliser les métriques Amazon CloudWatch pour contrôler les files d'attente de lettres mortes associées à vos abonnements Amazon SNS. Toutes les files d'attente Amazon SQS émettent des métriques CloudWatch à intervalles d'une minute. Pour de plus amples informations, consultez Métriques CloudWatch disponibles pour Amazon SQS dans le Guide du développeur Amazon Simple Queue Service. Tous les abonnements Amazon SNS qui comportent des files d'attente de lettres mortes émettent également des métriques CloudWatch. Pour plus d'informations, consultez Surveillance des rubriques Amazon SNS à l'aide de CloudWatch.

Pour être averti de l'activité dans vos files d'attente de lettres mortes, vous pouvez utiliser les métriques et les alarmes CloudWatch. Par exemple, lorsque vous vous attendez à ce que la file d'attente des lettres mortes soit toujours vide, vous pouvez créer une alarme CloudWatch pour la métrique NumberOfMessagesSent. Vous pouvez définir le seuil d'alarme sur 0 et spécifier une rubrique Amazon SNS à notifier lorsque l'alarme se déclenche. Cette rubrique Amazon SNS peut délivrer votre notification d'alarme à n'importe quel type de point de terminaison (par exemple, une adresse e-mail, un numéro de téléphone ou une application de téléavertisseur mobile).

Vous pouvez utiliser CloudWatch Logs pour rechercher les exceptions qui provoquent l'échec des distributions Amazon SNS et pour envoyer des messages dans des files d'attente de lettres mortes. Amazon SNS peut journaliser les distributions réussies et échouées dans CloudWatch. Pour plus d'informations, consultez Statut de distribution de message Amazon SNS.