

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Distribution des messages Amazon SNS
<a name="message-delivery"></a>

Cette rubrique décrit comment Amazon SNS gère la livraison des messages dans différents scénarios. Vous découvrirez la livraison de messages bruts, où Amazon SNS envoie les messages dans leur format d'origine non modifié au point de terminaison. Vous découvrirez également comment envoyer des messages depuis une rubrique Amazon SNS vers une file d'attente Amazon SQS située dans une Compte AWS autre rubrique, afin d'obtenir des informations sur la messagerie entre comptes.

Cette rubrique fournit des informations sur la distribution de messages Amazon SNS à une file d'attente Amazon SQS ou à une fonction Lambda de Régions AWS différentes manières, sur le fonctionnement de la diffusion entre régions et sur les considérations à prendre en compte.

En outre, vous apprendrez à surveiller et à interpréter l'état de livraison des messages, qui fournit des informations essentielles pour savoir si les messages ont été correctement livrés ou ont rencontré des problèmes. En cas d'échec de la livraison des messages, vous comprendrez le processus de nouvelle tentative de remise des messages, notamment la façon dont Amazon SNS tente automatiquement de les redistribuer pour s'assurer qu'ils atteignent leur destination prévue. Cette rubrique décrit également l'utilisation de files d'attente de lettres mortes pour capturer les messages qui n'ont pas pu être remis après plusieurs tentatives, ce qui vous permet d'analyser et de résoudre efficacement ces défaillances.

# Remise des messages bruts Amazon SNS
<a name="sns-large-payload-raw-message-delivery"></a>

Pour éviter que les points de terminaison [Amazon SQS](sns-sqs-as-subscriber.md) et [HTTP/S](sns-http-https-endpoint-as-subscriber.md) ne traitent le formatage JSON des messages, Amazon SNS autorise la livraison de messages bruts : [Streams de diffusion de Fanout to Firehose](sns-firehose-as-subscriber.md)
+ Lorsque vous activez la livraison de messages bruts pour ou pour les points de terminaison Amazon SQS, toutes les métadonnées Amazon SNS sont supprimées du message publié et le message est envoyé tel quel.
+ Lorsque vous activez la livraison de messages bruts pour les HTTP/S points de terminaison, l'en-tête HTTP `x-amz-sns-rawdelivery` dont la valeur `true` est définie sur est ajouté au message, indiquant que le message a été publié sans formatage JSON.
+ Lorsque vous activez la livraison de messages bruts pour les HTTP/S points de terminaison, le corps du message, l'adresse IP du client et les en-têtes requis sont transmis. Lorsque vous spécifiez des attributs de message, ils ne seront pas envoyés.
+ Lorsque vous activez la livraison de messages bruts pour les terminaux Firehose, le corps du message est délivré. Lorsque vous spécifiez des attributs de message, ils ne seront pas envoyés.

Pour activer la livraison de messages bruts à l'aide d'un AWS SDK, vous devez utiliser l'action `SetSubscriptionAttribute` API et définir la valeur de l'`RawMessageDelivery`attribut sur. `true`

## Activation de la livraison de messages bruts à l'aide du AWS Management Console
<a name="raw-message-console"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Rubriques**.

1. Sur la page **Rubriques**, choisissez une rubrique abonnée à un Firehose, à Amazon SQS ou à un point de terminaison. HTTP/S 

1. Sur la ***MyTopic*** page, dans la section **Abonnement**, choisissez un abonnement, puis sélectionnez **Modifier**.

1. Sur la *EXAMPLE1-23bc-4567-d890-ef12g3hij456* page **Modifier**, dans la section **Détails**, choisissez **Activer la livraison de messages bruts**.

1. Sélectionnez **Enregistrer les modifications**.

## Exemples de format des messages
<a name="raw-message-examples"></a>

Dans les exemples suivants, le même message est envoyé deux fois à la même file d'attente Amazon SQS. La seule différence est que la remise des messages bruts est désactivée pour le premier message et activée pour le second. 
+ La remise des messages bruts est **désactivée**

  ```
  {
    "Type": "Notification",
    "MessageId": "dc1e94d9-56c5-5e96-808d-cc7f68faa162",
    "TopicArn": "arn:aws:sns:us-east-2:111122223333:ExampleTopic1",
    "Subject": "TestSubject",
    "Message": "This is a test message.",
    "Timestamp": "2021-02-16T21:41:19.978Z",
    "SignatureVersion": "1",
    "Signature": "FMG5tlZhJNHLHUXvZgtZzlk24FzVa7oX0T4P03neeXw8ZEXZx6z35j2FOTuNYShn2h0bKNC/zLTnMyIxEzmi2X1shOBWsJHkrW2xkR58ABZF+4uWHEE73yDVR4SyYAikP9jstZzDRm+bcVs8+T0yaLiEGLrIIIL4esi1llhIkgErCuy5btPcWXBdio2fpCRD5x9oR6gmE/rd5O7lX1c1uvnv4r1Lkk4pqP2/iUfxFZva1xLSRvgyfm6D9hNklVyPfy+7TalMD0lzmJuOrExtnSIbZew3foxgx8GT+lbZkLd0ZdtdRJlIyPRP44eyq78sU0Eo/LsDr0Iak4ZDpg8dXg==",
    "SigningCertURL": "https://sns.us-east-2.amazonaws.com/SimpleNotificationService-010a507c1833636cd94bdb98bd93083a.pem",
    "UnsubscribeURL": "https://sns.us-east-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-2:111122223333:ExampleTopic1:e1039402-24e7-40a3-a0d4-797da162b297"
  }
  ```
+ La remise des messages bruts est **activée**

  ```
  This is a test message.
  ```

## Attributs des messages et envoi de messages bruts pour les abonnements Amazon SQS
<a name="message-atttributes-raw-message-delivery-sqs"></a>

Amazon SNS prend en charge la livraison d'attributs de message, qui vous permettent de fournir des éléments de métadonnées structurés, tels que des horodatages, des données géospatiales, des signatures et des identifiants, concernant le message. Pour les abonnements Amazon SQS avec la **livraison de messages bruts** activée, un maximum de 10 attributs de message peuvent être envoyés. Pour envoyer plus de 10 attributs de message, vous devez désactiver la livraison de messages bruts. Cependant, Amazon SNS rejette les messages contenant plus de 10 attributs de message destinés aux abonnements Amazon SQS avec l'option Raw Message Delivery activée, les traitant comme des erreurs côté client.

# Envoi de messages Amazon SNS à une file d'attente Amazon SQS d'un autre compte
<a name="sns-send-message-to-sqs-cross-account"></a>

Ce document explique comment publier une notification dans une rubrique Amazon SNS avec un ou plusieurs abonnements à des files d'attente Amazon SNS dans un autre compte. Configurez la rubrique et les files d'attente de la même manière que vous le feriez s'ils se trouvaient dans le même compte (voir [Notifications Amazon SNS envoyées aux files d'attente Amazon SQS pour un traitement asynchrone](sns-sqs-as-subscriber.md)). La différence majeure réside dans le traitement de la confirmation d'abonnement, qui varie selon le mode d'abonnement de la file d'attente à la rubrique.

Il est recommandé de suivre les étapes référencées dans la section [Création de l'abonnement par le propriétaire de la file d'attente](#SendMessageToSQS.cross.account.queueowner) lorsque c'est possible, car la confirmation est automatique lorsque le propriétaire de la file d'attente crée l'abonnement.

**Note**  
Si la file d'attente Amazon SQS contient un volume élevé de messages, nous recommandons au propriétaire de la file d'attente de créer l'abonnement.

## Création de l'abonnement par le propriétaire de la file d'attente
<a name="SendMessageToSQS.cross.account.queueowner"></a>

Le compte qui a créé la file d'attente Amazon SNS est le propriétaire de la file d'attente. Lorsque le propriétaire de la file d'attente crée un abonnement, ce dernier ne requiert pas de confirmation. La file d'attente commence à recevoir des notifications de la rubrique dès que l'action `Subscribe` est terminée. Pour permettre au propriétaire de la file d'attente de s'abonner à la rubrique du propriétaire de la rubrique, ce dernier doit accorder au propriétaire de la file d'attente l'autorisation d'appeler l'action `Subscribe` sur la rubrique.

### Étape 1 : Pour définir la politique du sujet à l'aide du AWS Management Console
<a name="sns-tutorial-set-topic-policy"></a>

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Rubriques**.

1. Sélectionnez une rubrique, puis choisissez **Modifier**.

1. Sur la *MyTopic* page **Modifier**, développez la section **Politique d'accès**.

1. Saisissez la politique suivante :

   ```
   {
      "Statement": [
         {
            "Effect": "Allow",
            "Principal": {
               "AWS": "111122223333"
            },
            "Action": "sns:Subscribe",
            "Resource": "arn:aws:sns:us-east-2:123456789012:MyTopic"
         }
      ]
   }
   ```

   Cette stratégie donne au compte `111122223333` l’autorisation d'appeler `sns:Subscribe`sur `MyTopic` dans le compte `123456789012`.

   Un utilisateur possédant les informations d'identification pour le compte `111122223333` peut s'abonner à `MyTopic`. Cette autorisation permet à l'ID de compte de déléguer l'autorisation à son utilisateur/rôle IAM. Seuls les utilisateurs du compte racine ou les administrateurs seront autorisés à appeler `sns:Subscribe`. L'IAM user/role doit également autoriser sa file d'attente à s'abonner. `sns:subscribe`

1. Sélectionnez **Enregistrer les modifications**.

   Un utilisateur possédant les informations d'identification du compte `111122223333` peut s'abonner à MyTopic.

### Étape 2 : Pour ajouter un abonnement à la file d'attente Amazon SQS à une rubrique d'une autre Compte AWS à l'aide du AWS Management Console
<a name="sns-tutorial-add-sqs-subscription-to-sns-topic-another-account"></a>

Avant de commencer, assurez-vous que vous disposez des informations correspondant ARNs à votre sujet et à votre file d'attente, et que vous avez [autorisé le sujet à envoyer des messages à la file d'attente](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions).

1. Connectez-vous à la [console Amazon SQS](https://console.aws.amazon.com/sqs/home).

1. Dans le panneau de navigation, choisissez **Queues** (Files d’attente).

1.  Dans la liste des files d'attente, choisissez la **file d'attente** à abonner à la rubrique Amazon SNS.

1. Choisissez **Subscribe to Amazon SNS topic** (Abonner à la rubrique Amazon SNS).

1. Dans **Spécifiez une rubrique Amazon SNS disponible pour ce menu de file d'attente**, choisissez la **Rubrique Amazon SNS** pour votre file d'attente.

1. Choisissez **Entrer l'ARN de la rubrique Amazon SNS**, puis entrez la rubrique **Amazon Resource Name (ARN)**.

1. Choisissez **Enregistrer**.
**Note**  
Pour pouvoir communiquer avec le service, la file d'attente doit disposer des autorisations pour Amazon SNS.
Parce que vous êtes le propriétaire de la file d'attente, vous n'avez pas à confirmer l'abonnement.

## Création de l'abonnement par un utilisateur qui n'est pas le propriétaire de la file d'attente
<a name="SendMessageToSQS.cross.account.notqueueowner"></a>

Tout utilisateur qui crée un abonnement mais qui n'est pas le propriétaire de la file d'attente doit confirmer l'abonnement.

Lorsque vous utilisez l'action `Subscribe`, Amazon SNS envoie une confirmation d'abonnement à la file d'attente. L'abonnement s'affiche dans la console Amazon SNS et son ID d'abonnement est défini sur **Confirmation en attente**.

Pour confirmer l'abonnement, un utilisateur autorisé à lire des messages dans la file d'attente doit récupérer l'URL de confirmation d'abonnement, et le propriétaire de l'abonnement doit confirmer l'abonnement à l'aide de l'URL de confirmation d'abonnement. Aucune notification publiée dans la rubrique n'est envoyée à la file d'attente, tant que l'abonnement n'est pas confirmé. Pour confirmer l'abonnement, vous pouvez utiliser la console Amazon SQS ou l'action `[ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryReceiveMessage.html)`.

**Note**  
Avant d'abonner un point de terminaison à la rubrique, assurez-vous que la file d'attente peut recevoir des messages de la rubrique en définissant l'autorisation `sqs:SendMessage` pour la file d'attente. Pour de plus amples informations, veuillez consulter [Étape 2 : autoriser la rubrique Amazon SNS à envoyer des messages à la file d'attente Amazon SQS](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions).

### Étape 1 : Pour ajouter un abonnement à la file d'attente Amazon SQS à une rubrique d'une autre Compte AWS à l'aide du AWS Management Console
<a name="sns-tutorial-add-sqs-subscription-to-sns-topic-another-account"></a>

Avant de commencer, assurez-vous que vous disposez des informations correspondant ARNs à votre sujet et à votre file d'attente, et que vous avez [autorisé le sujet à envoyer des messages à la file d'attente](subscribe-sqs-queue-to-sns-topic.md#SendMessageToSQS.sqs.permissions).

1. Connectez-vous à la [ console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Abonnements**. 

1. Sur la page **Abonnements**, choisissez **Créer un abonnement**.

1.  Sur la page **Créer un abonnement**, dans la section **Détails**, procédez comme suit :

   1. Pour **ARN de la rubrique**, entrez l'ARN de la rubrique.

   1. Pour **Protocole**, choisissez **Amazon SQS**.

   1. Pour **Point de terminaison**, entrez l'ARN de la file d'attente.

   1. Choisissez **Créer un abonnement**.
**Note**  
Pour pouvoir communiquer avec le service, la file d'attente doit disposer des autorisations pour Amazon SNS.

Voici un exemple d'énoncé de stratégie qui permet à la rubrique Amazon SNS d'envoyer un message à la file d'attente Amazon SQS.

```
{
   "Sid": "Stmt1234",
   "Effect": "Allow",
   "Principal": "*",
   "Action": "sqs:SendMessage",
   "Resource": "arn:aws:sqs:us-west-2:111111111111:QueueName",
   "Condition": {
      "ArnEquals": {
         "aws:SourceArn": "arn:aws:sns:us-west-2:555555555555:TopicName"
      }
   }
}
```

### Étape 2 : Pour confirmer un abonnement à l'aide du AWS Management Console
<a name="sns-tutorial-confirm-subscription-console"></a>

1. Connectez-vous à la [console Amazon SQS](https://console.aws.amazon.com/sqs/).

1. Sélectionnez la file d'attente comportant un abonnement à la rubrique en attente.

1. Choisissez **Send and receive messages** (Envoyer et recevoir des messages), puis **Poll for messages** (Rechercher des messages).

   Un message contenant la confirmation de l'abonnement est reçu dans la file d'attente.

1. Dans la colonne **Corps** procédez comme suit :

   1. Choisissez **Plus de détails**.

   1. Dans la boîte de dialogue **Message Details (Détails des messages)**, recherchez et notez la valeur de **SubscribeURL**. Il s'agit du lien de votre abonnement (exemple ci-dessous). Pour plus d'informations sur la validation des jetons d'API, consultez [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) dans la référence d'API Amazon SNS.

      ```
      https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-east-2:123456789012:MyTopic&Token=2336412f37fb...
      ```

   1. Notez le lien de confirmation d'abonnement. L'URL doit être transmise du propriétaire de la file d'attente au propriétaire de l'abonnement. Le propriétaire de l'abonnement doit entrer l'URL dans la [Console Amazon SNS](https://console.aws.amazon.com/sns/v3/home).

1. Connectez-vous en tant que **propriétaire de l'abonnement** à la [Console Amazon SNS](https://console.aws.amazon.com/sns/v3/home) Le propriétaire de l'abonnement effectue la confirmation.

1. Choisissez la **rubrique appropriée**.

1. Choisissez l'**abonnement** approprié dans le tableau des listes d'abonnements de la rubrique. Il est étiqueté comme « Confirmation en attente ».

1. Choisissez le lien de **Confirmer l'abonnement**.

1. Un modal apparaît pour indiquer le lien de confirmation de l'abonnement. **Collez** le lien de confirmation de l'abonnement.

1. Sélectionnez la **confirmation de l'abonnement** dans le modal.

   Une réponse XML s'affiche, par exemple :

   ```
   <ConfirmSubscriptionResponse>
      <ConfirmSubscriptionResult>
         <SubscriptionArn>arn:aws:sns:us-east-2:123456789012:MyTopic:1234a567-bc89-012d-3e45-6fg7h890123i</SubscriptionArn>
      </ConfirmSubscriptionResult>
      <ResponseMetadata>
         <RequestId>abcd1efg-23hi-jkl4-m5no-p67q8rstuvw9</RequestId>
      </ResponseMetadata>
   </ConfirmSubscriptionResponse>
   ```

   La file d'attente abonnée est prête à recevoir des messages de la rubrique.

1. (Facultatif) Si vous affichez l'abonnement à la rubrique dans la console Amazon SNS, vous pouvez constater que le message **Confirmation en attente** a été remplacé par l'ARN d'abonnement dans la colonne **ID de l'abonnement**.

## Comment forcer un abonnement à exiger une authentification sur les demandes de désabonnement ?
<a name="sns-send-message-to-sqs-cross-account-AuthenticateOnUnsubscribe"></a>

Le propriétaire de l'abonnement doit définir l'indicateur `AuthenticateOnUnsubscribe` sur true lors de la confirmation de l'abonnement.
+ `AuthenticateOnUnsubscribe` est automatiquement défini sur true lorsque le propriétaire de la file d'attente crée l'abonnement.
+ `AuthenticateOnUnsubscribe` ne peut pas être défini sur true lorsque le lien de confirmation de l'abonnement est atteint sans authentification.

# Envoi de messages Amazon SNS à une file d'attente AWS Lambda ou à une fonction Amazon SQS dans une autre région
<a name="sns-cross-region-delivery"></a>

Amazon SNS prend en charge les livraisons interrégionales, à la fois pour les régions activées par défaut et pour les [régions d'adhésion](#opt-in-regions). Pour obtenir la liste actuelle des régions AWS prises en charge par Amazon SNS, y compris les régions d'adhésion, consultez [Points de terminaison et quotas Amazon Simple Notification Service](https://docs.aws.amazon.com/general/latest/gr/sns.html) dans la *Référence générale d'Amazon Web Services.* 

Amazon SNS prend en charge la livraison interrégionale de notifications aux files d'attente Amazon SQS et aux fonctions AWS Lambda Lorsque l'une des régions est une région d'adhésion, vous devez spécifier un principal de service Amazon SNS différent dans la stratégie de la ressource abonnée.

La commande d'abonnement Amazon SNS doit être exécutée dans la région où Amazon SNS est hébergé, dans la région correspondante. Par exemple, si Amazon SNS figure dans le compte « A », dans la région us-east-1, et que la fonction Lambda figure dans le compte « B », dans la région us-east-2, la commande CLI d'abonnement doit être exécutée dans le compte « A », dans la région us-east-1.

## Régions d'activation
<a name="opt-in-regions"></a>

Amazon SNS prend en charge les régions d'adhésion suivantes : 


| Nom de la région | Région | 
| --- | --- | 
|  Région Afrique (Le Cap)  |  af-south-1  | 
|  Région Asie-Pacifique (Hong Kong)  |  ap-east-1  | 
|  Région Asie-Pacifique (Hyderabad)  |  ap-south-2  | 
|  Région Asie-Pacifique (Jakarta)  |  ap-southeast-3  | 
|  Région Asie-Pacifique (Melbourne)  |  ap-southeast-4  | 
|  Europe (Milan) Region  |  eu-south-1  | 
|  Région Europe (Espagne)  |  eu-south-2  | 
|  Région Europe (Zurich)  |  eu-central-2  | 
|  Région Israël (Tel Aviv)  |  il-central-1  | 
|  Middle East (Bahrain) Region  |  me-south-1  | 
|  Région du Moyen-Orient (EAU)  |  me-central-1  | 

*Pour plus d'informations sur l'activation d'une région optionnelle, consultez la section [Gestion des AWS régions](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) dans le Référence générale d'Amazon Web Services.*

Lorsque vous utilisez Amazon SNS pour distribuer des messages à partir de régions d'adhésion vers des régions activées par défaut, vous devez modifier la politique de ressource créée pour la file d'attente. Remplacez le principal `sns.amazonaws.com` par `sns.<opt-in-region>.amazonaws.com`. Par exemple : 
+  Pour vous abonner à une file d'attente Amazon SQS dans la région USA Est (Virginie du Nord) pour une rubrique SNS en Asie-Pacifique (Hong Kong), remplacez le principal dans la stratégie de la file d'attente par `sns.ap-east-1.amazonaws.com`. Les régions d'adhésion comprennent toutes les régions lancées après le 20 mars 2019, notamment Asie-Pacifique (Hong Kong), Asie-Pacifique (Jakarta), Moyen-Orient (Bahreïn), Europe (Milan) et Afrique (Le Cap). Les régions lancées avant le 20 mars 2019 sont activées par défaut.   
**Prise en charge de la livraison interrégionale à Amazon SQS**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/sns-cross-region-delivery.html)

  Voici un exemple de déclaration de politique d'accès qui autorise une rubrique Amazon SNS d'une région optionnelle (af-south-1) à être envoyée à une file d'attente Amazon SQS d'une région (us-east-1). enabled-by-default Il contient la configuration principale de service régionalisée nécessaire sous le chemin d’accès `Statement`/`Principal`/`Service`. 

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "__default_policy_ID",
      "Statement": [
          {
              "Sid": "allow_sns_arn:aws:sns:af-south-1:111111111111:source_topic_name",
              "Effect": "Allow",
              "Principal": {
                  "Service": "sns.af-south-1.amazonaws.com"
              },
              "Action": "SQS:SendMessage",
              "Resource": "arn:aws:sqs:us-west-1:111111111111:destination_queue_name",
              "Condition": {
                  "ArnLike": {
                      "aws:SourceArn": "arn:aws:sns:af-south-1:111111111111:source_topic_name"
                  }
              }
          }
      ]
  }
  ```

------
+  Pour abonner une AWS Lambda fonction située dans l'est des États-Unis (Virginie du Nord) à une rubrique Amazon SNS en Asie-Pacifique (Hong Kong), remplacez le principal de la politique des AWS Lambda fonctions par. `sns.ap-east-1.amazonaws.com` Les régions d'adhésion comprennent toutes les régions lancées après le 20 mars 2019, notamment Asie-Pacifique (Hong Kong), Asie-Pacifique (Jakarta), Moyen-Orient (Bahreïn), Europe (Milan) et Afrique (Le Cap). Les régions lancées avant le 20 mars 2019 sont activées par défaut.   
**Assistance à la livraison interrégionale pour AWS Lambda**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/sns-cross-region-delivery.html)

# Statut de distribution de message Amazon SNS
<a name="sns-topic-attributes"></a>

Amazon SNS prend en charge la journalisation de l'état de livraison des messages de notification envoyés à des rubriques comportant les points de terminaison Amazon SNS suivants : 
+ Amazon Data Firehose
+ Amazon Simple Queue Service
+ AWS Lambda
+ HTTPS
+ Point de terminaison de l'application de plateforme

Les journaux d'état de livraison sont envoyés à Amazon CloudWatch Logs, fournissant des informations sur les opérations de livraison des messages. Ces journaux vous aident à :
+ Déterminez si un message a été correctement envoyé à un point de terminaison.
+ Identifiez la réponse du point de terminaison à Amazon SNS.
+ Mesurez le temps d'attente des messages (temps entre l'horodatage de publication et le transfert au terminal).

Vous pouvez configurer la journalisation de l'état de livraison à l' AWS Management Console aide de l'API,, Query ou AWS CloudFormation. AWS SDKs

# Conditions préalables à l'enregistrement de l'état de livraison
<a name="topics-attrib-prereq"></a>

Cette rubrique décrit les autorisations IAM nécessaires pour permettre à Amazon SNS d'écrire des journaux de livraison et explique la convention CloudWatch de dénomination des groupes de journaux par défaut. Cela garantit que vous disposez de la configuration et de l'accès appropriés pour surveiller et analyser les journaux de distribution des messages dans CloudWatch les journaux.

**Autorisations IAM requises**

Le rôle IAM associé à la journalisation de l'état de livraison doit inclure les autorisations suivantes pour permettre à Amazon SNS d'écrire CloudWatch dans Logs. Vous pouvez utiliser un rôle existant avec ces autorisations ou créer un nouveau rôle lors de la configuration.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
```

------

**Convention de dénomination des groupes de journaux**

Par défaut, Amazon SNS crée des groupes de journaux pour les CloudWatch journaux d'état de livraison en utilisant la convention de dénomination suivante. Les flux de journaux au sein de ce groupe correspondent aux protocoles des terminaux (par exemple, Lambda, Amazon SQS). Vérifiez que vous êtes autorisé à consulter ces journaux dans la console CloudWatch Logs.

```
sns/<region>/<account-id>/<topic-name>
```

# Configuration de l'enregistrement de l'état de livraison à l'aide du AWS Management Console
<a name="topics-attrib"></a>

Cette rubrique explique comment activer la journalisation de l'état de livraison des messages pour les rubriques Amazon SNS, notamment la configuration des paramètres de journalisation, l'attribution de rôles IAM et la vérification que les CloudWatch journaux capturent les journaux de livraison à des fins de surveillance et de résolution des problèmes.

1. Connectez-vous à la [console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Rubriques**.

1. Sélectionnez le **sujet** souhaité, puis choisissez **Modifier**.

1. Développez la section **Enregistrement de l'état de livraison**.

1. Choisissez le **protocole** pour lequel vous souhaitez activer la journalisation (par exemple, HTTP, Lambda, Amazon SQS).

1. Entrez le **taux d'échantillonnage de réussite**, qui est le pourcentage de messages réussis pour lesquels vous souhaitez recevoir des CloudWatch journaux.

1. Dans la section **Rôles IAM**, vous devez configurer les rôles pour la journalisation des **réussites** et des **échecs** :
   + **Utiliser un rôle de service existant** : sélectionnez un rôle IAM existant disposant des autorisations requises pour qu'Amazon SNS puisse y écrire des journaux. CloudWatch
   + **Créer un nouveau rôle de service** : choisissez **Créer de nouveaux rôles** pour définir les rôles IAM pour les livraisons réussies et échouées dans la console IAM. Pour plus de détails sur les autorisations, voir[Conditions préalables à l'enregistrement de l'état de livraison](topics-attrib-prereq.md).

1. Sélectionnez **Enregistrer les modifications**.

   Après avoir activé la journalisation, vous pouvez afficher et analyser les CloudWatch journaux contenant l'état de livraison des messages. Pour plus d'informations sur l'utilisation CloudWatch, consultez la [CloudWatchdocumentation](https://aws.amazon.com/documentation/cloudwatch).

**Vérification de la configuration du journal**

1. Connectez-vous à la console CloudWatch Logs.

1. Localisez le groupe de journaux nommé`sns/<region>/<account-id>/<topic-name>`.

1. Assurez-vous que les flux de journaux existent pour le protocole de point de terminaison configuré.

1. Envoyez un message test à votre sujet et vérifiez que les entrées du journal apparaissent, indiquant les livraisons réussies ou échouées.

# Configuration de l'enregistrement de l'état de livraison à l'aide du AWS SDKs
<a name="msg-status-sdk"></a>

Ils AWS SDKs fournissent, APIs en plusieurs langues, des attributs de rubrique pour l'enregistrement de l'état de livraison des messages. Par exemple, utilisez l'[SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)API pour configurer :
+ `LambdaSuccessFeedbackRoleArn`— Rôle IAM pour une transmission réussie des messages aux points de terminaison Lambda.
+ `LambdaSuccessFeedbackSampleRate`— Taux d'échantillonnage des messages envoyés avec succès aux points de terminaison Lambda.
+ `LambdaFailureFeedbackRoleArn`— Rôle IAM en cas d'échec de transmission de messages aux points de terminaison Lambda.

**Exemple de AWS CLI commande**

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \
    --attribute-name LambdaSuccessFeedbackRoleArn \
    --attribute-value arn:aws:iam::123456789012:role/MyFeedbackRole
```

## Attributs de rubrique
<a name="topic-attributes"></a>

Utilisez les valeurs de nom d'attribut de rubrique suivantes pour l'état de livraison des messages :

**HTTP**
+ `HTTPSuccessFeedbackRoleArn`— État de livraison du message réussi pour une rubrique Amazon SNS abonnée à un point de terminaison HTTP. 
+ `HTTPSuccessFeedbackSampleRate`— Pourcentage de messages réussis à échantillonner pour une rubrique Amazon SNS abonnée à un point de terminaison HTTP.
+ `HTTPFailureFeedbackRoleArn`— État d'échec de livraison du message pour une rubrique Amazon SNS abonnée à un point de terminaison HTTP.

**Amazon Data Firehose**
+ `FirehoseSuccessFeedbackRoleArn`— État de livraison du message réussi pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon Data Firehose.
+ `FirehoseSuccessFeedbackSampleRate`— Pourcentage de messages réussis à échantillonner pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon Data Firehose.
+ `FirehoseFailureFeedbackRoleArn`— État d'échec de livraison du message pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon Data Firehose. 

**AWS Lambda**
+ `LambdaSuccessFeedbackRoleArn`— État de livraison du message réussi pour une rubrique Amazon SNS abonnée à un point de terminaison Lambda.
+ `LambdaSuccessFeedbackSampleRate`— Pourcentage de messages réussis à échantillonner pour une rubrique Amazon SNS abonnée à un point de terminaison Lambda.
+ `LambdaFailureFeedbackRoleArn`— État d'échec de livraison du message pour une rubrique Amazon SNS abonnée à un point de terminaison Lambda. 

**Points de terminaison des applications de plate-forme**
+ `ApplicationSuccessFeedbackRoleArn`— État de livraison du message réussi pour une rubrique Amazon SNS abonnée à un point de terminaison d' AWS application.
+ `ApplicationSuccessFeedbackSampleRate`— Pourcentage de messages réussis à échantillonner pour une rubrique Amazon SNS abonnée à un point de terminaison d' AWS application.
+ `ApplicationFailureFeedbackRoleArn`— État d'échec de livraison du message pour une rubrique Amazon SNS abonnée à un point de terminaison d' AWS application.
**Note**  
En outre, vous pouvez configurer les attributs de l'application pour enregistrer l'état de livraison directement dans les services de notification push. Pour plus d'informations, consultez la page [Utilisation des attributs d'application Amazon SNS pour le statut de distribution du message](https://docs.aws.amazon.com/sns/latest/dg/sns-msg-status.html). 

**Amazon SQS**
+ `SQSSuccessFeedbackRoleArn`— État de livraison du message réussi pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon SQS. 
+ `SQSSuccessFeedbackSampleRate`— Pourcentage de messages réussis à échantillonner pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon SQS. 
+ `SQSFailureFeedbackRoleArn`— État d'échec de livraison du message pour une rubrique Amazon SNS abonnée à un point de terminaison Amazon SQS. 

Les journaux des points de terminaison des applications de plate-forme sont écrits dans le même groupe de CloudWatch journaux que les autres points de terminaison.

**Note**  
 Les `<ENDPOINT>FailureFeedbackRoleArn` attributs `<ENDPOINT>SuccessFeedbackRoleArn` et sont utilisés pour donner à Amazon SNS un accès en écriture lui permettant d'utiliser CloudWatch Logs en votre nom. L'attribut `<ENDPOINT>SuccessFeedbackSampleRate` permet de spécifier le pourcentage de la fréquence d’échantillonnage (0-100) des messages diffusés avec succès. Une fois que vous avez configuré l'`<ENDPOINT>FailureFeedbackRoleArn`attribut, tous les messages ayant échoué génèrent des CloudWatch journaux. 

# AWS Exemples de SDK pour configurer les attributs des rubriques
<a name="topic-attributes-sdks"></a>

Les exemples de code suivants illustrent comment utiliser `SetTopicAttributes`.

------
#### [ CLI ]

**AWS CLI**  
**Pour définir un attribut pour une rubrique**  
L’exemple `set-topic-attributes` suivant définit l’attribut `DisplayName` pour la rubrique spécifiée.  

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-west-2:123456789012:MyTopic \
    --attribute-name DisplayName \
    --attribute-value MyTopicDisplayName
```
Cette commande ne produit aucune sortie.  
+  Pour plus de détails sur l'API, reportez-vous [SetTopicAttributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sns/set-topic-attributes.html)à la section *Référence des AWS CLI commandes*. 

------
#### [ Java ]

**SDK pour Java 2.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javav2/example_code/sns#code-examples). 

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sns.SnsClient;
import software.amazon.awssdk.services.sns.model.SetTopicAttributesRequest;
import software.amazon.awssdk.services.sns.model.SetTopicAttributesResponse;
import software.amazon.awssdk.services.sns.model.SnsException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 */
public class SetTopicAttributes {

    public static void main(String[] args) {
        final String usage = """

                Usage:    <attribute> <topicArn> <value>

                Where:
                   attribute - The attribute action to use. Valid parameters are: Policy | DisplayName | DeliveryPolicy .
                   topicArn - The ARN of the topic.\s
                   value - The value for the attribute.
                """;

        if (args.length < 3) {
            System.out.println(usage);
            System.exit(1);
        }

        String attribute = args[0];
        String topicArn = args[1];
        String value = args[2];

        SnsClient snsClient = SnsClient.builder()
                .region(Region.US_EAST_1)
                .build();

        setTopAttr(snsClient, attribute, topicArn, value);
        snsClient.close();
    }

    public static void setTopAttr(SnsClient snsClient, String attribute, String topicArn, String value) {
        try {
            SetTopicAttributesRequest request = SetTopicAttributesRequest.builder()
                    .attributeName(attribute)
                    .attributeValue(value)
                    .topicArn(topicArn)
                    .build();

            SetTopicAttributesResponse result = snsClient.setTopicAttributes(request);
            System.out.println(
                    "\n\nStatus was " + result.sdkHttpResponse().statusCode() + "\n\nTopic " + request.topicArn()
                            + " updated " + request.attributeName() + " to " + request.attributeValue());

        } catch (SnsException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```
+  Pour plus de détails sur l'API, voir [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForJavaV2/sns-2010-03-31/SetTopicAttributes)la section *Référence des AWS SDK for Java 2.x API*. 

------
#### [ JavaScript ]

**SDK pour JavaScript (v3)**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/sns#code-examples). 
Créez le client dans un module séparé et exportez-le.  

```
import { SNSClient } from "@aws-sdk/client-sns";

// The AWS Region can be provided here using the `region` property. If you leave it blank
// the SDK will default to the region set in your AWS config.
export const snsClient = new SNSClient({});
```
Importez le kit SDK et les modules client et appelez l’API.  

```
import { SetTopicAttributesCommand } from "@aws-sdk/client-sns";
import { snsClient } from "../libs/snsClient.js";

export const setTopicAttributes = async (
  topicArn = "TOPIC_ARN",
  attributeName = "DisplayName",
  attributeValue = "Test Topic",
) => {
  const response = await snsClient.send(
    new SetTopicAttributesCommand({
      AttributeName: attributeName,
      AttributeValue: attributeValue,
      TopicArn: topicArn,
    }),
  );
  console.log(response);
  // {
  //   '$metadata': {
  //     httpStatusCode: 200,
  //     requestId: 'd1b08d0e-e9a4-54c3-b8b1-d03238d2b935',
  //     extendedRequestId: undefined,
  //     cfId: undefined,
  //     attempts: 1,
  //     totalRetryDelay: 0
  //   }
  // }
  return response;
};
```
+  Pour plus d’informations, consultez le [AWS SDK pour JavaScript Guide du développeur](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sns-examples-managing-topics.html#sns-examples-managing-topicsstttopicattributes). 
+  Pour plus de détails sur l'API, voir [SetTopicAttributes](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sns/command/SetTopicAttributesCommand)la section *Référence des AWS SDK pour JavaScript API*. 

------
#### [ Kotlin ]

**SDK pour Kotlin**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/kotlin/services/sns#code-examples). 

```
suspend fun setTopAttr(
    attribute: String?,
    topicArnVal: String?,
    value: String?,
) {
    val request =
        SetTopicAttributesRequest {
            attributeName = attribute
            attributeValue = value
            topicArn = topicArnVal
        }

    SnsClient.fromEnvironment { region = "us-east-1" }.use { snsClient ->
        snsClient.setTopicAttributes(request)
        println("Topic ${request.topicArn} was updated.")
    }
}
```
+  Pour plus de détails sur l'API, consultez [SetTopicAttributes](https://sdk.amazonaws.com/kotlin/api/latest/index.html)la section *AWS SDK pour la référence de l'API Kotlin*. 

------
#### [ PHP ]

**Kit SDK pour PHP**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code/sns#code-examples). 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;


/**
 * Configure the message delivery status attributes for an Amazon SNS Topic.
 *
 * This code expects that you have AWS credentials set up per:
 * https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials.html
 */

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);
$attribute = 'Policy | DisplayName | DeliveryPolicy';
$value = 'First Topic';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->setTopicAttributes([
        'AttributeName' => $attribute,
        'AttributeValue' => $value,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```
+  Pour plus de détails sur l'API, voir [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForPHPV3/sns-2010-03-31/SetTopicAttributes)la section *Référence des AWS SDK pour PHP API*. 

------
#### [ Ruby ]

**Kit SDK pour Ruby**  
 Il y en a plus sur GitHub. Trouvez l'exemple complet et découvrez comment le configurer et l'exécuter dans le [ référentiel d'exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/ruby/example_code/sns#code-examples). 

```
# Service class to enable an SNS resource with a specified policy
class SnsResourceEnabler
  # Initializes the SnsResourceEnabler with an SNS resource client
  #
  # @param sns_resource [Aws::SNS::Resource] The SNS resource client
  def initialize(sns_resource)
    @sns_resource = sns_resource
    @logger = Logger.new($stdout)
  end

  # Sets a policy on a specified SNS topic
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param resource_arn [String] The ARN of the resource to include in the policy
  # @param policy_name [String] The name of the policy attribute to set
  def enable_resource(topic_arn, resource_arn, policy_name)
    policy = generate_policy(topic_arn, resource_arn)
    topic = @sns_resource.topic(topic_arn)

    topic.set_attributes({
                           attribute_name: policy_name,
                           attribute_value: policy
                         })
    @logger.info("Policy #{policy_name} set successfully for topic #{topic_arn}.")
  rescue Aws::SNS::Errors::ServiceError => e
    @logger.error("Failed to set policy: #{e.message}")
  end

  private

  # Generates a policy string with dynamic resource ARNs
  #
  # @param topic_arn [String] The ARN of the SNS topic
  # @param resource_arn [String] The ARN of the resource
  # @return [String] The policy as a JSON string
  def generate_policy(topic_arn, resource_arn)
    {
      Version: '2008-10-17',
      Id: '__default_policy_ID',
      Statement: [{
        Sid: '__default_statement_ID',
        Effect: 'Allow',
        Principal: { "AWS": '*' },
        Action: ['SNS:Publish'],
        Resource: topic_arn,
        Condition: {
          ArnEquals: {
            "AWS:SourceArn": resource_arn
          }
        }
      }]
    }.to_json
  end
end

# Example usage:
if $PROGRAM_NAME == __FILE__
  topic_arn = 'MY_TOPIC_ARN' # Should be replaced with a real topic ARN
  resource_arn = 'MY_RESOURCE_ARN' # Should be replaced with a real resource ARN
  policy_name = 'POLICY_NAME' # Typically, this is "Policy"

  sns_resource = Aws::SNS::Resource.new
  enabler = SnsResourceEnabler.new(sns_resource)

  enabler.enable_resource(topic_arn, resource_arn, policy_name)
end
```
+  Pour plus d’informations, consultez le [Guide du développeur AWS SDK pour Ruby](https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/sns-example-enable-resource.html). 
+  Pour plus de détails sur l'API, voir [SetTopicAttributes](https://docs.aws.amazon.com/goto/SdkForRubyV3/sns-2010-03-31/SetTopicAttributes)la section *Référence des AWS SDK pour Ruby API*. 

------
#### [ SAP ABAP ]

**Kit SDK pour SAP ABAP**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/sap-abap/services/sns#code-examples). 

```
    TRY.
        lo_sns->settopicattributes(
            iv_topicarn = iv_topic_arn
            iv_attributename  = iv_attribute_name
            iv_attributevalue = iv_attribute_value ).
        MESSAGE 'Set/updated SNS topic attributes.' TYPE 'I'.
      CATCH /aws1/cx_snsnotfoundexception.
        MESSAGE 'Topic does not exist.' TYPE 'E'.
    ENDTRY.
```
+  Pour plus de détails sur l'API, consultez [SetTopicAttributes](https://docs.aws.amazon.com/sdk-for-sap-abap/v1/api/latest/index.html)la section de référence du *AWS SDK pour l'API SAP ABAP*. 

------

# Configuration de l'enregistrement du statut de livraison à l'aide CloudFormation
<a name="msg-status-cloudformation"></a>

Pour configurer `DeliveryStatusLogging` l'utilisation CloudFormation, utilisez un modèle JSON ou YAML pour créer une CloudFormation pile. Pour plus d'informations, consultez la `DeliveryStatusLogging` propriété de la `AWS::SNS::Topic` ressource dans le guide de CloudFormation l'utilisateur. Vous trouverez ci-dessous des exemples de CloudFormation modèles en JSON et YAML permettant de créer une nouvelle rubrique ou de mettre à jour une rubrique existante avec tous les `DeliveryStatusLogging` attributs du protocole Amazon SQS.

Assurez-vous que les rôles IAM sont référencés `SuccessFeedbackRoleArn` et `FailureFeedbackRoleArn` disposent des autorisations de CloudWatch journalisation requises.

------
#### [ JSON ]

```
"Resources": {
    "MySNSTopic" : {
        "Type" : "AWS::SNS::Topic",
        "Properties" : {
            "TopicName" : "TestTopic",
            "DisplayName" : "TEST",
            "SignatureVersion" : "2",
            "DeliveryStatusLogging" : [{
                "Protocol": "sqs",
                "SuccessFeedbackSampleRate": "45",
                "SuccessFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1",
                "FailureFeedbackRoleArn": "arn:aws:iam::123456789012:role/SNSFailureFeedback_test2"
            }]
        }
    }
}
```

------
#### [ YAML ]

```
Resources:
  MySNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName:TestTopic
      DisplayName:TEST
      SignatureVersion:2
      DeliveryStatusLogging:
       - Protocol: sqs
         SuccessFeedbackSampleRate: 45
         SuccessFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSSuccessFeedback_test1
         FailureFeedbackRoleArn: arn:aws:iam::123456789012:role/SNSFailureFeedback_test2
```

------

# Nouvelle tentative de distribution des messages Amazon SNS
<a name="sns-message-delivery-retries"></a>

Amazon SNS définit une *politique de distribution* pour chaque protocole de distribution. La politique de distribution définit comment Amazon SNS tente à nouveau de livrer des messages lorsque des erreurs côté serveur se produisent (lorsque le système qui héberge le point de terminaison abonné devient indisponible). Lorsque la politique de distribution expire, Amazon SNS cesse de retenter la distribution et rejette le message, sauf si une file d'attente de lettres mortes est jointe à l'abonnement. Pour de plus amples informations, veuillez consulter [Files d'attente pour les lettres mortes Amazon SNS](sns-dead-letter-queues.md).

## Protocoles et politiques de distribution
<a name="delivery-policies-for-protocols"></a>

**Note**  
À l'exception des politiques personnalisées prises HTTP/S, you can't change Amazon SNS-defined delivery policies. Only HTTP/S en charge. Consultez [Création d'une politique HTTP/S de livraison](#creating-delivery-policy).
Amazon SNS applique l'instabilité aux nouvelles tentatives de distribution. Pour plus d'informations, consultez la publication [Exponential Backoff and Jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/) sur le *blog AWS Architecture*.
**Le temps total de nouvelle tentative de politique pour un HTTP/S point de terminaison ne peut pas être supérieur à 3 600 secondes. Il s'agit d'une limite fixe qui ne peut pas être augmentée**.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/sns-message-delivery-retries.html)

¹ Pour limiter les erreurs liées au protocole Firehose, Amazon SNS applique la même politique de livraison que pour les points de terminaison gérés par le client.

## Étapes de la politique de distribution
<a name="delivery-policy-stages"></a>

Le diagramme suivant montre les phases d'une politique de distribution.

![\[Un diagramme de l'axe x y affichant le temps sous forme de valeur x et la tentative de livraison initiale sous forme de valeur y. La politique de livraison commence par la phase de réessai immédiate sur l'axe y, suivie sur l'axe x par la phase de pré-interruption, la phase d'annulation et la phase de post-interruption.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-delivery-policy-phases.png)


Chaque politique de distribution comprend quatre phases.

1. **Phase de nouvelle tentative immédiate (sans délai)** : cette phase a lieu immédiatement après la tentative de livraison initiale. Il n'y a aucun délai entre les relances dans cette phase.

1. Phase **préalable à l'arrêt : cette phase** fait suite à la phase de réessai immédiate. Amazon SNS utilise cette phase pour tenter une série de nouvelles tentatives avant d'appliquer une fonction d'interruption. Cette phase spécifie le nombre de nouvelles tentatives et le délai entre elles.

1. **Phase de retrait — Cette phase contrôle le délai entre les nouvelles tentatives à l'aide de la fonction retry-backoff**. Cette phase définit un délai minimum, un délai maximum et une fonction d’interruption des nouvelles tentatives qui définit la vitesse à laquelle le délai augmente depuis le délai minimum au délai maximum. La fonction d’interruption peut être arithmétique, exponentielle, géométrique ou linéaire.

1. Phase **post-arrêt — Cette phase** fait suite à la phase d'arrêt. Il spécifie un certain nombre de nouvelles tentatives et la longueur du délai entre elles. Il s’agit de la phase finale.

## Création d'une politique HTTP/S de livraison
<a name="creating-delivery-policy"></a>

**Vous pouvez définir la manière dont Amazon SNS tente à nouveau de transmettre des messages aux HTTP/S points de terminaison à l'aide d'une politique de livraison comportant quatre phases : *sans délai*, *avant le retrait, puis après le retrait.*** Cette politique vous permet de remplacer les paramètres de nouvelle tentative par défaut et de les personnaliser en fonction de la capacité de votre serveur HTTP.

Vous pouvez définir votre politique HTTP/S de livraison sous la forme d'un objet JSON au niveau du **sujet** ou de l'**abonnement** :
+ **Politique au niveau du sujet** : s'applique à tous les HTTP/S abonnements liés au sujet. Utilisez l'action [https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html](https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html)ou [https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)API pour définir cette politique.
+ **Politique au niveau de l'abonnement** — S'applique uniquement à un abonnement spécifique. Utilisez l'action [https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)ou [https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html)API pour définir cette politique.

Vous pouvez également utiliser la [AWS::SNS::Subscription](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html)ressource dans vos CloudFormation modèles.

Vous devez personnaliser votre politique de livraison en fonction de la capacité de votre HTTP/S serveur :
+ **Serveur unique pour tous les abonnements** : si tous les HTTP/S abonnements d'une rubrique utilisent le même serveur, définissez la politique de diffusion en tant qu'attribut de rubrique pour garantir la cohérence entre tous les abonnements.
+ **Différents serveurs pour les abonnements** — Si les abonnements ciblent différents serveurs, créez une politique de livraison unique pour chaque abonnement, adaptée à la capacité du serveur spécifique.

Vous pouvez également définir l'`Content-Type`en-tête dans la politique de demande pour spécifier le type de support de la notification. Par défaut, Amazon SNS envoie toutes les notifications aux HTTP/S points de terminaison dont le type de contenu est défini sur. `text/plain; charset=UTF-8` Toutefois, vous pouvez remplacer cette valeur par défaut en utilisant le [`headerContentType`](#header-content-type)champ de la politique de demande.

L'objet JSON suivant définit une politique de livraison avec des tentatives structurées en quatre phases :

1. **Phase sans délai** : réessayez 3 fois immédiatement.

1. **Phase préalable à la pause** : réessayez 2 fois avec un intervalle de 1 seconde.

1. **Phase de pause** : réessayez 10 fois avec des délais exponentiels allant de 1 à 60 secondes.

1. **Phase post-pause** : réessayez 35 fois avec un intervalle fixe de 60 secondes.

Amazon SNS effectue un total de **50 tentatives** pour envoyer un message avant de le rejeter. Pour conserver les messages qui ne peuvent pas être remis après chaque nouvelle tentative, configurez votre abonnement pour déplacer les messages non remis vers une file d'attente de lettres mortes (DLQ). Pour de plus amples informations, veuillez consulter [Files d'attente pour les lettres mortes Amazon SNS](sns-dead-letter-queues.md).

Amazon SNS considère toutes les erreurs 5XX et 429 (trop de demandes envoyées) comme réessayables. Ces erreurs sont soumises à la politique de livraison. Toutes les autres erreurs sont considérées comme des échecs permanents et aucune nouvelle tentative ne sera tentée.

**Note**  
Cette politique de livraison utilise cette `maxReceivesPerSecond` propriété pour limiter le trafic de livraison à une moyenne de 10 messages par seconde et par abonnement. Bien que ce mécanisme contribue à éviter que votre HTTP/S terminal ne soit submergé par un trafic élevé, il est conçu pour maintenir un taux de livraison moyen et n'impose pas de plafond strict. Des pics occasionnels de trafic de livraison au-dessus de la limite spécifiée peuvent se produire, en particulier si votre taux de publication est nettement supérieur à la limite de limitation.  
Lorsque le trafic de publication (entrant) dépasse le taux de livraison (sortant), cela peut entraîner un arriéré de messages et une latence de livraison plus élevée. Pour éviter de tels problèmes, assurez-vous que la `maxReceivesPerSecond` valeur correspond aux exigences de capacité et de charge de travail de votre HTTP/S serveur.

L'exemple de politique de livraison suivant remplace le type de contenu par défaut pour les notifications HTTP/S destinées à. `application/json`

```
{
    "healthyRetryPolicy": {
        "minDelayTarget": 1,
        "maxDelayTarget": 60,
        "numRetries": 50,
        "numNoDelayRetries": 3,
        "numMinDelayRetries": 2,
        "numMaxDelayRetries": 35,
        "backoffFunction": "exponential"
    },
    "throttlePolicy": {
        "maxReceivesPerSecond": 10
    },
    "requestPolicy": {
        "headerContentType": "application/json"
    }
}
```

La politique de livraison est composée d'une politique de **nouvelle tentative, d'une politique** d'**accélération et d'une politique** de **demande**. Au total, une politique de livraison comporte **9 attributs**.


| Politique  | Description | Contrainte | 
| --- | --- | --- | 
| minDelayTarget | Délai minimal pour une nouvelle tentative.**Unité :** secondes | 1 jusqu'au délai maximal**Par défaut :** 20 | 
| maxDelayTarget | Délai maximal pour une nouvelle tentative.**Unité :** secondes | Délai minimal jusqu'à 3 600**Par défaut :** 20 | 
| numRetries | Le nombre total de nouvelles tentatives, y compris les tentatives immédiates, antérieures à l’interruption, pendant l’interruption et postérieures à l’interruption. | 0 à 100**Par défaut :** 3 | 
| numNoDelayRetries | Le nombre de nouvelles tentatives à effectuer immédiatement, sans délai entre elles. | 0 ou plus**Par défaut :** 0 | 
| numMinDelayRetries | Nombre de nouvelles tentatives dans la phase antérieure à l’interruption, avec le délai minimum entre elles spécifié. | 0 ou plus**Par défaut :** 0 | 
| numMaxDelayRetries | Le nombre de nouvelles tentatives dans la phase postérieure à l’interruption, avec le délai maximum entre elles. | 0 ou plus**Par défaut :** 0 | 
| backoffFunction | Modèle d’interruption entre les nouvelles tentatives.  |  L'une des quatre options suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/sns-message-delivery-retries.html) **Par défaut :** linéaire  | 
| maxReceivesPerSecond  | Nombre moyen maximal de livraisons de messages par seconde, par abonnement. | 1 ou plus**Par défaut :** aucune limitation (aucune limite sur le débit de livraison) | 
| headerContentType  | Type de contenu de la notification envoyée aux points de terminaison HTTP/S. |  Si la politique de demande n'est pas définie, le type de contenu par défaut est `text/plain; charset=UTF-8`. Quand la remise des messages bruts est désactivée pour un abonnement (par défaut) ou quand la politique de remise est définie au niveau de la rubrique, les types de contenu d'en-tête pris en charge sont `application/json` et `text/plain`. Quand la remise des messages bruts est activée pour un abonnement, les types de contenu suivants sont pris en charge : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/sns-message-delivery-retries.html)  | 

Amazon SNS utilise la formule suivante pour calculer le nombre de nouvelles tentatives dans la phase d'interruption :

```
numRetries - numNoDelayRetries - numMinDelayRetries - numMaxDelayRetries
```

Vous pouvez contrôler la fréquence des tentatives pendant la phase d'attente à l'aide de trois paramètres :
+ **`minDelayTarget`**— Définit le délai de la première tentative pendant la phase d'attente.
+ **`maxDelayTarget`**— Définit le délai pour la dernière tentative pendant la phase d'attente.
+ **`backoffFunction`**— Détermine l'algorithme utilisé par Amazon SNS pour calculer les délais de toutes les tentatives entre la première et la dernière tentative. Vous pouvez choisir l'une des quatre fonctions de réessayage et de désactivation disponibles.

Le schéma suivant montre comment les différentes fonctions d'annulation des nouvelles tentatives affectent les délais entre les nouvelles tentatives pendant la phase d'annulation. La politique de livraison utilisée dans cet exemple inclut les paramètres suivants : **10 tentatives au total**, un **délai minimum de 5 secondes** et un **délai maximum de 260 secondes.**
+ L'**axe vertical** indique le délai (en secondes) pour chaque nouvelle tentative.
+ L'**axe horizontal** représente la séquence de nouvelles tentatives, allant de la première à la dixième tentative.

![\[Le diagramme montre l'évolution des délais de relance sur 10 tentatives en fonction de quatre fonctions de temporisation : exponentielle, arithmétique, linéaire et géométrique. Chaque ligne colorée représente le schéma de retard d'une fonction : exponentiel : augmente rapidement, le délai maximal est atteint le plus rapidement, linéaire : augmente régulièrement à chaque nouvelle tentative, arithmétique et géométrique : affiche des augmentations modérées, plus abruptes que linéaires mais moins rapides qu'exponentielles. Toutes les lignes démarrent près du délai minimum de 5 secondes et approchent du délai maximum de 260 secondes au dixième essai.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/backoff-graph.png)


# Files d'attente pour les lettres mortes Amazon SNS
<a name="sns-dead-letter-queues"></a>

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 plus d’informations, consultez [Configuration d'une file d'attente de lettres mortes Amazon SNS pour un abonnement](sns-configure-dead-letter-queue.md) et [Nouvelle tentative de distribution des messages Amazon SNS](sns-message-delivery-retries.md).

**Note**  
L'abonnement Amazon SNS et la file d'attente Amazon SQS doivent être associés au même compte et à la AWS même région.
Pour une [rubrique FIFO](sns-fifo-topics.md), vous pouvez utiliser une file d'attente Amazon SQS en tant que file d'attente de lettres mortes pour l'abonnement Amazon SNS. Les abonnements aux rubriques FIFO utilisent des files d'attente FIFO, tandis que les abonnements aux rubriques standard utilisent des files d'attente standard.
Pour utiliser une file d'attente Amazon SQS chiffrée comme file d'attente en lettres mortes, vous devez utiliser un KMS personnalisé doté d'une politique clé qui accorde au service Amazon SNS un accès principal aux actions d'API. AWS KMS Pour plus d'informations, consultez [Sécurisation des données Amazon SNS grâce au chiffrement côté serveur](sns-server-side-encryption.md) dans ce guide et [Protection des données Amazon SQS à l'aide du chiffrement côté serveur (SSE) et de AWS KMS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html) dans le *Guide du développeur Amazon Simple Queue Service*.

## Pourquoi les distributions de messages échouent-elles ?
<a name="why-do-message-deliveries-fail"></a>

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](sns-message-delivery-retries.md).

### Erreurs côté du client
<a name="client-side-errors"></a>

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
<a name="server-side-errors"></a>

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 AWS gérés soutenus par Amazon SQS ou Amazon AWS Lambda SNS réessaie de livrer jusqu'à 100 015 fois, sur une période de 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
<a name="how-do-dead-letter-queues-work"></a>

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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-quotas.html#quotas-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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SetQueueAttributes.html)` 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 ?
<a name="how-messages-moved-into-dead-letter-queue"></a>

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 située dans la même Compte AWS région que votre abonnement Amazon SNS. Pour de plus amples informations, veuillez consulter [Configuration d'une file d'attente de lettres mortes Amazon SNS pour un abonnement](sns-configure-dead-letter-queue.md). 

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 ?
<a name="how-to-move-messages-out-of-dead-letter-queue"></a>

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.
+ **Rédigez la logique client Amazon SQS** : utilisez l'API Amazon SQS AWS , le SDK AWS CLI ou écrivez une logique client personnalisée pour interroger, traiter et supprimer les messages dans la file d'attente de lettres mortes.

## Comment puis-je contrôler et consigner les files d'attente de lettres mortes ?
<a name="how-to-monitor-log-dead-letter-queues"></a>

Vous pouvez utiliser CloudWatch les métriques Amazon pour surveiller les files d'attente de lettres mortes associées à vos abonnements Amazon SNS. Toutes les files d'attente Amazon SQS émettent des CloudWatch métriques à intervalles d'une minute. Pour plus d'informations, consultez la section [ CloudWatch Mesures disponibles pour Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-available-cloudwatch-metrics.html) dans le manuel *Amazon Simple Queue Service Developer Guide*. Tous les abonnements Amazon SNS comportant des files d'attente contenant des lettres mortes émettent également des métriques. CloudWatch Pour de plus amples informations, veuillez consulter [Surveillance des rubriques Amazon SNS à l'aide de CloudWatch](sns-monitoring-using-cloudwatch.md).

Pour être informé de l'activité dans vos files d'attente réservées aux lettres mortes, vous pouvez utiliser des CloudWatch métriques et des alarmes. La configuration d'une alarme pour la `NumberOfMessagesSent` métrique n'est pas appropriée car cette métrique ne capture pas les messages envoyés à un DLQ suite à des tentatives de traitement infructueuses. Utilisez plutôt la `ApproximateNumberOfMessagesVisible` métrique, qui capture tous les messages actuellement disponibles dans le DLQ, y compris ceux déplacés en raison d'échecs de traitement.

**Exemple de configuration CloudWatch d'alarme**

1. Créez une [CloudWatchalarme](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html) pour la `ApproximateNumberOfMessagesVisible` métrique.

1. Définissez le seuil d'alarme sur **1** (ou sur une autre valeur appropriée en fonction de vos attentes et du trafic DLQ).

1. Spécifiez une **rubrique** Amazon SNS pour être averti 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 les journaux pour étudier les exceptions à l'origine de l'échec de toute livraison Amazon SNS et de l'envoi de messages dans des files d'attente réservées aux lettres mortes. Amazon SNS peut enregistrer à la fois les livraisons réussies et les livraisons échouées. CloudWatch Pour de plus amples informations, veuillez consulter [Attributs de l'application mobile Amazon SNS](sns-msg-status.md).

# Configuration d'une file d'attente de lettres mortes Amazon SNS pour un abonnement
<a name="sns-configure-dead-letter-queue"></a>

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 plus d’informations, consultez [Files d'attente pour les lettres mortes Amazon SNS](sns-dead-letter-queues.md) et [Nouvelle tentative de distribution des messages Amazon SNS](sns-message-delivery-retries.md).

Cette page explique comment utiliser le AWS Management Console, un AWS SDK, le AWS CLI, et comment configurer une file CloudFormation d'attente de lettres mortes pour un abonnement Amazon SNS.

**Note**  
Pour une [rubrique FIFO](sns-fifo-topics.md), vous pouvez utiliser une file d'attente Amazon SQS en tant que file d'attente de lettres mortes pour l'abonnement Amazon SNS. Les abonnements aux rubriques FIFO utilisent des files d'attente FIFO, tandis que les abonnements aux rubriques standard utilisent des files d'attente standard.

## Conditions préalables
<a name="dead-letter-queue-prerequisites"></a>

Avant de configurer une file d'attente de lettres mortes, remplissez les conditions préalables suivantes :

1. [Créez une rubrique Amazon SNS](sns-create-topic.md) nommée `MyTopic`.

1. [Créez une file d'attente Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) nommée `MyEndpoint`, à utiliser comme point de terminaison pour l'abonnement Amazon SNS.

1. (Ignorer CloudFormation) [Inscrivez la file d'attente au sujet](sns-sqs-as-subscriber.md).

1. [Créez une autre file d'attente Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) nommée `MyDeadLetterQueue`, que vous utiliserez en tant que file d'attente de lettres mortes pour l'abonnement Amazon SNS.

1. Pour accorder au principal Amazon SNS l'accès à l'action d'API Amazon SQS, définissez la politique de file d'attente suivante pour `MyDeadLetterQueue`.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "sns.amazonaws.com"
         },
         "Action": "SQS:SendMessage",
         "Resource": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue",
         "Condition": {
           "ArnEquals": {
             "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:MyTopic"
           }
         }
       }
     ]
   }
   ```

------

## Pour configurer une file d'attente de lettres mortes pour un abonnement Amazon SNS à l'aide du AWS Management Console
<a name="configure-dead-letter-queue-aws-console"></a>

Avant de commencer le tutoriel, assurez-vous que vous remplissez les [conditions préalables](#dead-letter-queue-prerequisites).

1. Connectez-vous à la [console Amazon SQS](https://console.aws.amazon.com/sqs/).

1. [Créez une file d'attente Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) ou utilisez une file d'attente existante et notez l'ARN de la file d'attente sous l'onglet **Détails** de la file d'attente, par exemple :

   ```
   arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue
   ```

1. Connectez-vous à la [ console Amazon SNS](https://console.aws.amazon.com/sns/home).

1. Dans le panneau de navigation, choisissez **Abonnements**.

1. Sur la page **Subscriptions (Abonnements)**, sélectionnez un abonnement existant, puis choisissez **Edit (Modifier)**.

1. Sur la page **Edit (Modifier) *1234a567-bc89-012d-3e45-6fg7h890123i***, développez la section **Redrive policy (dead-letter queue (Stratégie de redirection (file d'attente de lettres mortes)** puis, procédez comme suit :

   1. Choisissez **Enabled (Activé)**.

   1. Spécifiez l'ARN d'une file d'attente Amazon SQS.

1. Sélectionnez **Enregistrer les modifications**.

   Votre abonnement est configuré pour utiliser une file d'attente de lettres mortes.

## Pour configurer une file d'attente de lettres mortes pour un abonnement Amazon SNS à l'aide d'un SDK AWS
<a name="configure-dead-letter-queue-aws-sdk"></a>

Avant d'exécuter cet exemple, assurez-vous de respecter les [conditions préalables requises](#dead-letter-queue-prerequisites).

Pour utiliser un AWS SDK, vous devez le configurer avec vos informations d'identification. Pour plus d'informations, consultez [la section Les fichiers de configuration et d'identification partagés](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html) dans le *guide de référence des outils AWS SDKs et des outils*.

L'exemple de code suivant montre comment utiliser`SetSubscriptionAttributesRedrivePolicy`.

------
#### [ Java ]

**Kit SDK pour Java 1.x**  
 Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le [référentiel d’exemples de code AWS](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/java/example_code/sns#code-examples). 

```
// Specify the ARN of the Amazon SNS subscription.
String subscriptionArn =
    "arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i";

// Specify the ARN of the Amazon SQS queue to use as a dead-letter queue.
String redrivePolicy =
    "{\"deadLetterTargetArn\":\"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}";

// Set the specified Amazon SQS queue as a dead-letter queue
// of the specified Amazon SNS subscription by setting the RedrivePolicy attribute.
SetSubscriptionAttributesRequest request = new SetSubscriptionAttributesRequest()
    .withSubscriptionArn(subscriptionArn)
    .withAttributeName("RedrivePolicy")
    .withAttributeValue(redrivePolicy);
sns.setSubscriptionAttributes(request);
```

------

## Pour configurer une file d'attente de lettres mortes pour un abonnement Amazon SNS à l'aide du AWS CLI
<a name="configure-dead-letter-queue-aws-cli"></a>

Avant de commencer le tutoriel, assurez-vous que vous remplissez les [conditions préalables](#dead-letter-queue-prerequisites).

1. Installation et configuration de l' AWS CLI. Pour plus d’informations, consultez le [Guide de l’utilisateur *AWS Command Line Interface *](https://docs.aws.amazon.com/cli/latest/userguide/).

1. Utilisez la commande suivante de l’.

   ```
   aws sns set-subscription-attributes \
   --subscription-arn arn:aws:sns:us-east-2:123456789012:MyEndpoint:1234a567-bc89-012d-3e45-6fg7h890123i
   --attribute-name RedrivePolicy
   --attribute-value "{\"deadLetterTargetArn\": \"arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue\"}"
   ```

## Pour configurer une file d'attente de lettres mortes pour un abonnement Amazon SNS à l'aide de CloudFormation
<a name="configure-dead-letter-queue-aws-cloudformation"></a>

Avant de commencer le tutoriel, assurez-vous que vous remplissez les [conditions préalables](#dead-letter-queue-prerequisites).

1. Copiez le code JSON suivant dans un fichier nommé `MyDeadLetterQueue.json`.

   ```
   {
     "Resources": {
       "mySubscription": {
         "Type" : "AWS::SNS::Subscription",
         "Properties" : {
           "Protocol": "sqs",
           "Endpoint": "arn:aws:sqs:us-east-2:123456789012:MyEndpoint",
           "TopicArn": "arn:aws:sns:us-east-2:123456789012:MyTopic",
           "RedrivePolicy": {
             "deadLetterTargetArn":
               "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
           }
         }
       }
     }
   }
   ```

1. Connectez-vous à la [console CloudFormation](https://console.aws.amazon.com/cloudformation/).

1. Sur la page **Select Template (Sélectionner un modèle)**, choisissez **Upload a template to Amazon S3 (Télécharger un modèle sur Amazon S3)**, puis votre fichier `MyDeadLetterQueue.json`, puis **Next (Suivant)**. 

1. Sur la page **Specify Details (Spécifier les détails)**, saisissez `MyDeadLetterQueue` comme **Stack Name (Nom de pile)**, puis choisissez **Next (Suivant)**. 

1. Dans la page **Options**, choisissez **Next (Suivant)**.

1. Sur la page **Review (Vérification)**, choisissez **Create (Créer)**.

   CloudFormation commence à créer la `MyDeadLetterQueue` pile et affiche le statut **CREATE\$1IN\$1PROGRESS**. Lorsque le processus est terminé, CloudFormation affiche le statut **CREATE\$1COMPLETE**.