

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.

# Utilisation d'Amazon SNS pour la messagerie application-to-application
<a name="sns-system-to-system-messaging"></a>

Amazon SNS simplifie la messagerie application-to-application (A2A) en séparant les éditeurs des abonnés, ce qui prend en charge les microservices, les systèmes distribués et les applications sans serveur. Les messages sont envoyés vers des rubriques Amazon SNS, où ils peuvent être filtrés et envoyés aux abonnés tels que Lambda, Amazon SQS ou les points de terminaison HTTP. Si la livraison échoue, les messages sont stockés dans une file d'attente de lettres mortes pour une analyse plus approfondie ou un retraitement.

![\[Amazon SNS facilite la application-to-application messagerie en dissociant les éditeurs des abonnés à l'aide de rubriques. Les messages provenant de systèmes ou de services sont acheminés via une rubrique Amazon SNS, où ils peuvent être filtrés et distribués aux abonnés tels que Lambda, Amazon SQS ou aux systèmes de messagerie. En cas d'échec de livraison, les messages sont stockés dans une file d'attente de lettres mortes pour une analyse ou un retraitement ultérieurs.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-a2a-overview.png)


# Streams de diffusion de Fanout to Firehose
<a name="sns-firehose-as-subscriber"></a>

Vous pouvez abonner des [flux de diffusion aux](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) rubriques Amazon SNS, ce qui vous permet d'envoyer des notifications à des points de terminaison de stockage et d'analyse supplémentaires. Les messages publiés sur une rubrique Amazon SNS sont envoyés au flux de diffusion Firehose auquel vous êtes abonné et envoyés à la destination telle que configurée dans Firehose. Le titulaire d'un abonnement peut abonner jusqu'à cinq flux de diffusion Firehose à une rubrique Amazon SNS. Chaque flux de diffusion Firehose possède un [quota par défaut](https://docs.aws.amazon.com/firehose/latest/dev/limits.html) pour les demandes et le débit par seconde. Cette limite peut occasionner la publication de plus de messages (trafic entrant) qu'il n'en est remis (trafic sortant). Lorsque le trafic entrant est plus important que le trafic sortant, votre abonnement peut accumuler un grand nombre de messages en attente, ce qui entraîne une grande latence lors de la remise des messages. Vous pouvez demander une [augmentation du quota](https://support.console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase) en fonction du taux de publication afin d'éviter tout impact négatif sur votre charge de travail. 

Grâce aux flux de diffusion Firehose, vous pouvez envoyer des notifications Amazon SNS à Amazon Simple Storage Service (Amazon S3), OpenSearch Amazon Redshift, Amazon Service (OpenSearch Service) et à des fournisseurs de services tiers tels que Datadog, New Relic, MongoDB et Splunk.

Par exemple, vous pouvez utiliser cette fonctionnalité pour stocker définitivement les messages envoyés à une rubrique dans un compartiment Amazon S3 à des fins de conformité, d'archivage ou à d'autres fins. Pour ce faire, créez un flux de diffusion Firehose avec une destination de compartiment Amazon S3 et abonnez ce flux de diffusion à la rubrique Amazon SNS. Autre exemple, pour effectuer une analyse des messages envoyés à une rubrique Amazon SNS, créez un flux de diffusion avec une destination d'index de OpenSearch service. Vous pouvez ensuite abonner le flux de diffusion Firehose à la rubrique Amazon SNS.

Amazon SNS prend également en charge l'enregistrement de l'état de livraison des messages pour les notifications envoyées aux points de terminaison Firehose. Pour de plus amples informations, veuillez consulter [Statut de distribution de message Amazon SNS](sns-topic-attributes.md).

# Conditions requises pour abonner les flux de diffusion Firehose aux rubriques Amazon SNS
<a name="prereqs-kinesis-data-firehose"></a>

Pour abonner un flux de diffusion à une rubrique SNS, vous Compte AWS devez disposer des éléments suivants :
+ Une rubrique SNS standard. Pour de plus amples informations, veuillez consulter [Création d'une rubrique Amazon SNS](sns-create-topic.md).
+ Un flux de diffusion Firehose. Pour plus d'informations, consultez [Création d'un flux de diffusion](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) et [accordez à votre application l'accès à vos ressources Firehose](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html#access-to-firehose) dans le manuel *Amazon Data Firehose* Developer Guide.
+ Rôle Gestion des identités et des accès AWS (IAM) qui fait confiance au principal du service Amazon SNS et qui est autorisé à écrire dans le flux de diffusion. Vous saisissez l'Amazon Resource Name (ARN) de ce rôle en tant que `SubscriptionRoleARN` lorsque vous créez l'abonnement. Amazon SNS assume ce rôle, qui permet à Amazon SNS de placer des enregistrements dans le flux de diffusion Firehose.

  L'exemple de politique ci-dessous présente les autorisations recommandées :

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": [
          "firehose:DescribeDeliveryStream",
          "firehose:ListDeliveryStreams",
          "firehose:ListTagsForDeliveryStream",
          "firehose:PutRecord",
          "firehose:PutRecordBatch"
        ],
        "Resource": [
          "arn:aws:firehose:us-east-1:111111111111:deliverystream/firehose-sns-delivery-stream"
        ],
        "Effect": "Allow"
      }
    ]
  }
  ```

------

  Pour fournir l'autorisation complète d'utiliser Firehose, vous pouvez également utiliser la politique AWS gérée. `AmazonKinesisFirehoseFullAccess` Ou, pour fournir des autorisations plus strictes pour l'utilisation de Firehose, vous pouvez créer votre propre politique. La politique doit au moins pouvoir autoriser l'exécution de l'opération `PutRecord` sur un flux de diffusion spécifique.

  Dans tous les cas, vous devez également modifier la relation de confiance pour inclure le principal de service d'Amazon SNS. Par exemple :

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

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "sns.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
      }
    ]
  }
  ```

------

  Pour plus d'informations sur la création de rôles, consultez la section [Création d'un rôle pour déléguer des autorisations à un AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) dans le *Guide de l'utilisateur IAM*.

Une fois ces exigences remplies, vous pouvez [abonner le flux de diffusion à la rubrique SNS](firehose-endpoints-subscribe.md).

# Abonnement d'un flux de diffusion Firehose à une rubrique Amazon SNS
<a name="firehose-endpoints-subscribe"></a>

[Pour envoyer des notifications Amazon SNS [aux flux de diffusion](sns-firehose-as-subscriber.md), assurez-vous d'abord que vous avez rempli toutes les conditions préalables.](prereqs-kinesis-data-firehose.md) Pour obtenir la liste des points de terminaison pris en charge, consultez la section [Points de terminaison et quotas](https://docs.aws.amazon.com/general/latest/gr/fh.html) dans le. *Référence générale d'Amazon Web Services*

**Pour abonner un stream de diffusion Firehose à un sujet**

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 rubrique**, choisissez l'Amazon Resource Name (ARN) d'une rubrique standard.

   1. Pour **Protocol**, choisissez **Firehose**.

   1. Pour **Endpoint**, choisissez l'ARN d'un flux de diffusion Firehose qui peut recevoir des notifications d'Amazon SNS.

   1. Pour l'**ARN du rôle d'abonnement**, spécifiez l'ARN du rôle Gestion des identités et des accès AWS (IAM) que vous avez créé pour écrire dans les flux de diffusion Firehose. Pour de plus amples informations, veuillez consulter [Conditions requises pour abonner les flux de diffusion Firehose aux rubriques Amazon SNS](prereqs-kinesis-data-firehose.md).

   1. (Facultatif) Pour supprimer les métadonnées Amazon SNS des messages publiés, choisissez **Activer la diffusion brute des messages**. Pour en savoir plus, consultez la section [Remise des messages bruts Amazon SNS](sns-large-payload-raw-message-delivery.md).

1. (Facultatif) Pour configurer une politique de filtre, développez la section **Politique de filtre d'abonnement**. Pour de plus amples informations, consultez [Stratégies de filtre d'abonnement Amazon SNS](sns-subscription-filter-policies.md).

1. (Facultatif) Pour configurer une file d’attente de lettres mortes pour l’abonnement, développez la section **Politique de reconduite (File d’attente de lettres mortes).** Pour de plus amples informations, consultez la section [Files d'attente pour les lettres mortes Amazon SNS](sns-dead-letter-queues.md).

1. Choisissez **Créer un abonnement**.

La console crée l'abonnement et ouvre la page **Détails** de l’abonnement.

# Gestion des messages Amazon SNS sur plusieurs destinations de flux de diffusion
<a name="firehose-working-with-destinations"></a>

les [flux de diffusion](sns-firehose-as-subscriber.md) vous permettent de gérer les messages Amazon SNS sur plusieurs destinations, ce qui permet l'intégration avec Amazon S3, Amazon OpenSearch Service, Amazon Redshift et les points de terminaison HTTP pour le stockage, l'indexation et l'analyse. En configurant correctement le formatage et la distribution des messages, vous pouvez stocker les notifications Amazon SNS dans Amazon S3 pour un traitement ultérieur, analyser les données des messages structurés à l'aide d'Amazon Athena, indexer les messages pour une recherche et une visualisation en temps réel, et structurer les archives OpenSearch dans Amazon Redshift pour les requêtes avancées.

# Stockage et analyse des messages Amazon SNS dans les destinations Amazon S3
<a name="firehose-s3-destinations"></a>

Cette rubrique explique comment les flux de livraison publient des données sur Amazon Simple Storage Service (Amazon S3).

![\[L'intégration et le flux de travail des services Amazon pour le traitement des messages. Il montre comment un éditeur envoie des messages à une rubrique Amazon SNS, qui les diffuse ensuite vers plusieurs files d'attente Amazon SQS et vers un flux de diffusion Data Firehose. À partir de là, les messages peuvent être traités par les fonctions Lambda ou stockés de manière permanente dans un compartiment Amazon S3.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/firehose-architecture-s3.png)


**Topics**
+ [Notifications de formatage pour le stockage dans les destinations Amazon S3](firehose-archived-message-format-S3.md)
+ [Analyse des messages stockés dans Amazon S3 à l'aide d'Athena](firehose-message-analysis-s3.md)

# Formatage des notifications Amazon SNS pour le stockage dans les destinations Amazon S3
<a name="firehose-archived-message-format-S3"></a>

L'exemple suivant montre une notification Amazon SNS envoyée à un compartiment Amazon Simple Storage Service (Amazon S3), avec une indentation pour plus de lisibilité.

**Note**  
Dans cet exemple, la diffusion des messages bruts est désactivée pour le message publié. Lorsque la diffusion des messages bruts est désactivée, Amazon SNS ajoute des métadonnées JSON au message, y compris les propriétés suivantes :  
`Type`
`MessageId`
`TopicArn`
`Subject`
`Timestamp`
`UnsubscribeURL`
`MessageAttributes`
Pour en savoir plus sur la diffusion brute, consultez la section [Remise des messages bruts Amazon SNS](sns-large-payload-raw-message-delivery.md).

```
{
    "Type": "Notification",
    "MessageId": "719a6bbf-f51b-5320-920f-3385b5e9aa56",
    "TopicArn": "arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic",     
    "Subject": "My 1st subject",
    "Message": "My 1st body",
    "Timestamp": "2020-11-26T23:48:02.032Z",
    "UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5",
    "MessageAttributes": {
        "myKey1": {
            "Type": "String",
            "Value": "myValue1"
        },
        "myKey2": {
            "Type": "String",
            "Value": "myValue2"
        }
    }
 }
```

L'exemple suivant montre trois messages SNS envoyés via un flux de diffusion au même compartiment Amazon S3. La mise en mémoire tampon est appliquée et des sauts de ligne séparent chaque message.

```
{"Type":"Notification","MessageId":"d7d2513e-6126-5d77-bbe2-09042bd0a03a","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic","Subject":"My 1st subject","Message":"My 1st body","Timestamp":"2020-11-27T00:30:46.100Z","UnsubscribeURL":"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5","MessageAttributes":{"myKey1":{"Type":"String","Value":"myValue1"},"myKey2":{"Type":"String","Value":"myValue2"}}}
{"Type":"Notification","MessageId":"0c0696ab-7733-5bfb-b6db-ce913c294d56","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic","Subject":"My 2nd subject","Message":"My 2nd body","Timestamp":"2020-11-27T00:31:22.151Z","UnsubscribeURL":"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5","MessageAttributes":{"myKey1":{"Type":"String","Value":"myValue1"}}}
{"Type":"Notification","MessageId":"816cd54d-8cfa-58ad-91c9-8d77c7d173aa","TopicArn":"arn:aws:sns:us-east-1:333333333333:my-kinesis-test-topic","Subject":"My 3rd subject","Message":"My 3rd body","Timestamp":"2020-11-27T00:31:39.755Z","UnsubscribeURL":"https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:313276652360:my-kinesis-test-topic:0b410f3c-ee5e-49d8-b59b-3b4aa6d8fcf5"}
```

# Analyse des messages Amazon SNS stockés dans Amazon S3 à l'aide d'Athena
<a name="firehose-message-analysis-s3"></a>

Cette page explique comment analyser les messages Amazon SNS envoyés via des flux de livraison vers des destinations Amazon Simple Storage Service (Amazon S3).

**Pour analyser les messages SNS envoyés via les flux de diffusion Firehose vers des destinations Amazon S3**

1. Configurez vos ressources Amazon S3. Pour obtenir des instructions, consultez la section [Créer un compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) dans le *Guide de mise en route Amazon Simple Storage Service* et [Utilisation des compartiments Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

1. Configurez votre flux de diffusion. Pour obtenir des instructions, consultez [Choisir Amazon S3 pour votre destination](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-s3) dans le manuel *Amazon Data Firehose Developer Guide*.

1. Utiliser [Amazon Athena](https://console.aws.amazon.com/athena) pour interroger les objets Amazon S3 à l'aide de SQL standard. Pour en savoir plus, consultez la section [Mise en route](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html) dans le *Guide de l'utilisateur Amazon Athena*.

## Exemple de requête
<a name="example-s3-query"></a>

Pour cet exemple de requête, supposons ce qui suit :
+ Les messages sont stockés dans le tableau `notifications` dans le schéma `default`.
+ Le tableau `notifications` comprend une colonne `timestamp` avec un type de `string`.

La requête suivante renvoie tous les messages SNS reçus dans la plage de dates spécifiée :

```
SELECT * 
FROM default.notifications
WHERE from_iso8601_timestamp(timestamp) BETWEEN TIMESTAMP '2020-12-01 00:00:00' AND TIMESTAMP '2020-12-02 00:00:00';
```

# Intégration des messages Amazon SNS aux destinations Amazon Service OpenSearch
<a name="firehose-elasticsearch-destinations"></a>

Cette section explique comment les flux de livraison publient des données sur Amazon OpenSearch Service (OpenSearch Service).

![\[Un éditeur envoie des messages à une rubrique Amazon SNS, qui les distribue ensuite à plusieurs files d'attente Amazon SQS. Les messages provenant de ces files d'attente peuvent être traités par les fonctions Lambda ou envoyés via un flux de diffusion Data Firehose à un OpenSearch Amazon Service, créant ainsi un index de messages consultable. Cette configuration illustre un scénario avancé de routage et de traitement des messages utilisant Services AWS.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/firehose-architecture-es.png)


**Topics**
+ [Format des messages archivés](firehose-archived-message-format-elasticsearch.md)
+ [Analyse des messages](firehose-message-analysis-elasticsearch.md)

# Stockage et mise en forme des notifications Amazon SNS dans OpenSearch les index des services
<a name="firehose-archived-message-format-elasticsearch"></a>

L'exemple suivant illustre une notification Amazon SNS envoyée à un index Amazon OpenSearch Service (OpenSearch Service) appelé. `my-index` Cet index a un champ de filtre temporel sur le champ `Timestamp`. La notification SNS est placée dans la propriété `_source` de la charge utile.

**Note**  
Dans cet exemple, la diffusion des messages bruts est désactivée pour le message publié. Lorsque la diffusion des messages bruts est désactivée, Amazon SNS ajoute des métadonnées JSON au message, y compris les propriétés suivantes :  
`Type`
`MessageId`
`TopicArn`
`Subject`
`Timestamp`
`UnsubscribeURL`
`MessageAttributes`
Pour en savoir plus sur la diffusion brute, consultez la section [Remise des messages bruts Amazon SNS](sns-large-payload-raw-message-delivery.md).

```
{
  "_index": "my-index",
  "_type": "_doc",
  "_id": "49613100963111323203250405402193283794773886550985932802.0",
  "_version": 1,
  "_score": null,
  "_source": {
    "Type": "Notification",
    "MessageId": "bf32e294-46e3-5dd5-a6b3-bad65162e136",
    "TopicArn": "arn:aws:sns:us-east-1:111111111111:my-topic",
    "Subject": "Sample subject",
    "Message": "Sample message",
    "Timestamp": "2020-12-02T22:29:21.189Z",
    "UnsubscribeURL": "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:111111111111:my-topic:b5aa9bc1-9c3d-452b-b402-aca2cefc63c9",
    "MessageAttributes": {
      "my_attribute": {
        "Type": "String",
        "Value": "my_value"
      }
    }
  },
  "fields": {
    "Timestamp": [
      "2020-12-02T22:29:21.189Z"
    ]
  },
  "sort": [
    1606948161189
  ]
}
```

# Analyse des messages Amazon SNS pour OpenSearch les destinations du service
<a name="firehose-message-analysis-elasticsearch"></a>

Cette rubrique explique comment analyser les messages Amazon SNS envoyés via des flux de diffusion vers des destinations Amazon OpenSearch Service (OpenSearch Service).

**Pour analyser les messages SNS envoyés via les flux OpenSearch de diffusion Firehose vers les destinations du service**

1. Configurez vos ressources OpenSearch de service. Pour obtenir des instructions, consultez [Getting Started with Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/es-gsg.html) dans le manuel *Amazon OpenSearch Service Developer Guide*.

1. Configurez votre flux de diffusion. Pour obtenir des instructions, consultez la section [Choisir le OpenSearch service pour votre destination](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-elasticsearch) dans le manuel *Amazon Data Firehose Developer Guide*.

1. Exécutez une requête à l'aide des requêtes OpenSearch Service et de Kibana. Pour plus d'informations, consultez [Étape 3 : Rechercher des documents dans un domaine de OpenSearch service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/es-gsg-search.html) et [Kibana](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/es-kibana.html) dans le manuel *Amazon OpenSearch Service Developer Guide*.

## Exemple de requête
<a name="example-es-query"></a>

L'exemple suivant interroge l'index `my-index` pour tous les messages SNS reçus dans la plage de dates spécifiée :

```
POST https://search-my-domain.us-east-1.es.amazonaws.com/my-index/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "Timestamp": {
              "gte": "2020-12-08T00:00:00.000Z",
              "lte": "2020-12-09T00:00:00.000Z",
              "format": "strict_date_optional_time"
            }
          }
        }
      ]
    }
  }
}
```

# Configuration de la livraison et de l'analyse des messages Amazon SNS dans les destinations Amazon Redshift
<a name="firehose-redshift-destinations"></a>

Cette rubrique explique comment répartir les notifications Amazon SNS vers un flux de diffusion, qui publie ensuite les données sur Amazon Redshift. Avec cette configuration, vous pouvez vous connecter à la base de données Amazon Redshift et utiliser un outil de requête SQL pour récupérer les messages Amazon SNS qui répondent à des critères spécifiques.

![\[Les messages publiés par un expéditeur sur une rubrique Amazon SNS sont distribués à plusieurs files d'attente Amazon SQS pour être traités par les fonctions Lambda, et également envoyés via un flux de diffusion Data Firehose à un cluster Amazon Redshift pour être stockés et analysés dans un entrepôt de données de messages. Cette configuration démontre une architecture robuste de gestion des messages et d'entreposage de données utilisant Services AWS.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/firehose-architecture-rs.png)


**Topics**
+ [Structuration des archives de messages dans les tables Amazon Redshift](firehose-archive-table-structure-redshift.md)
+ [Analyse des messages stockés dans les destinations Amazon Redshift](firehose-message-analysis-redshift.md)

# Structuration des archives de messages Amazon SNS dans les tables Amazon Redshift
<a name="firehose-archive-table-structure-redshift"></a>

Pour les points de terminaison Amazon Redshift, les messages Amazon SNS sont archivés sous forme de lignes dans un tableau. Voici un exemple de la façon dont les données sont stockées :

**Note**  
Dans cet exemple, la diffusion des messages bruts est désactivée pour le message publié. Lorsque la diffusion des messages bruts est désactivée, Amazon SNS ajoute des métadonnées JSON au message, y compris les propriétés suivantes :  
`Type`
`MessageId`
`TopicArn`
`Subject`
`Message`
`Timestamp`
`UnsubscribeURL`
`MessageAttributes`
Pour en savoir plus sur la diffusion brute, consultez la section [Remise des messages bruts Amazon SNS](sns-large-payload-raw-message-delivery.md).  
Bien qu'Amazon SNS ajoute des propriétés au message à l'aide de la majuscule indiquée dans cette liste, les noms de colonnes des tableaux Amazon Redshift sont en minuscules. Pour transformer les métadonnées JSON pour le point de terminaison Amazon Redshift, vous pouvez utiliser la commande SQL `COPY`. Pour en savoir plus, veuillez consulter la section [Copier à partir d'exemples JSON](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-from-json) et [Charger à partir de données JSON à l'aide de l'option 'Ignorer automatiquement'](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#copy-from-json-examples-using-auto-ignorecase) dans le *Guide du développeur de base de données Amazon Redshift*.


|  type  |  messageid  |  topicarn  |  subject  |  message  |  timestamp  |  unsubscribeurl  |  messageattributes  | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
|  Notification  |  ea544832-a0d8-581d-9275-108243c46103  |  arn:aws:sns:us-east-1:111111111111:my-topic  |  Objet de l'exemple  |  Exemple de message  |  2020-12-02T00:33:32.272Z  |  https://sns.us-east-1.amazonaws.com/? Action=Désinscribe& =arn:aws:sns:us-east- 1:1111111111:my-topic SubscriptionArn : 326deeeb-cbf4-45da-b92b-ca77a247813b  |  \$1\$1"my\$1attribute\$1":\$1\$1"Type\$1":\$1"String\$1",\$1"Value\$1":\$1"my\$1value\$1"\$1\$1  | 
|  Notification  |  ab124832-a0d8-581d-9275-108243c46114  |  arn:aws:sns:us-east-1:111111111111:my-topic  |  Objet de l'exemple 2  |  Exemple de message 2  |  2020-12-03T00:18:11.129Z  |  https://sns.us-east-1.amazonaws.com/? Action=Désinscribe& =arn:aws:sns:us-east- 1:1111111111:my-topic SubscriptionArn : 326deeeb-cbf4-45da-b92b-ca77a247813b  |  \$1\$1"my\$1attribute2\$1'':\$1\$1"Type\$1'':\$1"String\$1'',\$1"Value\$1'':\$1"my\$1value\$1"\$1\$1  | 
|  Notification  |  ce644832-a0d8-581d-9275-108243c46125  |  arn:aws:sns:us-east-1:111111111111:my-topic  |  Objet de l'exemple 3  |  Exemple de message 3  |  2020-12-09T00:08:44.405Z  |  https://sns.us-east-1.amazonaws.com/? Action=Désinscribe& =arn:aws:sns:us-east- 1:1111111111:my-topic SubscriptionArn : 326deeeb-cbf4-45da-b92b-ca77a247813b  |  \$1\$1"my\$1attribute3\$1'':\$1\$1"Type\$1'':\$1"String\$1'',\$1"Value\$1'':\$1"my\$1value\$1"\$1\$1  | 

Pour en savoir plus sur la diffusion des notifications aux points de terminaison Amazon Redshift, consultez la section [Configuration de la livraison et de l'analyse des messages Amazon SNS dans les destinations Amazon Redshift](firehose-redshift-destinations.md).

# Analyse des messages Amazon SNS stockés dans les destinations Amazon Redshift
<a name="firehose-message-analysis-redshift"></a>

Cette rubrique explique comment analyser les messages Amazon SNS envoyés via des flux de diffusion vers des destinations Amazon Redshift.

**Pour analyser les messages SNS envoyés via les flux de diffusion Firehose vers des destinations Amazon Redshift**

1. Configurez vos ressources Amazon Redshift. Pour obtenir des instructions, consultez la section de [Mise en route avec Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html) dans le *Guide de mise en route d'Amazon Redshift*.

1. Configurez votre flux de diffusion. Pour obtenir des instructions, consultez [Choisir Amazon Redshift pour votre destination](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-redshift) dans le manuel *Amazon Data Firehose* Developer Guide.

1. Exécuter une requête. Pour plus d’informations, consultez [Interrogation d’une base de données à l’aide de l’éditeur de requêtes](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor.html) dans le *Guide de gestion Amazon Redshift*.

## Exemple de requête
<a name="example-rs-query"></a>

Pour cet exemple de requête, supposons ce qui suit :
+ Les messages sont stockés dans le tableau `notifications` dans le schéma `public` par défaut.
+ La propriété `Timestamp` du message SNS est stockée dans la colonne `timestamp` du tableau avec un type de données de colonne de `timestamptz`.
**Note**  
Pour transformer les métadonnées JSON pour le point de terminaison Amazon Redshift, vous pouvez utiliser la commande SQL `COPY`. Pour en savoir plus, consultez la section [Copier à partir d'exemples JSON](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-from-json) et [Charger à partir de données JSON à l'aide de l'option 'ignorer automatiquement'](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#copy-from-json-examples-using-auto-ignorecase) dans le *Guide du développeur de base de données Amazon Redshift*.

La requête suivante renvoie tous les messages SNS reçus dans la plage de dates spécifiée :

```
SELECT *
FROM public.notifications
WHERE timestamp > '2020-12-01T09:00:00.000Z' AND timestamp < '2020-12-02T09:00:00.000Z';
```

# Configuration de la livraison des messages Amazon SNS vers des destinations HTTP à l'aide de
<a name="firehose-http-destinations"></a>

Cette rubrique explique comment les flux de diffusion publient des données sur les points de terminaison HTTP.

![\[Un éditeur d'une rubrique Amazon SNS, qui distribue ensuite les messages à plusieurs files d'attente Amazon SQS. Ces messages sont traités par les fonctions Lambda et également envoyés via un flux de diffusion Data Firehose à un point de terminaison HTTP. Cette configuration montre comment Services AWS travailler ensemble pour faciliter la gestion des messages et l'intégration aux services HTTP externes.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/firehose-architecture-http.png)


**Topics**
+ [Format de notification pour la livraison vers des destinations HTTP](firehose-delivered-message-format-http.md)

# Format de notification Amazon SNS pour la livraison vers des destinations HTTP
<a name="firehose-delivered-message-format-http"></a>

Voici un exemple de corps de requête HTTP POST provenant d'Amazon SNS, envoyé via un flux de diffusion à un point de terminaison HTTP. La notification Amazon SNS est codée sous forme de charge utile base64 dans la propriété records.

**Note**  
Dans cet exemple, la diffusion des messages bruts est désactivée pour le message publié. Pour en savoir plus sur la diffusion brute, consultez la section [Remise des messages bruts Amazon SNS](sns-large-payload-raw-message-delivery.md).

```
"body": {
    "requestId": "ebc9e8b2-fce3-4aef-a8f1-71698bf8175f",
    "timestamp": 1606255960435,
    "records": [
      {
        "data": "eyJUeXBlIjoiTm90aWZpY2F0aW9uIiwiTWVzc2FnZUlkIjoiMjFkMmUzOGQtMmNhYi01ZjYxLTliYTItYmJiYWFhYzg0MGY2IiwiVG9waWNBcm4iOiJhcm46YXdzOnNuczp1cy1lYXN0LTE6MTExMTExMTExMTExOm15LXRvcGljIiwiTWVzc2FnZSI6IlNhbXBsZSBtZXNzYWdlIGZvciBBbWF6b24gS2luZXNpcyBEYXRhIEZpcmVob3NlIGVuZHBvaW50cyIsIlRpbWVzdGFtcCI6IjIwMjAtMTEtMjRUMjI6MDc6MzEuNjY3WiIsIlVuc3Vic2NyaWJlVVJMIjoiaHR0cHM6Ly9zbnMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20vP0FjdGlvbj1VbnN1YnNjcmliZSZTdWJzY3JpcHRpb25Bcm49YXJuOmF3czpzbnM6MTExMTExMTExMTExOm15LXRvcGljOjAxYjY5MTJjLTAwNzAtNGQ4Yi04YjEzLTU1NWJmYjc2ZTdkNCJ9"
      }
    ]
  }
```

# Archivage et analyse des messages Amazon SNS : exemple de cas d'utilisation pour les plateformes de billetterie aérienne
<a name="firehose-example-use-case"></a>

Cette rubrique fournit un didacticiel pour un cas d'utilisation courant de l'archivage et de l'analyse des messages Amazon SNS. 

Le cadre de ce cas d'utilisation est une plateforme de billetterie d'une compagnie aérienne qui opère dans un environnement réglementé.

1. La plateforme est soumise à un cadre de conformité qui oblige la compagnie à archiver toutes les ventes de billets pendant au moins cinq ans.

1. Pour atteindre l'objectif de conformité en matière de conservation des données, l'entreprise abonne un flux de diffusion à une rubrique Amazon SNS existante.

1. La destination du flux de diffusion est un compartiment Amazon Simple Storage Service (Amazon S3). Grâce à cette configuration, tous les événements publiés dans la rubrique SNS sont archivés dans le compartiment Amazon S3.

Le diagramme suivant illustre l'architecture de cette configuration :

![\[AWS Architecture pour une plateforme de billetterie aérienne, illustrant la manière dont les données de vente de billets sont traitées et archivées. Il montre le flux de données d'une fonction Lambda via une rubrique Amazon SNS, qui distribue ensuite des messages aux files d'attente Amazon SQS pour le traitement des paiements et la détection des fraudes, gérés par les fonctions Lambda respectives. Les données sont également diffusées via Data Firehose vers un compartiment Amazon S3 pour un archivage à long terme, garantissant ainsi le respect des exigences de conservation des données. Cette configuration permet à la plateforme d'effectuer des analyses détaillées des données de vente de billets à l'aide d'outils tels qu'Amazon Athena.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-archiving-use-case.png)


Pour exécuter des analyses et obtenir des informations sur les ventes de billets, ladite compagnie exécute des requêtes SQL à l'aide d'Amazon Athena. Par exemple, elle peut émettre une requête pour en savoir plus sur les destinations les plus populaires et les voyageurs les plus fréquents.

Pour créer les AWS ressources correspondant à ce cas d'utilisation, vous pouvez utiliser le AWS Management Console ou un CloudFormation modèle.

**Topics**
+ [Configuration des AWS ressources initiales pour l'archivage et l'analyse des messages](firehose-example-initial-resources.md)
+ [Configuration d'un flux de diffusion Firehose pour l'archivage des messages](firehose-example-create-delivery-stream.md)
+ [Abonnement du flux de diffusion à la rubrique](firehose-example-subscribe-delivery-stream-to-topic.md)
+ [Tester et interroger une configuration pour une gestion efficace des données](firehose-example-test-and-query.md)
+ [Automatiser l'archivage des messages à l'aide d'un modèle CloudFormation](firehose-example-cfn.md)

# Configuration des AWS ressources initiales pour l'archivage et l'analyse des messages Amazon SNS
<a name="firehose-example-initial-resources"></a>

Cette rubrique décrit comment créer les ressources nécessaires pour l'[archivage et l'analyse des messages, exemple de cas d'utilisation](firehose-example-use-case.md) :
+ Un compartiment Amazon Simple Storage Service (Amazon S3)
+ Deux files d'attente Amazon Simple Queue Service (Amazon SQS)
+ Une rubrique Amazon SNS
+ Deux abonnements Amazon SQS à la rubrique Amazon SNS

**Pour créer les ressources initiales**

1. Créez un compartiment Amazon S3 :<a name="firehose-use-case-create-bucket"></a>

   1. Ouvrez la [console Amazon S3](https://console.aws.amazon.com/s3/home).

   1. Choisissez **Créer un compartiment**. 

   1. Pour **Nom de compartiment**, saisissez un nom unique dans le monde. Conservez les valeurs par défaut des autres champs.

   1. Choisissez **Créer un compartiment**.

   Pour de plus amples informations sur les compartiments Amazon S3, voir [Créer un compartiment](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) dans le *Guide de l’utilisateur du service Amazon Simple Storage* et [Travailler avec les compartiments Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html) dans le *Guide de l’utilisateur du service Amazon Simple Storage*.

1. Créez les deux files d'attente Amazon SQS :

   1. Ouvrez la [console Amazon SQS](https://console.aws.amazon.com/sqs/home).

   1. Choisissez **Créez une file d'attente**.

   1. Pour **Type**, choisissez **Standard**.

   1. Pour **Nom**, saisissez **ticketPaymentQueue**.

   1. Sous **Politique d'accès**, pour **Choisir la méthode**, choisissez **Avancé**.

   1. Dans la zone politique JSON, collez la politique suivante :

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

****  

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

------

      Dans cette politique d'accès, remplacez le Compte AWS numéro (*123456789012*) par le vôtre et modifiez la AWS région (*us-east-1*) en conséquence.

   1. Choisissez **Créer une file d'attente**.

   1. Répétez ces étapes pour créer une deuxième file d'attente SQS nommée **ticketFraudQueue**.

   Pour en savoir plus sur la création de files d'attente SQS, veuillez consulter la section de [Création d'une file d'attente Amazon SQS (console)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-create-queue.html) dans le *Guide du développeur Amazon Simple Queue Service*.

1. Création de la rubrique SNS :

   1. Ouvrez la [page Rubriques](https://console.aws.amazon.com/sns/home#/topics) de la console Amazon SNS.

   1. Choisissez **Créer une rubrique**.

   1. Sous **Détails**, pour **Type**, choisissez **Standard**.

   1. Pour **Nom**, saisissez **ticketTopic**.

   1. Choisissez **Créer une rubrique**.

   Pour en savoir plus sur la création de rubriques SNS, veuillez consulter la section [Création d'une rubrique Amazon SNS](sns-create-topic.md).

1. Abonner deux files d'attente SQS à la rubrique SNS :

   1. Dans la [console Amazon SNS](https://console.aws.amazon.com/sns/home#/topics), sur la page de détails de la rubrique **ticketTopic**, choisissez **Créer un abonnement**.

   1. Sous **Détails**, pour **Protocole**, choisissez **Amazon SQS**.

   1. Pour **Endpoint**, choisissez le Amazon Resource Name (ARN) de la **ticketPaymentQueue**file d'attente.

   1. Choisissez **Créer un abonnement**.

   1. Répétez ces étapes pour créer un deuxième abonnement à l'aide de l'ARN de la **ticketFraudQueue**file d'attente.

      Pour en savoir plus sur l'abonnement aux rubriques SNS, consultez la section [Création d'un abonnement à une rubrique Amazon SNS](sns-create-subscribe-endpoint-to-topic.md). Vous pouvez également abonner des files d'attente SQS aux rubriques SNS à partir de la console Amazon SQS. Pour en savoir plus, consultez la section [Abonnement d'une file d'attente Amazon SQS à une rubrique Amazon SNS (console)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-subscribe-queue-sns-topic.html) dans le *Guide du développeur Amazon Simple Queue Service*.

Vous avez créé les ressources initiales pour cet exemple de cas d'utilisation. Pour continuer, consultez la section [Configuration d'un flux de diffusion Amazon Data Firehose pour l'archivage des messages Amazon SNS](firehose-example-create-delivery-stream.md).

# Configuration d'un flux de diffusion Amazon Data Firehose pour l'archivage des messages Amazon SNS
<a name="firehose-example-create-delivery-stream"></a>

Cette rubrique explique comment créer le flux de diffusion Amazon Data Firehose pour l'[exemple d'utilisation de l'archivage et de l'analyse des messages](firehose-example-use-case.md).

**Pour créer le flux de livraison Amazon Data Firehose**

1. Ouvrez la console des [services Amazon Data Firehose](https://console.aws.amazon.com/kinesis/home).

1. Choisissez **Firehose**, puis **Create delivery stream**.

1. Sur la page **Nouveau flux de diffusion**, pour **Nom du flux de diffusion**, saisissez **ticketUploadStream**, puis choisissez **Suivant**.

1. Sur la page **Traiter les registres**, choisissez **Suivant**.

1. Sur la page **Choisir une destination**, procédez comme suit :

   1. Pour **Destination**, choisissez **Amazon S3**.

   1. Sous **Destination S3**, pour **Compartiment S3**, choisissez le compartiment S3 que vous avez [initialement créé](firehose-example-initial-resources.md).

   1. Choisissez **Suivant**.

1. Sur la page **Configuration des paramètres**, pour **Conditions de tampon S3**, procédez comme suit :
   + Pour **Taille du tampon**, saisissez **1**.
   + Pour **Intervalle tampon**, saisissez **60**.

   L'utilisation de ces valeurs pour le tampon Amazon S3 vous permet de tester rapidement la configuration. La première condition qui est satisfaite déclenche la diffusion des données au compartiment S3.

1. Sur la page **Configurer les paramètres**, pour **Autorisations**, choisissez de créer un rôle Gestion des identités et des accès AWS (IAM) avec les autorisations requises attribuées automatiquement. Sélectionnez ensuite **Suivant**.

1. Sur la page **Vérification**, choisissez **Créer un flux de diffusion**.

1. Sur la **page des flux de diffusion d'Amazon Data Firehose, choisissez le flux** de diffusion que vous venez de créer () **ticketUploadStream**. Sur la page **Détails**, notez l'Amazon Resource Name (ARN) du flux pour plus tard.

Pour plus d'informations sur la création de flux de diffusion, consultez la section [Création d'un flux de diffusion Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) dans le manuel du *développeur Amazon Data Firehose*. Pour plus d'informations sur la création de rôles IAM, consultez la section [Création d'un rôle pour déléguer des autorisations à un AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) dans le Guide de l'*utilisateur IAM*.

Vous avez créé le flux de diffusion Firehose avec les autorisations requises. Pour continuer, consultez la section [Abonnement du flux de diffusion Firehose à la rubrique Amazon SNS](firehose-example-subscribe-delivery-stream-to-topic.md).

# Abonnement du flux de diffusion Firehose à la rubrique Amazon SNS
<a name="firehose-example-subscribe-delivery-stream-to-topic"></a>

Cette rubrique explique comment créer les ressources suivantes pour l'[exemple d'utilisation de l'archivage et de l'analyse des messages :](firehose-example-use-case.md)
+ Rôle Gestion des identités et des accès AWS (IAM) qui permet à l'abonnement Amazon SNS d'enregistrer des enregistrements dans le flux de diffusion.
+ L'abonnement au flux de diffusion Firehose à la rubrique Amazon SNS.

**Pour créer le rôle IAM pour l'abonnement Amazon SNS**

1. Ouvrez la [page Rôles](https://console.aws.amazon.com/iam/home?#/roles) de la console IAM.

1. Choisissez **Créer un rôle**.

1. Pour **Sélectionner le type d'entité de confiance**, choisissez le **service AWS **.

1. Pour **Choix d'un cas d'utilisation**, choisissez **SNS**. Choisissez ensuite **Suivant : Autorisations**.

1. Choisissez **Suivant : Balises**.

1. Choisissez **Suivant : Vérification**.

1. Sur la page **Vérification**, pour **Nom du rôle**, saisissez **ticketUploadStreamSubscriptionRole**. Puis choisissez **Create role (Créer un rôle)**.

1. Lorsque le rôle est créé, choisissez son nom (**ticketUploadStreamSubscriptionRole**).

1. Sur la page de **Résumé** du rôle, choisissez **Ajouter une politique en ligne**.

1. Sur la page **Créer une politique**, choisissez l'onglet **JSON**, puis collez la politique JSON suivante dans la zone de texte :

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "firehose:DescribeDeliveryStream",
                   "firehose:ListDeliveryStreams",
                   "firehose:ListTagsForDeliveryStream",
                   "firehose:PutRecord",
                   "firehose:PutRecordBatch"
               ],
               "Resource": [
                   "arn:aws:firehose:us-east-1:123456789012:deliverystream/ticketUploadStream"
               ],
               "Effect": "Allow"
           }
       ]
   }
   ```

------

   Dans cette politique, remplacez le Compte AWS numéro (*123456789012*) par le vôtre et modifiez la AWS région (*us-east-1*) en conséquence.

1. Choisissez **Examiner une politique**.

1. Sur la page **Vérifier une politique**, pour **Nom**, saisissez **FirehoseSnsPolicy**. Sélectionnez ensuite **Créer une politique**.

1. Sur la page de **Résumé** du rôle, notez l'**ARN de rôle** pour plus tard.

Pour plus d'informations sur la création de rôles IAM, consultez la section [Création d'un rôle pour déléguer des autorisations à un AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) dans le Guide de l'*utilisateur IAM*.

**Pour abonner le stream de diffusion Firehose à la rubrique SNS**

1. Ouvrez la page [Rubriques](https://console.aws.amazon.com/sns/home#/topics) de la console Amazon SNS.

1. Sous l'onglet **Abonnements**, choisissez **Créer un abonnement**.

1. Sous **Détails**, dans **Protocole**, sélectionnez****.

1. Pour **Endpoint**, entrez le nom de ressource Amazon (ARN) du flux de **ticketUploadStream**diffusion que vous avez créé précédemment. Par exemple, saisissez **arn:aws:firehose:us-east-1:123456789012:deliverystream/ticketUploadStream**.

1. Pour l'**ARN du rôle d'abonnement**, entrez l'ARN du rôle **ticketUploadStreamSubscriptionRole**IAM que vous avez créé précédemment. Par exemple, saisissez **arn:aws:iam::123456789012:role/ticketUploadStreamSubscriptionRole**.

1. Sélectionnez la case **Activer la diffusion brute des messages**.

1. Choisissez **Créer un abonnement**.

Vous avez créé le rôle IAM et l'abonnement à la rubrique SNS. Pour continuer, consultez la section [Tester et interroger une configuration Amazon SNS pour une gestion efficace des données](firehose-example-test-and-query.md).

# Tester et interroger une configuration Amazon SNS pour une gestion efficace des données
<a name="firehose-example-test-and-query"></a>

Cette rubrique explique comment tester l'[exemple d'utilisation de l'archivage et de l'analyse des messages en](firehose-example-use-case.md) publiant un message dans la rubrique Amazon SNS. Les instructions comprennent un exemple de requête que vous pouvez exécuter et adapter à vos propres besoins.

**Pour tester votre configuration**

1. Ouvrez la page [Rubriques](https://console.aws.amazon.com/sns/home#/topics) de la console Amazon SNS.

1. Cliquez sur la rubrique **ticketTopic**.

1. Choisissez **Publier le message**.

1. Sur la page **Publier un message dans une rubrique**, saisissez ce qui suit pour le corps du message. Ajoutez un caractère de saut de ligne à la fin du message.

   ```
   {"BookingDate":"2020-12-15","BookingTime":"2020-12-15 04:15:05","Destination":"Miami","FlyingFrom":"Vancouver","TicketNumber":"abcd1234"}
   ```

   Conservez toutes valeurs par défaut des autres options.

1. Choisissez **Publier le message**.

   Pour en savoir plus sur la publication de messages, consultez la section [Publication d'un message Amazon SNS](sns-publishing.md).

1. Après l'intervalle de flux de diffusion de 60 secondes, ouvrez la [console Amazon Simple Storage Service (Amazon S3)](https://console.aws.amazon.com/s3/home) et choisissez le compartiment Amazon S3 que vous avez [initialement créé](firehose-example-initial-resources.md).

   Le message publié s'affiche dans le compartiment.

**Pour des requêtes sur des données**

1. Ouvrez la [console Amazon Athena](https://console.aws.amazon.com/athena/home).

1. Exécuter une requête.

   Par exemple, supposons que le tableau `notifications` dans le schéma `default`contient les données suivantes :

   ```
   {"BookingDate":"2020-12-15","BookingTime":"2020-12-15 04:15:05","Destination":"Miami","FlyingFrom":"Vancouver","TicketNumber":"abcd1234"}
   {"BookingDate":"2020-12-15","BookingTime":"2020-12-15 11:30:15","Destination":"Miami","FlyingFrom":"Omaha","TicketNumber":"efgh5678"}
   {"BookingDate":"2020-12-15","BookingTime":"2020-12-15 3:30:10","Destination":"Miami","FlyingFrom":"NewYork","TicketNumber":"ijkl9012"}
   {"BookingDate":"2020-12-15","BookingTime":"2020-12-15 12:30:05","Destination":"Delhi","FlyingFrom":"Omaha","TicketNumber":"mnop3456"}
   ```

   Pour rechercher la destination la plus importante, exécutez la requête suivante :

   ```
   SELECT destination
   FROM default.notifications
   GROUP BY destination
   ORDER BY count(*) desc
   LIMIT 1;
   ```

   Pour rechercher les tickets vendus au cours d'une période et d'une plage d'heures spécifique, exécutez une requête comme suit :

   ```
   SELECT * 
   FROM default.notifications 
   WHERE bookingtime 
     BETWEEN TIMESTAMP '2020-12-15 10:00:00' 
     AND TIMESTAMP '2020-12-15 12:00:00';
   ```

   Vous pouvez adapter les deux exemples de requêtes à vos propres besoins. Pour en savoir plus sur l'utilisation d'Athena pour exécuter des requêtes, consultez la section de [Mise en route](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html) dans le *Guide de l'utilisateur Amazon Athena*.

## Nettoyage
<a name="firehose-example-cleanup"></a>

Pour éviter d'encourir des frais d'utilisation après avoir terminé le test, supprimez les ressources suivantes que vous avez créées pendant le didacticiel :
+ Abonnements Amazon SNS
+ Rubrique Amazon SNS
+ Files d’attente Amazon Simple Queue Service (Amazon SQS)
+ Compartiment Amazon S3
+  flux de diffusion
+ Gestion des identités et des accès AWS Rôles et politiques (IAM)

# Automatiser l'archivage des messages Amazon SNS à l'aide d'un modèle CloudFormation
<a name="firehose-example-cfn"></a>

Pour automatiser le déploiement de l'[exemple d'archivage des messages et d'analyse de cas d'utilisation](firehose-example-use-case.md) d'Amazon SNS, vous pouvez utiliser le modèle YAML suivant :

```
---
AWSTemplateFormatVersion: '2010-09-09'
Description: Template for creating an SNS archiving use case
Resources:
  ticketUploadStream:
    DependsOn:
    - ticketUploadStreamRolePolicy
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      S3DestinationConfiguration:
        BucketARN: !Sub 'arn:${AWS::Partition}:s3:::${ticketArchiveBucket}'
        BufferingHints:
          IntervalInSeconds: 60
          SizeInMBs: 1
        CompressionFormat: UNCOMPRESSED
        RoleARN: !GetAtt ticketUploadStreamRole.Arn
  ticketArchiveBucket:
    Type: AWS::S3::Bucket
  ticketTopic:
    Type: AWS::SNS::Topic
  ticketPaymentQueue:
    Type: AWS::SQS::Queue
  ticketFraudQueue:
    Type: AWS::SQS::Queue
  ticketQueuePolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Statement:
          Effect: Allow
          Principal:
            Service: sns.amazonaws.com
          Action:
            - sqs:SendMessage
          Resource: '*'
          Condition:
            ArnEquals:
              aws:SourceArn: !Ref ticketTopic
      Queues:
        - !Ref ticketPaymentQueue
        - !Ref ticketFraudQueue
  ticketUploadStreamSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      TopicArn: !Ref ticketTopic
      Endpoint: !GetAtt ticketUploadStream.Arn
      Protocol: firehose
      SubscriptionRoleArn: !GetAtt ticketUploadStreamSubscriptionRole.Arn
  ticketPaymentQueueSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      TopicArn: !Ref ticketTopic
      Endpoint: !GetAtt ticketPaymentQueue.Arn
      Protocol: sqs
  ticketFraudQueueSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      TopicArn: !Ref ticketTopic
      Endpoint: !GetAtt ticketFraudQueue.Arn
      Protocol: sqs
  ticketUploadStreamRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
        - Sid: ''
          Effect: Allow
          Principal:
            Service: firehose.amazonaws.com
          Action: sts:AssumeRole
  ticketUploadStreamRolePolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: FirehoseticketUploadStreamRolePolicy
      PolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
        - Effect: Allow
          Action:
          - s3:AbortMultipartUpload
          - s3:GetBucketLocation
          - s3:GetObject
          - s3:ListBucket
          - s3:ListBucketMultipartUploads
          - s3:PutObject
          Resource:
          - !Sub 'arn:aws:s3:::${ticketArchiveBucket}'
          - !Sub 'arn:aws:s3:::${ticketArchiveBucket}/*'
      Roles:
      - !Ref ticketUploadStreamRole
  ticketUploadStreamSubscriptionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - sns.amazonaws.com
          Action:
          - sts:AssumeRole
      Policies:
      - PolicyName: SNSKinesisFirehoseAccessPolicy
        PolicyDocument:
          Version: '2012-10-17		 	 	 '
          Statement:
          - Action:
            - firehose:DescribeDeliveryStream
            - firehose:ListDeliveryStreams
            - firehose:ListTagsForDeliveryStream
            - firehose:PutRecord
            - firehose:PutRecordBatch
            Effect: Allow
            Resource:
            - !GetAtt ticketUploadStream.Arn
```

# Notifications Amazon SNS envoyées par Fanout aux fonctions Lambda pour un traitement automatisé
<a name="sns-lambda-as-subscriber"></a>

Amazon SNS s'intègre à Amazon SNS AWS Lambda, ce qui vous permet de déclencher des fonctions Lambda en réponse aux notifications Amazon SNS. Lorsqu'un message est publié dans une rubrique SNS à laquelle est abonnée une fonction Lambda, cette dernière est appelée avec la charge utile du message publié. La fonction Lambda reçoit la charge utile du message en tant que paramètre d'entrée et peut manipuler les informations contenues dans le message, publier le message sur d'autres rubriques SNS ou envoyer le message à d'autres services. AWS 

Amazon SNS prend également en charge les attributs de l'état de diffusion du message pour les notifications de message envoyées aux points de terminaison Lambda. Pour de plus amples informations, veuillez consulter [Statut de distribution de message Amazon SNS](sns-topic-attributes.md). 

**Topics**
+ [Conditions préalables](lambda-prereq.md)
+ [Abonnement d'une fonction à une rubrique](lambda-console.md)

# Conditions préalables à l'intégration d'Amazon SNS aux fonctions Lambda dans toutes les régions
<a name="lambda-prereq"></a>

Pour appeler des fonctions Lambda à l'aide de notifications Amazon SNS, vous devez disposer des éléments suivants :
+ Une fonction Lambda
+ Une rubrique Amazon SNS

Pour de plus amples informations sur la création d'une fonction Lambda à utiliser avec Amazon SNS, consultez la section [Utilisation de Lambda avec Amazon SNS](https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html). Pour de plus amples informations sur la création d'une rubrique Amazon SNS, consultez la section de [Créer une rubrique](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html).

 Lorsque vous utilisez Amazon SNS pour envoyer des messages à partir de régions d'adhésion vers des régions activées par défaut, vous devez modifier la stratégie créée dans la fonction AWS Lambda en remplaçant le principal `sns.amazonaws.com` par `sns.<opt-in-region>.amazonaws.com`. 

 Par exemple, si vous souhaitez abonner une fonction Lambda dans la région USA Est (Virginie du Nord) à une rubrique SNS en Asie-Pacifique (Hong Kong), remplacez le principal dans la stratégie de la fonction AWS Lambda 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), Moyen-Orient (Bahreïn), UE (Milan) et Afrique (Le Cap). Les régions lancées avant le 20 mars 2019 sont activées par défaut. 

**Note**  
AWS ne prend pas en charge la livraison entre régions vers Lambda depuis une région activée par défaut vers une région optionnelle. En outre, le transfert de messages SNS entre régions depuis des régions d'adhésion vers d'autres régions d'adhésion n'est pas pris en charge. 

# Abonnement d'une fonction Lambda à une rubrique Amazon SNS
<a name="lambda-console"></a>

Cette rubrique explique comment abonner une fonction Lambda à une rubrique Amazon SNS, en permettant à la fonction d'être déclenchée par des messages publiés.

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.

1. Dans la section **Abonnements**, choisissez **Créer un abonnement**.

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

   1. Vérifiez la valeur choisie pour **ARN de la rubrique**.

   1. Pour **Protocole**, choisissez AWS Lambda.

   1. Pour **Point de terminaison** saisissez l'ARN d'une fonction.

   1. Choisissez **Créer un abonnement**.

Lorsqu'un message est publié dans une rubrique SNS à laquelle est abonnée une fonction Lambda, cette dernière est appelée avec la charge utile du message publié. Pour plus d'informations sur l'utilisation AWS Lambda d'Amazon SNS, y compris un didacticiel, consultez la section [Utilisation AWS Lambda avec Amazon SNS](https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html).

# Notifications Amazon SNS envoyées aux files d'attente Amazon SQS pour un traitement asynchrone
<a name="sns-sqs-as-subscriber"></a>

[Amazon SNS](https://aws.amazon.com/sns/) travaille en étroite collaboration avec Amazon Simple Queue Service (Amazon SQS). Ces services offrent différents avantages pour les développeurs. Amazon SNS permet aux applications d'envoyer des messages à caractère urgent à plusieurs abonnés via un mécanisme « push », éliminant ainsi le besoin de vérifier ou d'interroger (« poll ») périodiquement les mises à jour. Amazon SQS est un service de file d'attente de messages utilisé par des applications distribuées pour échanger des messages via un modèle d'interrogation. Il peut être utilisé pour découpler des composants d'envoi et de réception, sans que chaque composant soit disponible simultanément. L’utilisation conjointe d'Amazon SNS et d'Amazon SQS permet d'envoyer les messages aux applications qui exigent une notification immédiate d'un évènement et ils peuvent également rester dans une file d'attente Amazon SQS, afin que d'autres applications puissent les traiter ultérieurement. 

Lorsque vous abonnez une file d'attente Amazon SQS à une rubrique Amazon SNS, vous publiez un message dans cette rubrique et Amazon SNS envoie un message Amazon SQS à la file d'attente abonnée. Le message Amazon SQS contient l'objet et le message publiés dans la rubrique, ainsi que les métadonnées relatives au message, dans un document JSON. Le message Amazon SQS se présente comme le document JSON suivant.

```
{
   "Type" : "Notification",
   "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76",
   "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
   "Subject" : "Testing publish to subscribed queues",
   "Message" : "Hello world!",
   "Timestamp" : "2012-03-29T05:12:16.901Z",
   "SignatureVersion" : "1",
   "Signature" : "EXAMPLEnTrFPa3...",
   "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
   "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee"
}
```

# Abonnement d'une file d'attente Amazon SQS à une rubrique Amazon SNS
<a name="subscribe-sqs-queue-to-sns-topic"></a>

Pour permettre à une rubrique Amazon SNS d'envoyer des messages à une file d'attente Amazon SQS, choisissez l'une des options suivantes :
+ Utilisez la [console Amazon SQS](https://console.aws.amazon.com/sqs/), ce qui simplifie le processus. Pour plus d'informations, consultez [Abonnement d'une file d'attente Amazon SQS à une rubrique Amazon SNS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-subscribe-queue-sns-topic.html) dans le *Guide du développeur Amazon Simple Queue Service*.
+ Procédez comme suit : 

  1. [Obtenez l'Amazon Resource Name (ARN) de la file d'attente à laquelle vous souhaitez envoyer des messages et de la rubrique à laquelle vous souhaitez abonner la file d'attente.](#SendMessageToSQS.arn)

  1. [Accordez l'autorisation `sqs:SendMessage` à la rubrique Amazon SNS afin qu'elle puisse envoyer des messages à la file d'attente.](#SendMessageToSQS.sqs.permissions)

  1. [Abonnez la file d'attente à la rubrique Amazon SNS.](#SendMessageToSQS.subscribe)

  1. [Accordez aux utilisateurs IAM ou à Comptes AWS les autorisations d'effectuer une publication dans la rubrique Amazon SNS et de lire les messages à partir de la file d'attente Amazon SQS.](#SendMessageToSQS.iam.permissions)

  1. [Testez la procédure en publiant un message dans la rubrique et en le lisant à partir de la file d'attente.](#SendMessageToSQS.test)

Pour découvrir comment configurer une rubrique pour envoyer des messages à une file d'attente située dans un autre compte  AWS, consultez [Envoi de messages Amazon SNS à une file d'attente Amazon SQS d'un autre compte](sns-send-message-to-sqs-cross-account.md).

Pour voir un CloudFormation modèle qui crée une rubrique qui envoie des messages à deux files d'attente, voir[Automatisez la messagerie Amazon SNS vers Amazon SQS avec AWS CloudFormation](SendMessageToSQS.cloudformation.md).

## Étape 1 : obtenir l'ARN de la file d'attente et de la rubrique
<a name="SendMessageToSQS.arn"></a>

Lorsque vous abonnez une file d'attente à votre rubrique, vous avez besoin d'une copie de l'ARN de la file d'attente. De même, lorsque vous accordez à la rubrique l'autorisation d'envoyer des messages à la file d'attente, vous avez besoin d'une copie de l'ARN de la rubrique.

Pour obtenir l'ARN de la file d'attente, vous pouvez utiliser la console Amazon SQS ou l'action [GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryGetQueueAttributes.html)API.

**Pour obtenir l'ARN de la file d'attente à partir de la console Amazon SQS**

1. Connectez-vous à la console Amazon SQS AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. Cochez la case correspondant à la file d'attente dont vous souhaitez obtenir l'ARN.

1. Sur l'onglet **Détails**, copiez la valeur de l'ARN afin de pouvoir l'utiliser pour l'abonnement à la rubrique Amazon SNS.

Pour obtenir l'ARN de la rubrique, vous pouvez utiliser la console Amazon SNS, la commande `[sns-get-topic-attributes](https://docs.aws.amazon.com/cli/latest/reference/sns/get-topic-attributes.html)` ou l'action d'API `[GetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryGetQueueAttributes.html)`.

**Pour obtenir l'ARN de la rubrique à partir de la console Amazon SNS**

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

1. Dans le panneau de navigation, sélectionnez la rubrique dont vous souhaitez obtenir l'ARN.

1. Dans la section **Détails**, copiez la valeur du champ **ARN** afin de pouvoir l'utiliser pour accorder à la rubrique Amazon SNS l'autorisation d'envoyer des messages à la file d'attente.

## Étape 2 : autoriser la rubrique Amazon SNS à envoyer des messages à la file d'attente Amazon SQS
<a name="SendMessageToSQS.sqs.permissions"></a>

Pour qu'une rubrique Amazon SNS soit en mesure d'envoyer des messages à une file d'attente, vous devez définir une politique sur la file d'attente qui permette à la rubrique Amazon SNS d'effectuer l'action `sqs:SendMessage`.

Avant d'abonner une file d'attente à une rubrique, vous avez besoin d'une rubrique et d'une file d'attente. Si vous n'avez pas encore créé de rubrique ou de file d'attente, faites-le maintenant. Pour plus d'informations, consultez [Création d'une rubrique](sns-create-topic.md) et [Création d'une file d'attente](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-create-queue.html) dans le *Guide du développeur Amazon Simple Queue Service*. 

Pour définir une politique sur une file d'attente, vous pouvez utiliser la console Amazon SQS ou l'action [SetQueueAttributes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QuerySetQueueAttributes.html)API. Avant de commencer, assurez-vous que vous disposez de l'ARN de la rubrique que vous souhaitez autoriser à envoyer des messages à la file d'attente. Si vous abonnez une file d'attente à plusieurs rubriques, votre stratégie doit contenir un élément `Statement` pour chaque rubrique.

**Pour définir une SendMessage politique sur une file d'attente à l'aide de la console Amazon SQS**

1. Connectez-vous à la console Amazon SQS AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. Cochez la case de la file d'attente dont vous souhaitez définir la politique, choisissez l'onglet **Politique d'accès**, puis choisissez **Modifier**.

1. Dans la **Politique d'accès**, définissez qui peut accéder à votre file d'attente.
   + Ajoutez une condition qui autorise l'action pour la rubrique.
   + Définissez `Principal` en tant que service Amazon SNS, comme indiqué dans l'exemple ci-dessous. 
   + Utiliser les clés de condition globales [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) ou [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) pour se protéger contre le scénario [Député confus](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). Pour utiliser ces clés de condition, définissez la valeur de l'ARN de votre sujet. Si votre file d'attente est abonnée à plusieurs rubriques, vous pouvez utiliser `aws:SourceAccount` à la place. 

   Par exemple, la politique suivante permet d' MyTopic envoyer des messages à MyQueue. 

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

## Étape 3 : abonner la file d'attente à la rubrique Amazon SNS
<a name="SendMessageToSQS.subscribe"></a>

Pour envoyer des messages à une file d'attente via une rubrique, vous devez abonner la file d'attente à la rubrique Amazon SNS. Spécifiez la file d'attente à l'aide de son ARN. Pour réaliser un abonnement à une rubrique, vous pouvez utiliser la console Amazon SNS, la CLI `[sns-subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html)` de commande ou l'action d'API `[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)`. Avant de commencer, assurez-vous que vous disposez de l'ARN de la file d'attente que vous souhaitez abonner.

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.

1. Sur la ***MyTopic*** page, dans 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. Vérifiez la valeur de **ARN de la rubrique**.

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

   1. Pour **Point de terminaison**, saisissez l'ARN d'une file d'attente Amazon SQS.

   1. Choisissez **Créer un abonnement**.

   Lorsque l'abonnement est confirmé, le champ **ID de l'abonnement** de votre nouvel abonnement affiche son ID d'abonnement. Si le propriétaire de la file d'attente crée l'abonnement, ce dernier est automatiquement confirmé et l'abonnement doit être actif presque immédiatement.

   En général, vous abonnez votre propre file d'attente à votre propre rubrique dans votre propre compte. Cependant, vous pouvez également abonner une file d'attente d'un autre compte à votre rubrique. Si l'utilisateur qui crée l'abonnement n'est pas le propriétaire de la file d'attente (par exemple, si un utilisateur du compte A abonne une file d'attente du compte B à une rubrique du compte A), l'abonnement doit être confirmé. Pour plus d'informations sur l'abonnement d'une file d'attente d'un autre compte et la confirmation de l'abonnement, consultez la page [Envoi de messages Amazon SNS à une file d'attente Amazon SQS d'un autre compte](sns-send-message-to-sqs-cross-account.md).

## Étape 4 : autoriser les utilisateurs à accéder aux actions appropriées sur la rubrique et la file d'attente
<a name="SendMessageToSQS.iam.permissions"></a>

Vous devez utiliser Gestion des identités et des accès AWS (IAM) pour autoriser uniquement les utilisateurs appropriés à publier sur la rubrique Amazon SNS et sur les messages de la file read/delete d'attente Amazon SQS. Pour plus d'informations sur le contrôle des actions sur les rubriques et les files d'attente pour les utilisateurs IAM, consultez[Utilisation de politiques basées sur l'identité avec Amazon SNS](sns-using-identity-based-policies.md) et [Gestion des identités et des accès dans Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html) dans le Guide du développeur Amazon Simple Queue Service.

Il existe deux façons de contrôler l'accès à une rubrique ou une file d'attente :
+ [Ajoutez une politique à un utilisateur ou un groupe IAM](#SendMessageToSQS.iam.permissions.user). La façon la plus simple d'accorder à des utilisateurs des autorisations d'accès à des rubriques ou des files d'attente consiste à créer un groupe et à lui ajouter la politique appropriée, puis à ajouter des utilisateurs à ce groupe. Il est beaucoup plus facile d'ajouter ou de supprimer des utilisateurs dans un groupe que de suivre les politiques que vous définissez pour des utilisateurs individuels.
+ [Ajoutez une politique à une rubrique ou une file d'attente](#SendMessageToSQS.iam.permissions.resource). Si vous souhaitez autoriser un autre AWS compte à accéder à un sujet ou à une file d'attente, la seule façon de le faire est d'ajouter une politique dont le principal est la personne à laquelle Compte AWS vous souhaitez accorder des autorisations.

Vous devez utiliser la première méthode dans la plupart des cas (appliquer des politiques à des groupes et gérer les autorisations accordées aux utilisateurs en ajoutant ou supprimant les utilisateurs appropriés dans les groupes). Si vous avez besoin d'accorder des autorisations à un utilisateur d'un autre compte, vous devez utiliser la seconde méthode.

### Ajout d'une politique à un utilisateur ou un groupe IAM
<a name="SendMessageToSQS.iam.permissions.user"></a>

Si vous ajoutiez la politique suivante à un utilisateur ou à un groupe IAM, vous autoriseriez cet utilisateur ou les membres de ce groupe à effectuer l'`sns:Publish`action sur le sujet MyTopic.

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

Si vous ajoutiez la politique suivante à un utilisateur ou à un groupe IAM, vous autoriseriez cet utilisateur ou les membres de ce groupe à effectuer les `sqs:DeleteMessage` actions `sqs:ReceiveMessage` et sur les files d'attente MyQueue 1 et MyQueue 2.

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sqs:ReceiveMessage",
        "sqs:DeleteMessage"
      ],
      "Resource": [
        "arn:aws:sqs:us-east-2:123456789012:MyQueue1",
        "arn:aws:sqs:us-east-2:123456789012:MyQueue2"
      ]
    }
  ]
}
```

### Ajout d'une politique à une rubrique ou une file d'attente
<a name="SendMessageToSQS.iam.permissions.resource"></a>

Les exemples de politiques suivants montrent comment accorder à un autre compte des autorisations d'accès à une rubrique et une file d'attente.

**Note**  
Lorsque vous accordez à une autre personne l' Compte AWS accès à une ressource de votre compte, vous accordez également aux utilisateurs IAM disposant d'un accès de niveau administrateur (accès générique) des autorisations d'accès à cette ressource. Tous les autres utilisateurs IAM de l'autre compte se voient automatiquement refuser l'accès à votre ressource. Si vous voulez accorder à des utilisateurs IAM spécifiques de ce compte Compte AWS l'accès à votre ressource, le compte ou un utilisateur IAM disposant d'un accès de niveau administrateur doit déléguer des autorisations pour la ressource à ces utilisateurs IAM. Pour plus d'informations sur la délégation entre comptes, consultez la section [Activation d'accès entre comptes](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html) du *guide Utilisation d'IAM*.

Si vous avez ajouté la politique suivante à un sujet MyTopic du compte 123456789012, vous autorisez le compte 111122223333 à effectuer l'action sur ce sujet. `sns:Publish`

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

Si vous avez ajouté la politique suivante à une file d'attente MyQueue du compte 123456789012, vous autoriseriez le compte 111122223333 à effectuer les actions et sur cette file d'attente. `sqs:ReceiveMessage` `sqs:DeleteMessage`

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "111122223333"
      },
      "Action": [
        "sqs:DeleteMessage",
        "sqs:ReceiveMessage"
      ],
      "Resource": [
        "arn:aws:sqs:us-east-2:123456789012:MyQueue"
      ]
    }
  ]
}
```

## Étape 5 : Tester les abonnements de la file d'attente à une rubrique
<a name="SendMessageToSQS.test"></a>

Vous pouvez tester les abonnements d'une file d'attente à une rubrique en effectuant une publication dans la rubrique et en affichant le message que la rubrique envoie à la file d'attente.

**Pour effectuer une publication dans une rubrique à l'aide de la console Amazon SNS**

1. À l'aide des informations d'identification de l'utilisateur Compte AWS ou de l'utilisateur IAM autorisé à publier sur le sujet, connectez-vous à la console Amazon SNS AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/home)

1. Dans le panneau de navigation, sélectionnez la rubrique et choisissez **Publier dans la rubrique**.

1. Dans la zone **Sujet**, entrez un objet (par exemple, **Testing publish to queue**). Dans la zone **Message**, saisissez du texte (par exemple, **Hello world\$1**) et choisissez **Publier un message**. Le message suivant s'affiche : Votre message a été publié.

**Pour afficher le message à partir de la rubrique à l'aide de la console Amazon SQS**

1. À l'aide des informations d'identification de l'utilisateur Compte AWS ou de l'utilisateur IAM autorisé à consulter les messages de la file d'attente, connectez-vous à la console Amazon SQS AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/sqs/](https://console.aws.amazon.com/sqs/)

1. Choisissez une **file d'attente** abonnée à la rubrique.

1. Choisissez **Send and receive messages** (Envoyer et recevoir des messages), puis **Poll for messages** (Rechercher des messages). Un message de type **Notification** s'affiche. 

1. Dans la colonne **Corps**, choisissez **Plus de détails**. La zone **Détails des messages** contient un document JSON qui inclut l'objet et le message que vous avez publiés dans la rubrique. Le message se présente comme le document JSON suivant.

   ```
   {
     "Type" : "Notification",
     "MessageId" : "63a3f6b6-d533-4a47-aef9-fcf5cf758c76",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Subject" : "Testing publish to subscribed queues",
     "Message" : "Hello world!",
     "Timestamp" : "2012-03-29T05:12:16.901Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEnTrFPa3...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
     "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c7fe3a54-ab0e-4ec2-88e0-db410a0f2bee"
   }
   ```

1. Choisissez **Fermer**. Vous venez d'effectuer une publication dans une rubrique qui envoie des messages de notification à une file d'attente.

# Automatisez la messagerie Amazon SNS vers Amazon SQS avec AWS CloudFormation
<a name="SendMessageToSQS.cloudformation"></a>

CloudFormation vous permet d'utiliser un fichier modèle pour créer et configurer un ensemble de AWS ressources en une seule unité. Cette section comporte un exemple de modèle qui simplifie le déploiement de rubriques qui effectuent des publications dans des files d'attente. Les modèles exécutent automatiquement les étapes de configuration en créant deux files d'attente et une rubrique avec des abonnements aux files d'attente, en ajoutant une politique aux files d'attente afin que la rubrique puisse leur envoyer des messages, et en créant des utilisateurs et des groupes IAM pour contrôler l'accès à ces ressources.

Pour plus d'informations sur le déploiement de AWS ressources à l'aide d'un CloudFormation modèle, consultez la section [Get Started](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) du *guide de CloudFormation l'utilisateur*.

## Utilisation d'un CloudFormation modèle pour configurer des sujets et des files d'attente dans un Compte AWS
<a name="SendMessageToSQS.cloudformation.iam"></a>

L'exemple de modèle crée une rubrique Amazon SNS qui peut envoyer des messages à deux files d'attente Amazon SQS avec les autorisations appropriées pour permettre aux membres d'un groupe IAM d'effectuer une publication dans la rubrique et à un autre de lire les messages en attente. Le modèle crée également des utilisateurs IAM qui sont ajoutés à chaque groupe.

Vous copiez le contenu du modèle dans un fichier. Vous pouvez également télécharger le modèle depuis la [page AWS CloudFormation Modèles](https://aws.amazon.com/cloudformation/aws-cloudformation-templates/). Sur la page des modèles, choisissez **Parcourir les exemples de modèles par AWS service**, puis choisissez **Amazon Simple Queue Service**. 

My SNSTopic est configuré pour publier sur deux points de terminaison abonnés, à savoir deux files d'attente Amazon SQS MyQueue (1 MyQueue et 2). MyPublishTopicGroup est un groupe IAM dont les membres sont autorisés à publier sur My à l'SNSTopic aide de l'action API [Publish ou de la commande [sns-publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html)](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html). Le modèle crée les utilisateurs IAM MyPublishUser MyQueueUser et leur fournit des profils de connexion et des clés d'accès. L'utilisateur qui crée une pile avec ce modèle spécifie les mots de passe des profils de connexion en tant que paramètres d'entrée. Le modèle crée des clés d'accès pour les deux utilisateurs IAM avec MyPublishUserKey et MyQueueUserKey. AddUserToMyPublishTopicGroup ajoute MyPublishUser au MyPublishTopicGroup afin que l'utilisateur dispose des autorisations attribuées au groupe.

Il RDMessage QueueGroup s'agit d'un groupe IAM dont les membres sont autorisés à lire et à supprimer les messages des deux files d'attente Amazon SQS à l'aide des actions et de [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryReceiveMessage.html)l'[DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/Query_QueryDeleteMessage.html)API. AddUserToMyQueueGroup MyQueueUser s'ajoute au My RDMessage QueueGroup afin que l'utilisateur dispose des autorisations attribuées au groupe. MyQueuePolicy autorise My à publier ses notifications SNSTopic aux deux files d'attente.

La liste suivante indique le contenu du CloudFormation modèle.

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  
  "Description" : "AWS CloudFormation Sample Template SNSToSQS: This Template creates an SNS topic that can send messages to 
  two SQS queues with appropriate permissions for one IAM user to publish to the topic and another to read messages from the queues. 
  MySNSTopic is set up to publish to two subscribed endpoints, which are two SQS queues (MyQueue1 and MyQueue2). MyPublishUser is an IAM user 
  that can publish to MySNSTopic using the Publish API. MyTopicPolicy assigns that permission to MyPublishUser. MyQueueUser is an IAM user 
  that can read messages from the two SQS queues. MyQueuePolicy assigns those permissions to MyQueueUser. It also assigns permission for 
  MySNSTopic to publish its notifications to the two queues. The template creates access keys for the two IAM users with MyPublishUserKey 
  and MyQueueUserKey. ***Warning*** you will be billed for the AWS resources used if you create a stack from this template.",

  "Parameters": {
    "MyPublishUserPassword": {
      "NoEcho": "true",
      "Type": "String",
      "Description": "Password for the IAM user MyPublishUser",
      "MinLength": "1",
      "MaxLength": "41",
      "AllowedPattern": "[a-zA-Z0-9]*",
      "ConstraintDescription": "must contain only alphanumeric characters."
    },
    "MyQueueUserPassword": {
      "NoEcho": "true",
      "Type": "String",
      "Description": "Password for the IAM user MyQueueUser",
      "MinLength": "1",
      "MaxLength": "41",
      "AllowedPattern": "[a-zA-Z0-9]*",
      "ConstraintDescription": "must contain only alphanumeric characters."
    }
  },


  "Resources": {
    "MySNSTopic": {
      "Type": "AWS::SNS::Topic",
      "Properties": {
        "Subscription": [{
            "Endpoint": {
              "Fn::GetAtt": ["MyQueue1", "Arn"]
            },
            "Protocol": "sqs"
          },
          {
            "Endpoint": {
              "Fn::GetAtt": ["MyQueue2", "Arn"]
            },
            "Protocol": "sqs"
          }
        ]
      }
    },
    "MyQueue1": {
      "Type": "AWS::SQS::Queue"
    },
    "MyQueue2": {
      "Type": "AWS::SQS::Queue"
    },
    "MyPublishUser": {
      "Type": "AWS::IAM::User",
      "Properties": {
        "LoginProfile": {
          "Password": {
            "Ref": "MyPublishUserPassword"
          }
        }
      }
    },
    "MyPublishUserKey": {
      "Type": "AWS::IAM::AccessKey",
      "Properties": {
        "UserName": {
          "Ref": "MyPublishUser"
        }
      }
    },
    "MyPublishTopicGroup": {
      "Type": "AWS::IAM::Group",
      "Properties": {
        "Policies": [{
          "PolicyName": "MyTopicGroupPolicy",
          "PolicyDocument": {
            "Statement": [{
              "Effect": "Allow",
              "Action": [
                "sns:Publish"
              ],
              "Resource": {
                "Ref": "MySNSTopic"
              }
            }]
          }
        }]
      }
    },
    "AddUserToMyPublishTopicGroup": {
      "Type": "AWS::IAM::UserToGroupAddition",
      "Properties": {
        "GroupName": {
          "Ref": "MyPublishTopicGroup"
        },
        "Users": [{
          "Ref": "MyPublishUser"
        }]
      }
    },
    "MyQueueUser": {
      "Type": "AWS::IAM::User",
      "Properties": {
        "LoginProfile": {
          "Password": {
            "Ref": "MyQueueUserPassword"
          }
        }
      }
    },
    "MyQueueUserKey": {
      "Type": "AWS::IAM::AccessKey",
      "Properties": {
        "UserName": {
          "Ref": "MyQueueUser"
        }
      }
    },
    "MyRDMessageQueueGroup": {
      "Type": "AWS::IAM::Group",
      "Properties": {
        "Policies": [{
          "PolicyName": "MyQueueGroupPolicy",
          "PolicyDocument": {
            "Statement": [{
              "Effect": "Allow",
              "Action": [
                "sqs:DeleteMessage",
                "sqs:ReceiveMessage"
              ],
              "Resource": [{
                  "Fn::GetAtt": ["MyQueue1", "Arn"]
                },
                {
                  "Fn::GetAtt": ["MyQueue2", "Arn"]
                }
              ]
            }]
          }
        }]
      }
    },
    "AddUserToMyQueueGroup": {
      "Type": "AWS::IAM::UserToGroupAddition",
      "Properties": {
        "GroupName": {
          "Ref": "MyRDMessageQueueGroup"
        },
        "Users": [{
          "Ref": "MyQueueUser"
        }]
      }
    },
    "MyQueuePolicy": {
      "Type": "AWS::SQS::QueuePolicy",
      "Properties": {
        "PolicyDocument": {
          "Statement": [{
            "Effect": "Allow",
            "Principal": {
              "Service": "sns.amazonaws.com"
            },
            "Action": ["sqs:SendMessage"],
            "Resource": "*",
            "Condition": {
              "ArnEquals": {
                "aws:SourceArn": {
                  "Ref": "MySNSTopic"
                }
              }
            }
          }]
        },
        "Queues": [{
          "Ref": "MyQueue1"
        }, {
          "Ref": "MyQueue2"
        }]
      }
    }
  },
  "Outputs": {
    "MySNSTopicTopicARN": {
      "Value": {
        "Ref": "MySNSTopic"
      }
    },
    "MyQueue1Info": {
      "Value": {
        "Fn::Join": [
          " ",
          [
            "ARN:",
            {
              "Fn::GetAtt": ["MyQueue1", "Arn"]
            },
            "URL:",
            {
              "Ref": "MyQueue1"
            }
          ]
        ]
      }
    },
    "MyQueue2Info": {
      "Value": {
        "Fn::Join": [
          " ",
          [
            "ARN:",
            {
              "Fn::GetAtt": ["MyQueue2", "Arn"]
            },
            "URL:",
            {
              "Ref": "MyQueue2"
            }
          ]
        ]
      }
    },
    "MyPublishUserInfo": {
      "Value": {
        "Fn::Join": [
          " ",
          [
            "ARN:",
            {
              "Fn::GetAtt": ["MyPublishUser", "Arn"]
            },
            "Access Key:",
            {
              "Ref": "MyPublishUserKey"
            },
            "Secret Key:",
            {
              "Fn::GetAtt": ["MyPublishUserKey", "SecretAccessKey"]
            }
          ]
        ]
      }
    },
    "MyQueueUserInfo": {
      "Value": {
        "Fn::Join": [
          " ",
          [
            "ARN:",
            {
              "Fn::GetAtt": ["MyQueueUser", "Arn"]
            },
            "Access Key:",
            {
              "Ref": "MyQueueUserKey"
            },
            "Secret Key:",
            {
              "Fn::GetAtt": ["MyQueueUserKey", "SecretAccessKey"]
            }
          ]
        ]
      }
    }
  }
}
```

# Notifications Amazon SNS envoyées aux points de terminaison HTTPS
<a name="sns-http-https-endpoint-as-subscriber"></a>

Vous pouvez utiliser Amazon SNS pour envoyer des messages de notification à un ou plusieurs points de terminaison HTTP ou HTTPS. Lorsque vous abonnez un point de terminaison à une rubrique, vous pouvez publier une notification dans la rubrique. Amazon SNS envoie alors une demande HTTP POST diffusant le contenu de la notification au point de terminaison abonné. Lors de l'abonnement du point de terminaison, vous choisissez si Amazon SNS doit utiliser HTTP ou HTTPS pour envoyer la demande POST au point de terminaison. Si vous utilisez HTTPS, vous pouvez bénéficier de la prise en charge des éléments suivants dans Amazon SNS : 
+ **Server Name Indication (SNI)** : Cette option permet à Amazon SNS de prendre en charge des points de terminaison HTTPS qui requièrent un SNI, tel qu'un serveur nécessitant plusieurs certificats pour héberger plusieurs domaines. Pour plus d'informations sur SNI, consultez [Server Name Indication](http://en.wikipedia.org/wiki/Server_Name_Indication) (Indication du nom du serveur).
+ **Basic and Digest Access Authentication** : Cette option vous permet de spécifier un nom d'utilisateur et un mot de passe dans l'URL HTTPS pour la demande HTTP POST, par exemple `https://user:password@domain.com` ou `https://user@domain.com`. Le nom d'utilisateur et le mot de passe sont chiffrés via la connexion SSL établie lors de l'utilisation de HTTPS. Seul le nom de domaine est envoyé en texte brut. Pour plus d'informations sur l'authentification de base et de la valeur de hachage, consultez [RFC-2617](http://www.rfc-editor.org/info/rfc2617).
**Important**  
Amazon SNS ne prend actuellement pas en charge les points de terminaison HTTP(S) privés.  
 URLs Les HTTPS ne sont accessibles qu'à partir de l'action d'API Amazon `GetSubscriptionAttributes` SNS, pour les principaux auxquels vous avez accordé l'accès à l'API.
**Note**  
 Le service client doit être en mesure de prendre en charge l'en-tête de réponse `HTTP/1.1 401 Unauthorized`

La demande contient l'objet et le message ayant été publiés dans la rubrique, ainsi que les métadonnées relatives à la notification dans un document JSON. La demande se présente comme la requête HTTP POST suivante. Pour plus d'informations sur l'en-tête HTTP et le format JSON du corps de la demande, consultez les pages [En-têtes HTTP/HTTPS](http-header.md) et [Format JSON de notification HTTP/HTTPS](http-notification-json.md).

**Note**  
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.

```
POST / HTTP/1.1
    x-amz-sns-message-type: Notification
    x-amz-sns-message-id: da41e39f-ea4d-435a-b922-c6aae3915ebe
    x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
    x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
    Content-Length: 761
    Content-Type: text/plain; charset=UTF-8
    Host: ec2-50-17-44-49.compute-1.amazonaws.com
    Connection: Keep-Alive
    User-Agent: Amazon Simple Notification Service Agent
    
{
  "Type" : "Notification",
  "MessageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "test",
  "Message" : "test message",
  "Timestamp" : "2012-04-25T21:49:25.719Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
   "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}
```

# Abonnement d'un point de terminaison HTTPS à une rubrique Amazon SNS
<a name="sns-subscribe-https-s-endpoints-to-topic"></a>

Cette rubrique explique comment abonner des HTTP/S points de terminaison aux rubriques Amazon SNS.

**Topics**
+ [Étape 1 : Vérification de la disponibilité de votre point de terminaison pour traiter des messages Amazon SNS](SendMessageToHttp.prepare.md)
+ [Étape 2 : inscrire le HTTP/HTTPS point de terminaison à la rubrique Amazon SNS](SendMessageToHttp.subscribe.md)
+ [Étape 3 : confirmez votre abonnement Amazon SNS](SendMessageToHttp.confirm.md)
+ [Étape 4 : Facultatif - Définissez la politique de livraison pour l'abonnement Amazon SNS](SendMessageToHttp.retry.md)
+ [Étape 5 : Facultatif : autorisez les utilisateurs à publier sur la rubrique Amazon SNS](SendMessageToHttp.iam.permissions.md)
+ [Étape 6 : envoyer des messages Amazon SNS au terminal HTTP/HTTPS](SendMessageToHttp.publish.md)

# Étape 1 : Vérification de la disponibilité de votre point de terminaison pour traiter des messages Amazon SNS
<a name="SendMessageToHttp.prepare"></a>

Avant d'abonner votre point de terminaison HTTP ou HTTPS à une rubrique, vous devez vous assurer qu'il est capable de traiter les demandes HTTP POST utilisées par Amazon SNS pour envoyer les messages de notification et de confirmation d'abonnement. En général, il s'agit de créer et déployer une application web (par exemple, un servlet Java si votre hôte de point de terminaison exécute Linux avec Apache et Tomcat) qui traite les demandes HTTP provenant d'Amazon SNS. Lorsque vous abonnez un point de terminaison HTTP, Amazon SNS envoie une demande de confirmation d'abonnement. Votre point de terminaison doit être préparé pour recevoir et traiter cette demande lorsque vous créez l'abonnement, car Amazon SNS envoie cette demande à ce moment-là. Amazon SNS n'envoie pas de notifications au point de terminaison tant que l'abonnement n'a pas été confirmé. Une fois que vous avez confirmé l'abonnement, Amazon SNS envoie des notifications au point de terminaison lorsqu'une action de publication est effectuée sur la rubrique abonnée.

**Pour configurer votre point de terminaison pour le traitement des messages de notification et de confirmation d'abonnement**

1. Votre code doit lire les en-têtes HTTP des demandes HTTP POST qu'Amazon SNS envoie à votre point de terminaison. Votre code doit rechercher le champ d'en-tête `x-amz-sns-message-type`, qui vous indique le type de message qu'Amazon SNS vous a envoyé. En examinant l'en-tête, vous pouvez déterminer le type de message sans avoir à analyser le corps de la demande HTTP. Vous devez traiter deux types de messages : `SubscriptionConfirmation` et `Notification`. Le message `UnsubscribeConfirmation` est utilisé uniquement lorsque l'abonnement est supprimé de la rubrique.

   Pour plus d'informations sur l'en-tête HTTP, consultez la page [En-têtes HTTP/HTTPS](http-header.md). La demande HTTP POST suivante constitue un exemple de message de confirmation d'abonnement.

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: SubscriptionConfirmation
       x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       Content-Length: 1336
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "SubscriptionConfirmation",
     "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
     "Token" : "2336412f37f...",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
     "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
     "Timestamp" : "2012-04-26T20:45:04.751Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEpH+...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
   }
   ```

1. Votre code doit analyser le document JSON dans le corps de la requête HTTP POST et le type de contenu text/plain pour lire les paires nom-valeur qui constituent le message Amazon SNS. Utilisez un analyseur JSON capable de convertir la représentation avec séquence d'échappement des caractères de contrôle en valeurs de caractères ASCII (par exemple, conversion de \$1n en caractère de nouvelle ligne). Vous pouvez utiliser un analyseur JSON existant tel que [Jackson JSON Processor](https://github.com/FasterXML/jackson) ou écrire le vôtre. Pour envoyer le texte figurant dans les champs d'objet et de message dans un format JSON valide, Amazon SNS doit convertir certains caractères de contrôle en représentations avec séquence d'échappement qui peuvent être incluses dans le document JSON. Lorsque vous recevez le document JSON dans le corps de la demande POST envoyée à votre point de terminaison, vous devez restaurer les valeurs d'origine des caractères d'échappement si vous souhaitez une représentation exacte de l'objet d'origine et des messages publiés dans la rubrique. Cette opération est essentielle si vous souhaitez vérifier la signature d'une notification, car la signature utilise le message et l'objet dans leurs formats d'origine dans le cadre de la chaîne de connexion.

1. Votre code doit vérifier l'authenticité d'un message de notification, de confirmation d'abonnement ou de confirmation de désabonnement envoyé par Amazon SNS. À l'aide des informations contenues dans le message d'Amazon SNS, votre point de terminaison peut recréer la signature afin que vous puissiez vérifier le contenu du message en mettant en correspondance votre signature avec celle envoyée par Amazon SNS avec le message. Pour plus d'informations sur la vérification de la signature d'un message, consultez la page [Vérification des signatures des messages Amazon SNS](sns-verify-signature-of-message.md).

1. En fonction du type spécifié par le champ d'en-tête `x-amz-sns-message-type`, votre code doit lire le document JSON contenu dans le corps de la demande HTTP et traiter le message. Vous trouverez ci-dessous les instructions permettant de traiter les deux principaux types de messages.  
**SubscriptionConfirmation**  
Lisez la valeur du paramètre `SubscribeURL` et accédez à cette URL. Pour confirmer l'abonnement et commencer à recevoir des notifications sur le point de terminaison, vous devez accéder à l'`SubscribeURL`URL (par exemple, en envoyant une demande HTTP GET à l'URL). Consultez l'exemple de demande HTTP à l'étape précédente pour voir comment se présente `SubscribeURL`. Pour plus d'informations sur le format du message `SubscriptionConfirmation`, consultez la page [Format JSON de confirmation d'abonnement HTTP/HTTPS](http-subscription-confirmation-json.md). Lorsque vous accédez à l'URL, vous obtenez une réponse semblable au document XML suivant. Le document renvoie l'ARN de l'abonnement pour le point de terminaison dans l'élément `ConfirmSubscriptionResult`.  

   ```
   <ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
      <ConfirmSubscriptionResult>
         <SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn>
      </ConfirmSubscriptionResult>
      <ResponseMetadata>
         <RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId>
      </ResponseMetadata>
   </ConfirmSubscriptionResponse>
   ```
Au lieu de visiter le`SubscribeURL`, vous pouvez confirmer l'abonnement à l'aide de l'[ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)`Token`action en définissant la valeur correspondante dans le `SubscriptionConfirmation` message. Si vous souhaitez autoriser uniquement le propriétaire de la rubrique et le propriétaire de l'abonnement à désabonner le point de terminaison, appelez l'action `ConfirmSubscription` avec une signature AWS .  
**Notification**  
Lisez les valeurs de `Subject` et `Message` pour obtenir les informations de notification publiées dans la rubrique.  
Pour plus d'informations sur le format du message `Notification`, consultez la page [En-têtes HTTP/HTTPS](http-header.md). La demande HTTP POST suivante constitue un exemple de message de notification envoyé au point de terminaison example.com.  

   ```
   POST / HTTP/1.1
       x-amz-sns-message-type: Notification
       x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
       x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
       x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
       Content-Length: 773
       Content-Type: text/plain; charset=UTF-8
       Host: example.com
       Connection: Keep-Alive
       User-Agent: Amazon Simple Notification Service Agent
       
   {
     "Type" : "Notification",
     "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
     "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
     "Subject" : "My First Message",
     "Message" : "Hello world!",
     "Timestamp" : "2012-05-02T00:54:06.655Z",
     "SignatureVersion" : "1",
     "Signature" : "EXAMPLEw6JRN...",
     "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
     "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
   }
   ```

1. Assurez-vous que votre point de terminaison répond au message HTTP POST provenant d'Amazon SNS avec le code d'état approprié. La connexion expirera dans 15 secondes environ. Si votre terminal ne répond pas avant l'expiration de la connexion, ou s'il renvoie un code d'état compris entre 200 et 4 *xx*, Amazon SNS considérera l'envoi du message comme une tentative infructueuse.

1. Vérifiez que votre code peut traiter les relances de diffusion de messages à partir d'Amazon SNS. Si Amazon SNS ne reçoit pas de réponse positive de votre point de terminaison, il tente de diffuser à nouveau le message. Cela s'applique à tous les messages, notamment le message de confirmation d'abonnement. Par défaut, si la diffusion initiale du message échoue, Amazon SNS tente jusqu'à trois relances avec un délai de 20 secondes entre les échecs des tentatives.
**Note**  
La demande de message expire au bout de 15 secondes environ. Cela signifie que si l'échec de la diffusion du message est provoqué par un dépassement du délai d'attente, Amazon SNS effectue une relance environ 35 secondes après la tentative de diffusion précédente. Vous pouvez définir une politique de livraison différente pour le point de terminaison.

   Amazon SNS utilise le champ d'en-tête `x-amz-sns-message-id` pour identifier de manière unique chaque message publié dans une rubrique Amazon SNS. En comparant les IDs messages que vous avez traités avec les messages entrants, vous pouvez déterminer s'il s'agit d'une nouvelle tentative.

1. Si vous abonnez un point de terminaison HTTPS, assurez-vous que ce dernier possède un certificat de serveur provenant d'une autorité de certification (CA) approuvée. Amazon SNS envoie uniquement des messages aux points de terminaison HTTPS qui disposent d'un certificat de serveur signé par une autorité de certification qu'il a approuvée.

1. Déployez le code que vous avez créé pour recevoir des messages Amazon SNS. Lorsque vous abonnez le point de terminaison, il doit être prêt à recevoir au moins le message de confirmation d'abonnement.

# Étape 2 : inscrire le HTTP/HTTPS point de terminaison à la rubrique Amazon SNS
<a name="SendMessageToHttp.subscribe"></a>

Pour envoyer des messages à un point de terminaison HTTP ou HTTPS via une rubrique, vous devez abonner le point de terminaison à la rubrique Amazon SNS. Spécifiez le point de terminaison à l'aide de son URL. Pour vous abonner à une rubrique, vous pouvez utiliser la console Amazon SNS, la commande [sns-subscribe](https://docs.aws.amazon.com/cli/latest/reference/sns/subscribe.html) ou l'action d'API [Abonner](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html). Avant de commencer, assurez-vous que vous disposez de l'URL du point de terminaison à abonner et que ce dernier est prêt à recevoir les messages de confirmation et de notification, comme décrit à l'étape 1.

**Pour abonner un point de terminaison HTTP ou HTTPS à une rubrique à l'aide de la console Amazon SNS**

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

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

1. Choisissez **Créer un abonnement**.

1. Dans la liste déroulante **Protocole**, sélectionnez **HTTP** ou **HTTPS**.

1. Dans la zone **Point de terminaison**, collez l'URL du point de terminaison auquel la rubrique doit envoyer des messages, puis choisissez **Créer un abonnement**.

1. Le message de confirmation s'affiche. Choisissez **Fermer**.

   Le **numéro d'abonnement de votre nouvel abonnement** s'affiche PendingConfirmation. Lorsque vous confirmez l'abonnement, le champ **ID de l'abonnement** affiche l'ID d'abonnement.

# Étape 3 : confirmez votre abonnement Amazon SNS
<a name="SendMessageToHttp.confirm"></a>

Pour confirmer votre abonnement Amazon SNS, suivez ces étapes pour vous assurer que votre terminal peut bien recevoir des messages. Ce processus implique de configurer votre terminal pour gérer les messages de confirmation entrants, de récupérer l'URL de confirmation et de confirmer l'abonnement. Vous pouvez confirmer l'abonnement automatiquement ou manuellement, selon votre configuration.

1. Après vous être abonné à une rubrique Amazon SNS, Amazon SNS envoie un message de confirmation à votre terminal. Ce message contient un `SubscribeURL` que vous devez utiliser pour confirmer l'abonnement.

1. Votre terminal doit être configuré pour écouter les messages entrants provenant d'Amazon SNS. Lorsque le message de confirmation arrive, **`SubscribeURL`**extrayez-le du message.

1. Une fois que vous avez obtenu le`SubscribeURL`, vous pouvez confirmer l'abonnement de deux manières :
   + **Confirmation automatique** — Votre terminal peut confirmer automatiquement l'abonnement en envoyant une **requête HTTP GET** au`SubscribeURL`.

     Cette méthode ne nécessite aucune intervention manuelle.
   + **Confirmation manuelle** — Si la confirmation automatique n'est pas configurée, **copiez** le message **`SubscribeURL`**de confirmation et **collez-le** dans la barre d'adresse de votre navigateur.

     Cela confirmera l'abonnement manuellement.

1. Vous pouvez également vérifier le **statut de l'abonnement** à l'aide de la console Amazon SNS :

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

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

   1. Trouvez votre **abonnement** dans la liste.
      + En cas de confirmation, le `SubscriptionArn` sera affiché.
      + S'il n'est toujours pas confirmé, il s'affichera sous la forme`PendingConfirmation`.

# Étape 4 : Facultatif - Définissez la politique de livraison pour l'abonnement Amazon SNS
<a name="SendMessageToHttp.retry"></a>

Par défaut, si la diffusion initiale du message échoue, Amazon SNS tente jusqu'à trois relances avec un délai de 20 secondes entre les échecs des tentatives. Comme indiqué dans l'[étape 1](SendMessageToHttp.prepare.md), votre point de terminaison doit contenir du code capable de traiter les messages relancés. En définissant la politique de diffusion sur une rubrique ou un abonnement, vous pouvez contrôler la fréquence et l'intervalle auxquels Amazon SNS relancera les messages qui ont échoué. Vous pouvez également spécifier le type de contenu de vos HTTP/S notifications dans`DeliveryPolicy`. Pour de plus amples informations, veuillez consulter [Création d'une politique HTTP/S de livraison](sns-message-delivery-retries.md#creating-delivery-policy).

# Étape 5 : Facultatif : autorisez les utilisateurs à publier sur la rubrique Amazon SNS
<a name="SendMessageToHttp.iam.permissions"></a>

Par défaut, le propriétaire de la rubrique dispose d''autorisations de publication dans la rubrique. Pour permettre à d'autres utilisateurs ou applications de publier sur le sujet, vous devez utiliser Gestion des identités et des accès AWS (IAM) pour autoriser la publication du sujet. Pour plus d'informations sur l'octroi d'autorisations d'actions Amazon SNS aux utilisateurs IAM, consultez la section [Utilisation de politiques basées sur l'identité avec Amazon SNS](sns-using-identity-based-policies.md).

Il existe deux façons de contrôler l'accès à une rubrique :
+ Ajoutez une politique à un utilisateur ou un groupe IAM. La façon la plus simple d'accorder à des utilisateurs des autorisations d'accès à des rubriques consiste à créer un groupe et à lui ajouter la politique appropriée, puis à ajouter des utilisateurs à ce groupe. Il est beaucoup plus facile d'ajouter ou de supprimer des utilisateurs dans un groupe que de suivre les politiques que vous définissez pour des utilisateurs individuels.
+ Ajoutez une politique à la rubrique. Si vous souhaitez accorder des autorisations d'accès à une rubrique à un autre compte AWS , la seule façon de procéder consiste à ajouter une politique dont le principal est Compte AWS auquel vous voulez accorder des autorisations.

Vous devez utiliser la première méthode dans la plupart des cas (appliquer des politiques à des groupes et gérer les autorisations accordées aux utilisateurs en ajoutant ou supprimant les utilisateurs appropriés dans les groupes). Si vous avez besoin d'accorder des autorisations à un utilisateur d'un autre compte, utilisez la seconde méthode.

Si vous ajoutiez la politique suivante à un utilisateur ou à un groupe IAM, vous autoriseriez cet utilisateur ou les membres de ce groupe à effectuer l'`sns:Publish`action sur le sujet MyTopic.

```
{
  "Statement":[{
    "Sid":"AllowPublishToMyTopic",
    "Effect":"Allow",
    "Action":"sns:Publish",
    "Resource":"arn:aws:sns:us-east-2:123456789012:MyTopic"
  }]
}
```

L'exemple de politique suivant montre comment accorder à un autre compte des autorisations d'accès à une rubrique.

**Note**  
Lorsque vous accordez à une autre personne l' Compte AWS accès à une ressource de votre compte, vous accordez également aux utilisateurs IAM disposant d'un accès de niveau administrateur (accès générique) des autorisations d'accès à cette ressource. Tous les autres utilisateurs IAM de l'autre compte se voient automatiquement refuser l'accès à votre ressource. Si vous souhaitez accorder à des utilisateurs IAM spécifiques de cette ressource un Compte AWS accès à votre ressource, le compte ou un utilisateur IAM disposant d'un accès de niveau administrateur doit déléguer les autorisations pour la ressource à ces utilisateurs IAM. Pour plus d'informations sur la délégation entre comptes, consultez la section [Activation d'accès entre comptes](https://docs.aws.amazon.com/IAM/latest/UserGuide/Delegation.html) du *guide Utilisation d'IAM*.

Si vous avez ajouté la politique suivante à un sujet MyTopic du compte 123456789012, vous autorisez le compte 111122223333 à effectuer l'action sur ce sujet. `sns:Publish`

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

# Étape 6 : envoyer des messages Amazon SNS au terminal HTTP/HTTPS
<a name="SendMessageToHttp.publish"></a>

Vous pouvez envoyer un message aux abonnements d'une rubrique en effectuant une publication dans la rubrique. Pour publier une rubrique, vous pouvez utiliser la console Amazon SNS, la CLI `[sns-publish](https://docs.aws.amazon.com/cli/latest/reference/sns/publish.html)` ou l'API `[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)`.

Si vous avez suivi l'[étape 1](SendMessageToHttp.prepare.md), le code que vous avez déployé sur votre point de terminaison doit traiter la notification.

**Pour effectuer une publication dans une rubrique à l'aide de la console Amazon SNS**

1. À l'aide des informations d'identification de l'utilisateur Compte AWS ou de l'utilisateur IAM autorisé à publier sur le sujet, connectez-vous à la console Amazon SNS AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/sns/](https://console.aws.amazon.com/sns/home)

1. Dans le panneau de navigation, choisissez **Rubriques**, puis sélectionnez une rubrique.

1. Cliquez sur le bouton **Publier le message**.

1. Dans la zone **Sujet**, entrez un objet (par exemple, **Testing publish to my endpoint**).

1. Dans la zone **Message**, entrez un texte (par exemple, **Hello world\$1**), puis choisissez **Publier un message**.

    Le message suivant s'affiche : Votre message a été publié.

# Vérification des signatures des messages Amazon SNS
<a name="sns-verify-signature-of-message"></a>

Amazon SNS utilise les signatures des messages pour confirmer l'authenticité des messages envoyés à votre point de terminaison HTTP. Pour garantir l'intégrité des messages et empêcher toute usurpation d'identité, vous **devez** vérifier la signature avant de traiter les messages Amazon SNS.

**Quand devez-vous vérifier les signatures Amazon SNS ?**

Vous devez vérifier les signatures des messages Amazon SNS dans les scénarios suivants :
+ Lorsqu'Amazon SNS envoie un message de notification à votre point de terminaison HTTP (S).
+ Lorsqu'Amazon SNS envoie un message de confirmation à votre point de terminaison après un appel [https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html)d'[https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html)API.

**Amazon SNS prend en charge deux versions de signature :**
+ SignatureVersion1 — Utilise un SHA1 hachage du message.
+ SignatureVersion2 — Utilise un SHA256 hachage du message. Cela renforce la sécurité et constitue l'option recommandée.

**Pour vérifier correctement les signatures des messages SNS, suivez les meilleures pratiques suivantes :**
+ Récupérez toujours le certificat de signature à l'aide du protocole HTTPS pour empêcher les attaques d'interception non autorisées.
+ Vérifiez que le certificat est émis par Amazon SNS.
+ Vérifiez que la chaîne de confiance du certificat est valide.
+ Le certificat doit provenir d'une URL signée par le SNS.
+ Ne faites confiance à aucun certificat fourni dans le message sans validation.
+ Rejetez tout message contenant un message inattendu `TopicArn` pour éviter toute usurpation d'identité.
+  AWS SDKs Pour Amazon SNS, ils fournissent une logique de validation intégrée, ce qui réduit le risque de mauvaise implémentation.

# Configuration de la version de signature des messages sur les rubriques Amazon SNS
<a name="sns-verify-signature-of-message-configure-message-signature"></a>

La configuration de la version de signature des messages sur les rubriques Amazon SNS vous permet d'améliorer la sécurité et la compatibilité de votre processus de vérification des messages.

Sélectionnez entre `SignatureVersion` **1** (SHA1) et `SignatureVersion` **2** (SHA256) pour contrôler l'algorithme de hachage utilisé pour signer les messages. **La valeur par défaut des rubriques Amazon SNS est 1. `SignatureVersion`** Vous pouvez configurer ce paramètre à l'aide de l'action [https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)API.

Utilisez l'exemple suivant pour définir l'attribut topic à l'`SignatureVersion`aide de AWS CLI :

```
aws sns set-topic-attributes \
    --topic-arn arn:aws:sns:us-east-2:123456789012:MyTopic \
    --attribute-name SignatureVersion \
    --attribute-value 2
```

# Vérification de la signature d'un message Amazon SNS lors de l'utilisation de requêtes HTTP
<a name="sns-verify-signature-of-message-verify-message-signature"></a>

La vérification de la signature d'un message Amazon SNS lors de l'utilisation de requêtes HTTP garantit l'authenticité et l'intégrité du message. Ce processus confirme que le message provient d'Amazon SNS et qu'il n'a pas été falsifié pendant le transport. En analysant le message, en créant la chaîne appropriée à signer et en validant la signature par rapport à une clé publique fiable, vous protégez votre système contre l'usurpation d'identité et les modifications non autorisées des messages.

1. Extrayez les **paires clé-valeur** du document JSON dans le corps de la requête HTTP POST envoyée par Amazon SNS. Ces champs sont obligatoires pour créer la **chaîne à signer**.
   + `Message`
   + `Subject`(si présent)
   + `MessageId`
   + `Timestamp`
   + `TopicArn`
   + `Type`

   Par exemple :

   ```
   MESSAGE_FILE="message.json"
   FIELDS=("Message" "MessageId" "Subject" "Timestamp" "TopicArn" "Type")
   ```
**Note**  
Si un champ contient des caractères échappés (par exemple,`\n`), convertissez-les dans leur **forme d'origine** pour garantir une correspondance exacte.

1. Localisez le `SigningCertURL` champ dans le message Amazon SNS. Ce certificat contient la clé publique nécessaire pour vérifier la signature du message. Par exemple :

   ```
   SIGNING_CERT_URL=$(jq -r '.SigningCertURL' "$MESSAGE_FILE")
   ```

1. Assurez-vous qu'`SigningCertURL`il provient d'un AWS domaine fiable (par exemple,https://sns.us-east-1.amazonaws.com). Rejetez tous ** AWS les domaines URLs extérieurs** pour des raisons de sécurité.

1. Téléchargez le **certificat X.509** à partir de l'URL fournie. Par exemple :

   ```
   curl -s "$SIGNING_CERT_URL" -o signing_cert.pem
   ```

1. Extrayez la **clé publique** du certificat X.509 téléchargé. La clé publique permet de déchiffrer la signature du message et de vérifier son intégrité. Par exemple :

   ```
   openssl x509 -pubkey -noout -in signing_cert.pem > public_key.pem
   ```

1. Les différents types de messages nécessitent différentes paires clé-valeur dans la chaîne à signer. Identifiez le **type de message** (`Type`champ dans le message Amazon SNS) pour déterminer les paires **clé-valeur** à inclure :
   + **Message de notification** — Comprend `Message``MessageId`, `Subject` (le cas échéant)`Timestamp`,`TopicArn`, et`Type`.
   + **SubscriptionConfirmation**ou **UnsubscribeConfirmation message** — Comprend`Message`, `MessageId``SubscribeURL`,`Timestamp`,`Token`,`TopicArn`, et`Type`.

1. Amazon SNS exige que la chaîne à signer respecte un ordre de champs strict et fixe à des fins de vérification. **Seuls les champs explicitement obligatoires doivent être inclus**. Aucun champ supplémentaire ne peut être ajouté. Les champs facultatifs, tels que`Subject`, ne doivent être inclus que s'ils sont présents dans le message et doivent apparaître dans la position exacte définie par l'ordre des champs requis. Par exemple :

   ```
   KeyNameOne\nValueOne\nKeyNameTwo\nValueTwo
   ```
**Important**  
N'ajoutez pas de caractère de nouvelle ligne à la fin de la chaîne.

1. Disposez les **paires clé-valeur** par ordre de tri des octets (ordre alphabétique du nom de la clé).

1. Construisez la **chaîne à signer** en utilisant l'exemple de format suivant :

   ```
   STRING_TO_SIGN=""
   for FIELD in "${FIELDS[@]}"; do
       VALUE=$(jq -r --arg field "$FIELD" '.[$field]' "$MESSAGE_FILE")
       STRING_TO_SIGN+="$FIELD\n$VALUE"
       # Append a newline after each field except the last one
       if [[ "$FIELD" != "Type" ]]; then
           STRING_TO_SIGN+="\n"
       fi
   done
   ```

   **Exemple de message de notification :**

   ```
   Message
   My Test Message
   MessageId
   4d4dc071-ddbf-465d-bba8-08f81c89da64
   Subject
   My subject
   Timestamp
   2019-01-31T04:37:04.321Z
   TopicArn
   arn:aws:sns:us-east-2:123456789012:s4-MySNSTopic-1G1WEFCOXTC0P
   Type
   Notification
   ```

   **SubscriptionConfirmation exemple :**

   ```
   Message
   Please confirm your subscription
   MessageId
   3d891288-136d-417f-bc05-901c108273ee
   SubscribeURL
   https://sns.us-east-2.amazonaws.com/...
   Timestamp
   2024-01-01T00:00:00.000Z
   Token
   abc123...
   TopicArn
   arn:aws:sns:us-east-2:123456789012:MyTopic
   Type
   SubscriptionConfirmation
   ```

1. Le `Signature` champ du message est codé en Base64. Vous devez le **décoder** pour comparer sa **forme binaire brute** avec le hachage **dérivé**. Par exemple :

   ```
   SIGNATURE=$(jq -r '.Signature' "$MESSAGE_FILE")
   echo "$SIGNATURE" | base64 -d > signature.bin
   ```

1. Utilisez le `SignatureVersion` champ pour sélectionner l'algorithme de hachage :
   + Pour `SignatureVersion` **1**, utilisez **SHA1**(par exemple,`-sha1`).
   + Pour `SignatureVersion` **2**, utilisez **SHA256**(par exemple,`-sha256`).

1. **Pour confirmer l'authenticité du message Amazon SNS, générez un **hachage** de la chaîne construite et vérifiez la signature à l'aide de la clé publique.**

   ```
   openssl dgst -sha256 -verify public_key.pem -signature signature.bin <<< "$STRING_TO_SIGN"
   ```

   Si la signature est valide, le résultat est`Verified OK`. Dans le cas contraire, le résultat est`Verification Failure`.

## Exemple de script avec gestion des erreurs
<a name="sns-verify-signature-of-message-example"></a>

L'exemple de script suivant automatise le processus de vérification :

```
#!/bin/bash

# Path to the local message file
MESSAGE_FILE="message.json"

# Extract the SigningCertURL and Signature from the message
SIGNING_CERT_URL=$(jq -r '.SigningCertURL' "$MESSAGE_FILE")
SIGNATURE=$(jq -r '.Signature' "$MESSAGE_FILE")

# Fetch the X.509 certificate
curl -s "$SIGNING_CERT_URL" -o signing_cert.pem

# Extract the public key from the certificate
openssl x509 -pubkey -noout -in signing_cert.pem > public_key.pem

# Define the fields to include in the string to sign
FIELDS=("Message" "MessageId" "Subject" "Timestamp" "TopicArn" "Type")

# Initialize the string to sign
STRING_TO_SIGN=""

# Iterate over the fields to construct the string to sign
for FIELD in "${FIELDS[@]}"; do
    VALUE=$(jq -r --arg field "$FIELD" '.[$field]' "$MESSAGE_FILE")
    STRING_TO_SIGN+="$FIELD\n$VALUE"
    # Append a newline after each field except the last one
    if [[ "$FIELD" != "Type" ]]; then
        STRING_TO_SIGN+="\n"
    fi
done

# Verify the signature
echo -e "$STRING_TO_SIGN" | openssl dgst -sha256 -verify public_key.pem -signature <(echo "$SIGNATURE" | base64 -d)
```

# Analyse des formats de message Amazon SNS
<a name="sns-message-and-json-formats"></a>

Lorsqu'Amazon SNS envoie des messages aux HTTP/HTTPS points de terminaison, ceux-ci contiennent à la fois des en-têtes HTTP et un corps de message JSON. Ces messages suivent un format structuré qui inclut des métadonnées telles que le type de message, l'ARN du sujet, les horodatages et les signatures numériques. En analysant correctement les messages Amazon SNS, vous pouvez déterminer s'il s'agit d'une confirmation d'abonnement, d'une notification ou d'une confirmation de désinscription, extraire les données pertinentes et vérifier l'authenticité à l'aide de la validation de signature.

# En-têtes HTTP/HTTPS
<a name="http-header"></a>

Lorsqu'Amazon SNS envoie un message de confirmation d'abonnement, de notification ou de confirmation de désinscription aux HTTP/HTTPS points de terminaison, il envoie un message POST avec un certain nombre de valeurs d'en-tête spécifiques à Amazon SNS. Vous pouvez utiliser les valeurs d'en-tête pour des opérations telles que l'identification du type de message sans avoir à analyser le corps du message JSON pour lire la valeur `Type`. Par défaut, Amazon SNS envoie toutes les notifications aux points de terminaison HTTP/S avec `Content-Type` défini sur `text/plain; charset=UTF-8`. Pour en choisir une `Content-Type` autre que text/plain (par défaut), voir `headerContentType` dans[Création d'une politique HTTP/S de livraison](sns-message-delivery-retries.md#creating-delivery-policy).

**`x-amz-sns-message-type`**  
Type du message. Les valeurs possibles sont `SubscriptionConfirmation`, `Notification` et `UnsubscribeConfirmation`.

**`x-amz-sns-message-id`**  
Identifiant unique universel (UUID), propre à chaque message publié. Pour une notification qu'Amazon SNS renvoie au cours d'une nouvelle tentative, l'ID du message d'origine est utilisé.

**`x-amz-sns-topic-arn`**  
Amazon Resource Name (ARN) de la rubrique dans laquelle ce message a été publié.

**`x-amz-sns-subscription-arn`**  
ARN de l'abonnement à ce point de terminaison.

L'en-tête HTTP POST suivant est un exemple d'en-tête pour un message `Notification` adressé à un point de terminaison HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent
```

# Format JSON de confirmation d'abonnement HTTP/HTTPS
<a name="http-subscription-confirmation-json"></a>

Une fois que vous avez inscrit un HTTP/HTTPS point de terminaison, Amazon SNS envoie un message de confirmation d'abonnement au point de terminaison. HTTP/HTTPS Ce message contient une valeur `SubscribeURL` que vous devez visiter pour confirmer l'abonnement (sinon, vous pouvez utiliser la valeur `Token` avec [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html)). 

**Note**  
Amazon SNS n'envoie pas de notifications à ce point de terminaison tant que l'abonnement n'est pas confirmé

Le message de confirmation d'abonnement est un message POST dont le corps contient un document JSON avec les paires nom-valeur suivantes.

**`Type`**  
Type du message. Pour une confirmation d'abonnement, le type est `SubscriptionConfirmation`.

**`MessageId`**  
Identifiant unique universel (UUID), propre à chaque message publié. Pour un message qu'Amazon SNS renvoie au cours d'une nouvelle tentative, l'ID de message d'origine est utilisé.

**`Token`**  
Valeur que vous pouvez utiliser avec l'action [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) pour confirmer l'abonnement. Sinon, vous pouvez simplement visiter le paramètre `SubscribeURL`.

**`TopicArn`**  
Amazon Resource Name (ARN) de la rubrique à laquelle ce point de terminaison est abonné.

**`Message`**  
Chaîne qui décrit le message. Pour une confirmation d'abonnement, cette chaîne se présente comme suit :  

```
You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
URL que vous devez visiter afin de confirmer l'abonnement. Sinon, vous pouvez utiliser à la place le `Token` avec l'action [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) pour confirmer l'abonnement.

**`Timestamp`**  
Heure (GMT) à laquelle la confirmation d'abonnement a été envoyée.

**`SignatureVersion`**  
Version de la signature Amazon SNS utilisée.  
+ Si `SignatureVersion` a pour valeur **1**, `Signature` est une signature `SHA1withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Type`, `Timestamp` et `TopicArn`. 
+ Si `SignatureVersion` a pour valeur **2**, `Signature` est une signature `SHA256withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Type`, `Timestamp` et `TopicArn`.

**`Signature`**  
Signature `SHA1withRSA` ou `SHA256withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Type`, `Timestamp` et `TopicArn`.

**`SigningCertURL`**  
URL permettant d'accéder au certificat utilisé pour signer le message.

Le message HTTP POST suivant est un exemple de message `SubscriptionConfirmation` à un point de terminaison HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: SubscriptionConfirmation
x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Content-Length: 1336
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "SubscriptionConfirmation",
  "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
  "Timestamp" : "2012-04-26T20:45:04.751Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# Format JSON de notification HTTP/HTTPS
<a name="http-notification-json"></a>

Lorsqu'Amazon SNS envoie une notification à un point de terminaison HTTP ou HTTPS abonné, le corps du message POST envoyé au point de terminaison contient un document JSON avec les paires nom-valeur suivantes.

**`Type`**  
Type du message. Pour une notification, le type est `Notification`.

**`MessageId`**  
Identifiant unique universel (UUID), propre à chaque message publié. Pour une notification qu'Amazon SNS renvoie au cours d'une nouvelle tentative, l'ID du message d'origine est utilisé.

**`TopicArn`**  
Amazon Resource Name (ARN) de la rubrique dans laquelle ce message a été publié.

**`Subject`**  
Paramètre `Subject` spécifié quand la notification a été publiée dans la rubrique.  
Ce paramètre est facultatif. Si aucun paramètre `Subject` n'a été spécifié, cette paire nom-valeur n'apparaît pas dans ce document JSON.

**`Message`**  
Valeur `Message` spécifiée quand la notification a été publiée dans la rubrique.

**`Timestamp`**  
Heure (GMT) à laquelle la notification a été publiée.

**`SignatureVersion`**  
Version de la signature Amazon SNS utilisée.  
+ Si `SignatureVersion` a pour valeur **1**, `Signature` est une signature `SHA1withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Subject` (le cas échéant), `Type`, `Timestamp` et `TopicArn`.
+ Si `SignatureVersion` a pour valeur **2**, `Signature` est une signature `SHA256withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Subject` (le cas échéant), `Type`, `Timestamp` et `TopicArn`.

**`Signature`**  
Signature `SHA1withRSA` ou `SHA256withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Subject` (le cas échéant), `Type`, `Timestamp` et `TopicArn`.

**`SigningCertURL`**  
URL permettant d'accéder au certificat utilisé pour signer le message.

**`UnsubscribeURL`**  
URL que vous pouvez utiliser pour désabonner le point de terminaison de cette rubrique. Si vous visitez cette URL, Amazon SNS désabonne le point de terminaison et cesse de lui envoyer des notifications.

Le message HTTP POST suivant est un exemple de message `Notification` à un point de terminaison HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: Notification
x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96
Content-Length: 773
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "Notification",
  "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Subject" : "My First Message",
  "Message" : "Hello world!",
  "Timestamp" : "2012-05-02T00:54:06.655Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEw6JRN...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
  "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96"
  }
```

# Format JSON de confirmation de désabonnement HTTP/HTTPS
<a name="http-unsubscribe-confirmation-json"></a>

Une fois qu'un HTTP/HTTPS point de terminaison est désabonné d'une rubrique, Amazon SNS envoie un message de confirmation de désabonnement au point de terminaison.

Le message de confirmation de désabonnement est un message POST dont le corps contient un document JSON avec les paires nom-valeur suivantes.

**`Type`**  
Type du message. Pour une confirmation de désabonnement, le type est `UnsubscribeConfirmation`.

**`MessageId`**  
Identifiant unique universel (UUID), propre à chaque message publié. Pour un message qu'Amazon SNS renvoie au cours d'une nouvelle tentative, l'ID de message d'origine est utilisé.

**`Token`**  
Valeur que vous pouvez utiliser avec l'action [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) pour reconfirmer l'abonnement. Sinon, vous pouvez simplement visiter le paramètre `SubscribeURL`.

**`TopicArn`**  
Amazon Resource Name (ARN) de la rubrique dont ce point de terminaison s'est désabonné.

**`Message`**  
Chaîne qui décrit le message. Pour une confirmation de désabonnement, cette chaîne se présente comme suit :  

```
You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
```

**`SubscribeURL`**  
URL que vous devez visiter afin de reconfirmer l'abonnement. Sinon, vous pouvez utiliser à la place le `Token` avec l'action [https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) pour reconfirmer l'abonnement.

**`Timestamp`**  
Heure (GMT) à laquelle la confirmation de désabonnement a été envoyée.

**`SignatureVersion`**  
Version de la signature Amazon SNS utilisée.  
+ Si `SignatureVersion` a pour valeur **1**, `Signature` est une signature `SHA1withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Type`, `Timestamp` et `TopicArn`.
+ Si `SignatureVersion` a pour valeur **2**, `Signature` est une signature `SHA256withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Type`, `Timestamp` et `TopicArn`.

**`Signature`**  
Signature `SHA1withRSA` ou `SHA256withRSA` codée en Base64 des valeurs `Message`, `MessageId`, `Type`, `Timestamp` et `TopicArn`.

**`SigningCertURL`**  
URL permettant d'accéder au certificat utilisé pour signer le message.

Le message HTTP POST suivant est un exemple de message `UnsubscribeConfirmation` à un point de terminaison HTTP.

```
POST / HTTP/1.1
x-amz-sns-message-type: UnsubscribeConfirmation
x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d
x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic
x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55
Content-Length: 1399
Content-Type: text/plain; charset=UTF-8
Host: myhost.example.com
Connection: Keep-Alive
User-Agent: Amazon Simple Notification Service Agent

{
  "Type" : "UnsubscribeConfirmation",
  "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d",
  "Token" : "2336412f37...",
  "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
  "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...",
  "Timestamp" : "2012-04-26T20:06:41.581Z",
  "SignatureVersion" : "1",
  "Signature" : "EXAMPLEHXgJm...",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem"
}
```

# SetSubscriptionAttributes politique de livraison au format JSON
<a name="set-sub-attributes-delivery-policy-json"></a>

Si vous envoyez une demande à l'action `SetSubscriptionAttributes` et que vous définissez le paramètre `AttributeName` sur la valeur `DeliveryPolicy`, la valeur du paramètre `AttributeValue` doit être un objet JSON valide. Par exemple, l'exemple suivant définit la politique de diffusion sur 5 tentatives au total.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetSubscriptionAttributes
&SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca
&AttributeName=DeliveryPolicy
&AttributeValue={"healthyRetryPolicy":{"numRetries":5}}
...
```

Utilisez le format JSON suivant pour la valeur du paramètre `AttributeValue`.

```
{
    "healthyRetryPolicy" : {
        "minDelayTarget" :  int,
        "maxDelayTarget" : int,
        "numRetries" : int,
        "numMaxDelayRetries" : int,
        "backoffFunction" : "linear|arithmetic|geometric|exponential"
    },
    "throttlePolicy" : {
        "maxReceivesPerSecond" : int
    },
    "requestPolicy" : {
        "headerContentType" : "text/plain | application/json | application/xml"
    }
}
```

Pour plus d'informations sur cette `SetSubscriptionAttribute` action, consultez le [SetSubscriptionAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetSubscriptionAttributes.html)manuel *Amazon Simple Notification Service API Reference*. Pour plus d'informations sur les en-têtes content-type HTTP pris en charge, consultez [Création d'une politique HTTP/S de livraison](sns-message-delivery-retries.md#creating-delivery-policy).

# SetTopicAttributes politique de livraison au format JSON
<a name="set-topic-attributes-delivery-policy-json"></a>

Si vous envoyez une demande à l'action `SetTopicAttributes` et que vous définissez le paramètre `AttributeName` sur la valeur `DeliveryPolicy`, la valeur du paramètre `AttributeValue` doit être un objet JSON valide. Par exemple, l'exemple suivant définit la politique de diffusion sur 5 tentatives au total.

```
http://sns.us-east-2.amazonaws.com/
?Action=SetTopicAttributes
&TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic
&AttributeName=DeliveryPolicy
&AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}}
...
```

Utilisez le format JSON suivant pour la valeur du paramètre `AttributeValue`.

```
{
    "http" : {
        "defaultHealthyRetryPolicy" : {
            "minDelayTarget":  int,
            "maxDelayTarget": int,
            "numRetries": int,
            "numMaxDelayRetries": int,
            "backoffFunction": "linear|arithmetic|geometric|exponential"
        },
        "disableSubscriptionOverrides" : Boolean,
        "defaultThrottlePolicy" : {
            "maxReceivesPerSecond" : int
        },
        "defaultRequestPolicy" : {
            "headerContentType" : "text/plain | application/json | application/xml"
        }
    }
}
```

Pour plus d'informations sur cette `SetTopicAttribute` action, consultez le [SetTopicAttributes](https://docs.aws.amazon.com/sns/latest/api/API_SetTopicAttributes.html)manuel *Amazon Simple Notification Service API Reference*. Pour plus d'informations sur les en-têtes content-type HTTP pris en charge, consultez [Création d'une politique HTTP/S de livraison](sns-message-delivery-retries.md#creating-delivery-policy).

# Transférez les événements Amazon SNS à Event Fork AWS Pipelines
<a name="sns-fork-pipeline-as-subscriber"></a>


|  | 
| --- |
| Pour l'archivage et l'analyse des événements, Amazon SNS recommande désormais d'utiliser son intégration native avec Amazon Data Firehose. Vous pouvez abonner les flux de diffusion Firehose aux rubriques SNS, ce qui vous permet d'envoyer des notifications aux points de terminaison d'archivage et d'analyse tels que les buckets Amazon Simple Storage Service (Amazon S3), les tables Amazon Redshift, Amazon Service (Service), etc. OpenSearch OpenSearch L'utilisation d'Amazon SNS avec les flux de diffusion Firehose est une solution entièrement gérée et sans code qui ne nécessite pas l'utilisation de fonctions. AWS Lambda Pour de plus amples informations, veuillez consulter [Streams de diffusion de Fanout to Firehose](sns-firehose-as-subscriber.md). | 

Vous pouvez utiliser Amazon SNS pour créer des applications qui reposent sur les événements et utilisent les services d'abonné afin d'exécuter automatiquement des tâches en réponse à des événements déclenchés par ses services d'éditeur. Ce modèle d'architecture peut rendre des services plus réutilisables, interopérables et évolutifs. Toutefois, il peut être fastidieux de traiter les événements via des pipelines qui répondent aux exigences courantes de gestion des événements, par exemple la sauvegarde, le stockage, la recherche, l'analytique et la relecture d'événements.

Pour accélérer le développement de vos applications basées sur les événements, vous pouvez abonner des pipelines de gestion d'événements, alimentés par Event Fork AWS Pipelines, à des rubriques Amazon SNS. AWS Event Fork Pipelines est une suite d'[applications imbriquées](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html) open source, basée sur le [modèle d'application AWS sans serveur](https://aws.amazon.com/serverless/sam/) (AWS SAM), que vous pouvez déployer directement depuis la [suite AWS Event Fork Pipelines](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) (choisissez **Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés**) sur votre compte. AWS 

Pour un AWS cas d'utilisation d'Event Fork Pipelines, voir[Déploiement et test de l'exemple d'application Amazon SNS Event Fork Pipelines](sns-deploy-test-fork-pipelines-sample-application.md).

**Topics**
+ [Comment fonctionne AWS Event Fork Pipelines](#how-sns-fork-works)
+ [Déploiement de pipelines AWS Event Fork](#deploying-sns-fork-pipelines)
+ [Déploiement et test de l'exemple d'application Amazon SNS Event Fork Pipelines](sns-deploy-test-fork-pipelines-sample-application.md)
+ [Abonnement d' AWS Event Fork Pipelines à une rubrique Amazon SNS](sns-subscribe-event-fork-pipelines.md)

## Comment fonctionne AWS Event Fork Pipelines
<a name="how-sns-fork-works"></a>

AWS Event Fork Pipelines est un modèle de conception sans serveur. Cependant, il s'agit également d'une suite d'applications sans serveur imbriquées basées sur le AWS SAM (que vous pouvez déployer directement depuis le AWS Serverless Application Repository (AWS SAR) sur votre site Compte AWS afin d'enrichir vos plateformes axées sur les événements). Vous pouvez déployer ces applications imbriquées individuellement, comme requis par votre architecture.

**Topics**
+ [Pipeline de stockage et de sauvegarde d'événements](#sns-fork-event-storage-and-backup-pipeline)
+ [Le pipeline de recherche et d'analyse d'événements](#sns-fork-event-search-and-analytics-pipeline)
+ [Le pipeline de relecture d'événements](#sns-fork-event-replay-pipeline)

Le schéma suivant montre une application AWS Event Fork Pipelines complétée par trois applications imbriquées. Vous pouvez déployer n'importe lequel des pipelines de la suite AWS Event Fork Pipelines sur le AWS SAR indépendamment, selon les exigences de votre architecture.

![\[L'architecture AWS Event Fork Pipelines, qui montre comment les événements d'un sujet Amazon SNS sont filtrés et traités via trois pipelines distincts : Event Storage and Backup, Event Search and Analytics, et Event Replay. Ces pipelines sont représentés sous forme de boîtes empilées verticalement, chacune traitant indépendamment les événements en parallèle à partir de la même rubrique Amazon SNS.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-fork-pipeline-as-subscriber-how-it-works.png)


Chaque pipeline est abonné à la même rubrique Amazon SNS, ce qui lui permet de traiter les événements en parallèle au fur et à mesure de leur publication dans la rubrique. Chaque pipeline est indépendant et peut définir sa propre [politique de filtre d'abonnement](sns-subscription-filter-policies.md). Cela permet à un pipeline de traiter uniquement un sous-ensemble des événements qui l'intéressent (plutôt que tous les événements publiés dans la rubrique).

**Note**  
Comme vous placez les trois pipelines AWS Event Fork à côté de vos pipelines de traitement d'événements habituels (peut-être déjà abonnés à votre rubrique Amazon SNS), vous n'avez pas besoin de modifier une partie de votre éditeur de messages actuel pour tirer parti des pipelines AWS Event Fork dans vos charges de travail existantes.

### Pipeline de stockage et de sauvegarde d'événements
<a name="sns-fork-event-storage-and-backup-pipeline"></a>

Le diagramme suivant montre le [Pipeline de stockage et de sauvegarde d'événements](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-event-storage-backup-pipeline). Vous pouvez abonner ce pipeline à votre rubrique Amazon SNS pour sauvegarder automatiquement les événements transitant par votre système.

Ce pipeline est composé d'une file d'attente Amazon SQS qui met en mémoire tampon les événements transmis par la rubrique Amazon SNS, d'une AWS Lambda fonction qui interroge automatiquement ces événements dans la file d'attente et les transmet dans un flux, et d'un compartiment Amazon S3 qui sauvegarde de manière durable les événements chargés par le flux. 

![\[Le Fork-Event-Storage-Backup -Pipeline, conçu pour traiter et sauvegarder les événements d'une rubrique Amazon SNS. Le flux commence par une rubrique Amazon SNS à partir de laquelle les événements sont transférés vers une file d'attente Amazon SQS. Ces événements filtrés sont ensuite traités par une fonction Lambda, qui les transmet à un Data Firehose. Le flux Firehose est chargé de mettre en mémoire tampon, de transformer et de compresser les événements avant de les charger dans un compartiment de sauvegarde Amazon S3. Enfin, Amazon Athena peut être utilisé pour interroger les données stockées. Le diagramme utilise une série d'icônes et de flèches pour illustrer le flux d'un service à l'autre, en étiquetant clairement chaque composant du pipeline.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-fork-event-storage-and-backup-pipeline.png)


Pour affiner le comportement de votre flux Firehose, vous pouvez le configurer de façon à ce qu'il mette en tampon, transforme et compresse vos événements avant de les charger dans le compartiment. Pendant le chargement des événements , vous pouvez utiliser Amazon Athena pour interroger le compartiment à l'aide de requêtes SQL standard. Vous pouvez également configurer le pipeline de façon à réutiliser un compartiment Amazon S3 existant ou à en créer un nouveau.

### Le pipeline de recherche et d'analyse d'événements
<a name="sns-fork-event-search-and-analytics-pipeline"></a>

Le diagramme suivant montre le [Pipeline de recherche et d'analyse d'événements](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-event-search-analytics-pipeline). Vous pouvez abonner ce pipeline à votre rubrique Amazon SNS pour indexer les événements qui transitent via votre système dans un domaine de recherche, puis exécuter des analyses sur eux.

Ce pipeline est composé d'une file d'attente Amazon SQS qui met en mémoire tampon les événements transmis par la rubrique Amazon SNS, d'une AWS Lambda fonction qui extrait les événements de la file d'attente et les envoie dans un flux, d'un domaine Amazon OpenSearch Service qui indexe les événements chargés par le flux Firehose et d'un compartiment Amazon S3 qui stocke les événements en lettre morte qui ne peuvent pas être indexés dans le domaine de recherche.

![\[Le pipeline de recherche et d'analyse d'événements au sein d'une AWS architecture. Cela commence sur la gauche avec la rubrique Amazon SNS recevant tous les événements. Ces événements sont ensuite acheminés par une ligne pointillée représentant les « événements filtrés par répartition » vers une file d'attente Amazon SQS. À partir de la file d'attente, les événements sont traités par une fonction Lambda qui les transmet ensuite à un flux Data Firehose. Le Data Firehose dirige les événements vers deux destinations : une route mène à un Amazon Elasticsearch Service à des fins d'indexation, et l'autre envoie des événements impossibles à traiter ou « lettre morte » vers un compartiment de lettres mortes Amazon S3. À l'extrême droite, les résultats du service Elasticsearch sont intégrés à un tableau de bord Kibana à des fins d'analyse et de visualisation. L'ensemble du flux est disposé horizontalement et chaque composant est relié par des lignes indiquant le sens du flux de données.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-fork-event-search-and-analytics-pipeline.png)


Pour affiner votre flux Firehose en termes de mise en mémoire tampon, de transformation et de compression des événements, vous pouvez configurer ce pipeline.

Vous pouvez également configurer si le pipeline doit réutiliser un OpenSearch domaine existant dans votre domaine Compte AWS ou en créer un nouveau pour vous. Lorsque les événements sont indexées dans le domaine de recherche, vous pouvez utiliser Kibana pour exécuter des analyses sur vos événements et mettre à jour les tableaux de bord visuels en temps réel. 

### Le pipeline de relecture d'événements
<a name="sns-fork-event-replay-pipeline"></a>

Le diagramme suivant montre le [Pipeline de relecture d'événements](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-event-replay-pipeline). Pour enregistrer les événements qui ont été traités par votre système au cours des 14 derniers jours (par exemple, lorsque votre plateforme a besoin de récupérer après un incident), vous pouvez abonner ce pipeline à votre rubrique Amazon SNS, puis retraiter les événements.

Ce pipeline est composé d'une file d'attente Amazon SQS qui met en mémoire tampon les événements transmis par la rubrique Amazon SNS, et d'une AWS Lambda fonction qui interroge les événements de la file d'attente et les réachemine vers votre pipeline de traitement des événements normal, qui est également abonné à votre sujet.

![\[Le pipeline de rediffusion d'événements sous forme d'organigramme. De gauche à droite, il commence par une rubrique Amazon SNS qui distribue les événements filtrés à deux processus parallèles. Le flux supérieur représente votre pipeline de traitement des événements habituel, qui inclut une file d'attente Amazon SQS qui traite les événements. Le flux inférieur, étiqueté « »fork-event-replay-pipeline, inclut une file d'attente de rediffusion Amazon SQS dans laquelle les événements sont temporairement stockés avant d'être traités par une fonction de rediffusion Lambda. Cette fonction Lambda a la capacité de réintégrer les événements dans votre pipeline de traitement d'événements habituel ou de les maintenir en attente de rediffusion, selon que la fonction de rediffusion est activée ou désactivée. Le diagramme indique également que les opérateurs ont le contrôle de l'activation ou de la désactivation de la fonctionnalité de rediffusion d'événements.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-fork-event-replay-pipeline.png)


**Note**  
Par défaut, la fonction de relecture est désactivée et ne relance pas vos événements. Si vous avez besoin de retraiter les événements, vous devez activer la file d'attente de relecture Amazon SQS en tant que source d'événement pour la fonction de relecture AWS Lambda .

## Déploiement de pipelines AWS Event Fork
<a name="deploying-sns-fork-pipelines"></a>

La [suite AWS Event Fork Pipelines](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) (choisissez **Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés**) est disponible sous la forme d'un groupe d'applications publiques dans le AWS Serverless Application Repository, à partir duquel vous pouvez les déployer et les tester manuellement à l'aide de la [AWS Lambda console](https://console.aws.amazon.com/lambda/). Pour plus d'informations sur le déploiement de pipelines à l'aide de la AWS Lambda console, consultez[Abonnement d' AWS Event Fork Pipelines à une rubrique Amazon SNS](sns-subscribe-event-fork-pipelines.md).

Dans un scénario de production, nous recommandons d'intégrer AWS Event Fork Pipelines dans le modèle AWS SAM global de votre application. La fonctionnalité d'application imbriquée vous permet de le faire en ajoutant la ressource `[AWS::Serverless::Application](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template.html#serverless-sam-template-application)` à votre modèle AWS SAM, en référençant le AWS SAR `ApplicationId` et le `SemanticVersion` de l'application imbriquée.

Par exemple, vous pouvez utiliser Event Storage and Backup Pipeline comme application imbriquée en ajoutant l'extrait YAML suivant à la `Resources` section de votre modèle SAM. AWS 

```
Backup:   
    Type: AWS::Serverless::Application
  Properties:
    Location:
      ApplicationId: arn:aws:serverlessrepo:us-east-2:123456789012:applications/fork-event-storage-backup-pipeline
      SemanticVersion: 1.0.0
    Parameters: 
      #The ARN of the Amazon SNS topic whose messages should be backed up to the Amazon S3 bucket.
      TopicArn: !Ref MySNSTopic
```

Lorsque vous spécifiez des valeurs de paramètres, vous pouvez utiliser des fonctions AWS CloudFormation intrinsèques pour référencer d'autres ressources dans votre modèle. Par exemple, dans l'extrait YAML ci-dessus, le `TopicArn` paramètre fait référence à la `[AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html)` ressource`MySNSTopic`, définie ailleurs dans le modèle. AWS SAM Pour plus d'informations, consultez la section de [Référence des fonctions intrinsèques](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html) dans le *AWS CloudFormation Guide de l'utilisateur*.

**Note**  
La page de AWS Lambda console de votre application AWS SAR inclut le bouton **Copier en tant que ressource SAM**, qui copie le code YAML requis pour imbriquer une application AWS SAR dans le presse-papiers.

# Déploiement et test de l'exemple d'application Amazon SNS Event Fork Pipelines
<a name="sns-deploy-test-fork-pipelines-sample-application"></a>

Pour accélérer le développement de vos applications basées sur les événements, vous pouvez abonner des pipelines de gestion d'événements, alimentés par Event Fork AWS Pipelines, à des rubriques Amazon SNS. AWS Event Fork Pipelines est une suite d'[applications imbriquées](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html) open source, basée sur le [modèle d'application AWS sans serveur](https://aws.amazon.com/serverless/sam/) (AWS SAM), que vous pouvez déployer directement depuis la [suite AWS Event Fork Pipelines](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) (choisissez **Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés**) sur votre compte. AWS Pour de plus amples informations, veuillez consulter [Comment fonctionne AWS Event Fork Pipelines](sns-fork-pipeline-as-subscriber.md#how-sns-fork-works).

Cette page explique comment vous pouvez utiliser le AWS Management Console pour déployer et tester l'exemple d'application AWS Event Fork Pipelines.

**Important**  
Pour éviter d'encourir des coûts indésirables une fois le déploiement de l'exemple d'application AWS Event Fork Pipelines terminé, supprimez sa CloudFormation pile. Pour plus d'informations, consultez [Suppression d'une pile dans la console CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html) dans le *Guide de l'utilisateur AWS CloudFormation *.

# AWS Exemple de cas d'utilisation d'Event Fork Pipelines
<a name="example-sns-fork-use-case"></a>

Le scénario suivant décrit une application de commerce électronique sans serveur pilotée par des événements qui utilise AWS Event Fork Pipelines. Vous pouvez utiliser cet [exemple d'application de commerce électronique](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~fork-example-ecommerce-checkout-api) dans le, AWS Serverless Application Repository puis le déployer dans votre Compte AWS AWS Lambda console, où vous pouvez le tester et examiner son code source GitHub.

![\[Architecture d'une application de commerce électronique sans serveur qui intègre Services AWS. Il décrit le flux entre les utilisateurs du commerce électronique qui passent des commandes via une API Gateway et les différents pipelines de traitement, notamment le stockage des commandes, l'analyse des recherches et la rediffusion, et montre comment les événements sont gérés et analysés via Amazon SNS, Lambda, Amazon SQS, DynamoDB et Kibana.\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/images/sns-fork-example-use-case.png)


Cette application de commerce électronique prend les commandes des acheteurs via une RESTful API hébergée par API Gateway et soutenue par la AWS Lambda fonction`CheckoutApiBackendFunction`. Cette fonction publie toutes les commandes reçues dans une rubrique Amazon SNS nommée `CheckoutEventsTopic`, qui transmet à son tour toutes les commandes à quatre différents pipelines.

Le premier pipeline est le pipeline de traitement standard des paiements conçu et mis en œuvre par le propriétaire de l'application d'e-commerce. Ce pipeline comprend la file d'attente Amazon SQS `CheckoutQueue` qui met en mémoire tampon toutes les commandes reçues, une AWS Lambda fonction nommée `CheckoutFunction` qui interroge la file d'attente pour traiter ces commandes, et la table `CheckoutTable` DynamoDB qui enregistre de manière sécurisée toutes les commandes passées.

## Appliquer les pipelines AWS Event Fork
<a name="applying-sns-fork-pipelines"></a>

Les composants de l'application d'e-commerce gèrent la logique d'entreprise de base. Toutefois, le propriétaire de l'application d'e-commerce propriétaire doit également prendre en compte les éléments suivants :
+ **Conformité - **Sauvegardes sécurisées et compressées, chiffrées au repos et nettoyage des informations sensibles
+ **Résilience - **Relecture de la plupart des commandes récentes en cas de défaillance du processus de réalisation
+ **Capacité de recherche - **Exécution d'analyses et génération des métriques sur les commandes passées

Au lieu d'implémenter cette logique de traitement des événements, le propriétaire de l'application peut abonner AWS Event Fork Pipelines à la `CheckoutEventsTopic` rubrique Amazon SNS
+ [Pipeline de stockage et de sauvegarde d'événements](sns-fork-pipeline-as-subscriber.md#sns-fork-event-storage-and-backup-pipeline) est configuré pour transformer les données afin de supprimer les détails des cartes de paiement, de mettre les données dans la mémoire tampon pendant 60 secondes, de les compresser à l'aide de GZIP et de les chiffrer à l'aide de la clé gérée par le client par défaut pour Amazon S3. Cette clé est gérée AWS et alimentée par le AWS Key Management Service (AWS KMS).

  Pour plus d'informations, consultez [Choisir Amazon S3 pour votre destination](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-s3), [Amazon Data Firehose Data Transformation](https://docs.aws.amazon.com/firehose/latest/dev/data-transformation.html) et [Configurer les paramètres](https://docs.aws.amazon.com/firehose/latest/dev/create-configure.html) dans le manuel *Amazon Data Firehose* Developer Guide.
+ [Le pipeline de recherche et d'analyse d'événements](sns-fork-pipeline-as-subscriber.md#sns-fork-event-search-and-analytics-pipeline) est configuré avec un index de durée de nouvelle tentative de 30 secondes, un compartiment de stockage de commandes qui ne parviennent pas à être indexées dans le domaine de recherche et une politique de filtre permettant de limiter l'ensemble de commandes indexées.

  Pour plus d'informations, consultez [Choisir le OpenSearch service pour votre destination](https://docs.aws.amazon.com/firehose/latest/dev/create-destination.html#create-destination-elasticsearch) dans le manuel *Amazon Data Firehose Developer Guide*.
+ [Le pipeline de relecture d'événements](sns-fork-pipeline-as-subscriber.md#sns-fork-event-replay-pipeline) est configuré avec la partie de la file d'attente Amazon SQS du pipeline de traitement des commandes standard conçu et mis en œuvre par le propriétaire de l'application d'e-commerce.

  Pour de plus amples informations, consultez le [Nom et l'URL d'une file d'attente](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-general-identifiers.html#queue-name-url) dans *Guide du développeur Amazon SQS*.

La politique de filtre JSON suivante est définie dans la configuration du pipeline de recherche et d'analyse d'événements. Elle sélectionne uniquement les commandes entrantes dans lesquelles le montant total s'élève à 100 USD ou plus. Pour de plus amples informations, veuillez consulter [Filtrage des messages Amazon SNS](sns-message-filtering.md).

```
{				
   "amount": [{ "numeric": [ ">=", 100 ] }]
}
```

En utilisant le modèle AWS Event Fork Pipelines, le propriétaire de l'application de commerce électronique peut éviter les frais de développement qui accompagnent souvent le codage d'une logique indifférenciée pour la gestion des événements. Au lieu de cela, elle peut déployer AWS Event Fork Pipelines directement depuis elle Compte AWS. AWS Serverless Application Repository 

# Étape 1 : déploiement de l'exemple d'application Amazon SNS
<a name="deploy-sample-application"></a>

1. Connectez-vous à la [AWS Lambda console](https://console.aws.amazon.com/lambda/).

1. Dans le panneau de navigation, choisissez **Fonctions**, puis **Créer une fonction**.

1. Sur la page **Créer une fonction**, procédez de la façon suivante :

   1. Choisissez **Parcourir le référentiel d'applications sans serveur**, **Applications publiques**, **Afficher les applications qui créent des politiques de rôles ou de ressources IAM personnalisées**.

   1. Recherchez `fork-example-ecommerce-checkout-api` et choisissez l'application.

1. Sur la page **fork-example-ecommerce-checkout-api**, procédez comme suit :

   1. Dans la section **Paramètres de l'application**, entrez un **Nom d'application** (par exemple, `fork-example-ecommerce-my-app`).
**Note**  
Pour rechercher vos ressources facilement plus tard, conservez le préfixe `fork-example-ecommerce`.
Pour chaque déploiement, le nom de l'application doit être unique. Si vous réutilisez le nom d'une application, le déploiement ne mettra à jour que la CloudFormation pile précédemment déployée (plutôt que d'en créer une nouvelle).

   1. (Facultatif) Entrez l'un des **LogLevel**paramètres suivants pour l'exécution de la fonction Lambda de votre application :
      + `DEBUG`
      + `ERROR`
      + `INFO` (par défaut)
      + `WARNING`

1. Choisissez **I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications. (Je comprends que cette application crée des rôles IAM et des politiques de ressources personnalisés, et déploie des applications imbriquées.)** puis, en base de la page, choisissez **Deploy (Déployer)**.

Sur la *my-app* page **État du déploiement pour fork-example-ecommerce -**, Lambda affiche l'état **Votre application est en cours de déploiement**.

Dans la section **Ressources**, CloudFormation commence à créer la pile et affiche le statut **CREATE\$1IN\$1PROGRESS** pour chaque ressource. Lorsque le processus est terminé, CloudFormation affiche le statut **CREATE\$1COMPLETE**.

**Note**  
Le déploiement de toutes les ressources peut prendre 20-30 minutes.

Une fois le déploiement terminé, Lambda affiche l'état **Votre application a été déployée**.

# Étape 2 : Exécution de l'exemple d'application lié au SNS
<a name="execute-sample-application"></a>

1. Dans la AWS Lambda console, sur le panneau de navigation, sélectionnez **Applications**.

1. Sur la page **Applications**, dans le champ de recherche, recherchez `serverlessrepo-fork-example-ecommerce-my-app`, puis choisissez l'application.

1. Dans la section **Ressources**, effectuez les opérations suivantes :

   1. Pour trouver la ressource dont le type est **ApiGatewayRestApi**, triez les ressources par **type**, par exemple`ServerlessRestApi`, puis développez la ressource.

   1. Deux ressources imbriquées sont affichées, de types **ApiGatewayDeployment** et **ApiGatewayStage**.

   1. Copiez le lien **Point de terminaison de l'API de production** et ajoutez-lui `/checkout`, par exemple : 

      ```
      https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
      ```

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

   ```
   {
      "id": 15311,
      "date": "2019-03-25T23:41:11-08:00",
      "status": "confirmed",
      "customer": {
         "id": 65144,		
   	 "quantity": 2,
         "price": 25.00,
         "subtotal": 50.00
      }]
   }
   ```

1. Pour envoyer une demande HTTPS au point de terminaison de votre API, transmettez la charge utile de l'exemple d'événement comme entrée en exécutant une commande `curl`, par exemple :

   ```
   curl -d "$(cat test_event.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   L'API renvoie la réponse vide suivante, indiquant une exécution réussie :

   ```
   { }
   ```

# Étape 3 : vérification des performances de l'application et du pipeline Amazon SNS
<a name="verify-sample-application-pipelines"></a>

## Étape 1 : Vérification de l'exécution de l'exemple de pipeline de paiement
<a name="verify-execution-checkout-pipeline"></a>

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

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

1. Recherchez `serverlessrepo-fork-example` et choisissez `CheckoutTable`.

1. Dans la page des détails de la table, choisissez **Éléments**, puis choisissez l'élément créé.

   Les attributs stockés sont affichés.

## Étape 2 : Vérification de l'exécution du pipeline de stockage et de sauvegarde des événements
<a name="verify-execution-event-storage-backup-pipeline"></a>

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

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

1. Recherchez `serverlessrepo-fork-example` et choisissez `CheckoutBucket`.

1. Parcourez la hiérarchie de répertoires jusqu'à ce que vous trouviez un fichier avec l'extension `.gz`.

1. Pour télécharger le fichier, choisissez **Actions**, **Ouvrir**.

1. Le pipeline est configuré avec une fonction Lambda qui nettoie les informations de carte de paiement pour des raisons de conformité.

   Pour vérifier que la charge utile JSON stockée ne contient pas d'informations sur les cartes de paiement, décompressez le fichier.

## Étape 3 : Vérification de l'exécution du pipeline de recherche et d'analyse d'événements
<a name="verify-execution-event-search-analytics-pipeline"></a>

1. Connectez-vous à la [console OpenSearch de service](https://console.aws.amazon.com/aos/).

1. Dans le panneau de navigation, sous **Mes domaines**, choisissez le domaine préfixé avec `serverl-analyt`.

1. Le pipeline est configuré avec une politique de filtre d'abonnement Amazon SNS qui définit une condition de correspondance numérique.

   ****Pour vérifier que l'événement est indexé car il fait référence à une commande dont la valeur est supérieure à 100 USD, sur la *abcdefgh1ijk* page **serverl-analyt-**, choisissez Indices, checkout\$1events.****

## Étape 4 : Vérification de l'exécution du pipeline de rediffusion d'événements
<a name="verify-execution-event-replay-pipeline"></a>

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

1. Dans la liste des files d'attente, recherchez `serverlessrepo-fork-example` et choisissez `ReplayQueue`.

1. Choisissez **Envoyer et recevoir des messages**.

1. Dans la boîte de *123ABCD4E5F6* dialogue **Envoyer et recevoir des messages dans fork-example-ecommerce -*my-app*... ReplayP- ReplayQueue -**, choisissez **Sondage pour les** messages. 

1. Pour vérifier que l'événement est mis en file d'attente, choisissez **Plus de détails** en regard du message qui s'affiche dans la file d'attente.

# Étape 4 : Simulation d'un problème et rediffusion des événements pour le rétablissement
<a name="simulate-issue-replay-events-for-recovery"></a>

## Étape 1 : activer le problème simulé et envoyer une deuxième demande d'API
<a name="enable-simulated-issue-send-second-api-request"></a>

1. Connectez-vous à la [AWS Lambda console](https://console.aws.amazon.com/lambda/).

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

1. Recherchez `serverlessrepo-fork-example` et choisissez `CheckoutFunction`.

1. Sur le **fork-example-ecommerce*my-app*- CheckoutFunction -*ABCDEF*...** **page, dans la section **Variables d'environnement**, définissez la variable **BUG\$1ENABLED** sur **true**, puis choisissez Enregistrer.**

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

   ```
   {
   	   "id": 9917,
   	   "date": "2019-03-26T21:11:10-08:00",
   	   "status": "confirmed",
   	   "customer": {
   	      "id": 56999,
   "quantity": 1,
   	      "price": 75.00,
   	      "subtotal": 75.00
   	   }]
   	}
   ```

1. Pour envoyer une demande HTTPS au point de terminaison de votre API, transmettez la charge utile de l'exemple d'événement comme entrée en exécutant une commande `curl`, par exemple :

   ```
   curl -d "$(cat test_event_2.json)" https://abcdefghij.execute-api.us-east-2.amazonaws.com/Prod/checkout
   ```

   L'API renvoie la réponse vide suivante, indiquant une exécution réussie :

   ```
   { }
   ```

## Étape 2 : vérifier la corruption de données simulée
<a name="verify-simulated-data-corruption"></a>

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

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

1. Recherchez `serverlessrepo-fork-example` et choisissez `CheckoutTable`.

1. Dans la page des détails de la table, choisissez **Éléments**, puis choisissez l'élément créé.

   Les attributs stockés sont affichés, certains étant marqués comme **CORROMPU \$1**

## Étape 3 : désactiver le problème simulé
<a name="disable-simulated-issue"></a>

1. Connectez-vous à la [AWS Lambda console](https://console.aws.amazon.com/lambda/).

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

1. Recherchez `serverlessrepo-fork-example` et choisissez `CheckoutFunction`.

1. Sur le **fork-example-ecommerce*my-app*- CheckoutFunction -*ABCDEF*...** **page, dans la section **Variables d'environnement**, définissez la variable **BUG\$1ENABLED** sur **false**, puis choisissez Enregistrer.**

## Étape 4 : activer la rediffusion pour résoudre le problème
<a name="enable-replay-recover-from-simulated-issue"></a>

1. Dans la AWS Lambda console, sur le panneau de navigation, choisissez **Functions**.

1. Recherchez `serverlessrepo-fork-example` et choisissez `ReplayFunction`.

1. Développez la section **Concepteur**, choisissez la vignette **SQS** puis, dans la section **SQS**, choisissez **Activé**.
**Note**  
Il faut compter environ 1 minute pour que le déclencheur source d'événements Amazon SQS soit activé.

1. Choisissez **Enregistrer**.

1. Pour afficher les attributs récupérées, revenez à la console Amazon DynamoDB.

1. Pour désactiver le replay, retournez sur la AWS Lambda console et désactivez le déclencheur de la source d'événements Amazon SQS pour. `ReplayFunction`

# Abonnement d' AWS Event Fork Pipelines à une rubrique Amazon SNS
<a name="sns-subscribe-event-fork-pipelines"></a>

Pour accélérer le développement de vos applications basées sur les événements, vous pouvez abonner des pipelines de gestion d'événements, alimentés par Event Fork AWS Pipelines, à des rubriques Amazon SNS. AWS Event Fork Pipelines est une suite d'[applications imbriquées](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-nested-applications.html) open source, basée sur le [modèle d'application AWS sans serveur](https://aws.amazon.com/serverless/sam/) (AWS SAM), que vous pouvez déployer directement depuis la [suite AWS Event Fork Pipelines](https://serverlessrepo.aws.amazon.com/applications?query=aws-event-fork-pipelines) (choisissez **Afficher les applications qui créent des rôles IAM ou des politiques de ressources personnalisés**) sur votre compte. AWS Pour de plus amples informations, veuillez consulter [Comment fonctionne AWS Event Fork Pipelines](sns-fork-pipeline-as-subscriber.md#how-sns-fork-works).

Cette section explique comment vous pouvez utiliser le AWS Management Console pour déployer un pipeline, puis abonner AWS Event Fork Pipelines à une rubrique Amazon SNS. Avant de commencer, [créez une rubrique Amazon SNS](sns-create-topic.md).

Pour supprimer les ressources qui constituent un pipeline, recherchez le pipeline sur la page **Applications** de la AWS Lambda console, développez la **section du modèle SAM**, choisissez **CloudFormationStack**, puis choisissez **Other Actions**, **Delete Stack**.

# Déploiement et abonnement du pipeline de stockage et de sauvegarde des événements sur Amazon SNS
<a name="deploy-event-storage-backup-pipeline"></a>


|  | 
| --- |
| Pour l'archivage et l'analyse des événements, Amazon SNS recommande désormais d'utiliser son intégration native avec Amazon Data Firehose. Vous pouvez abonner les flux de diffusion Firehose aux rubriques SNS, ce qui vous permet d'envoyer des notifications aux points de terminaison d'archivage et d'analyse tels que les buckets Amazon Simple Storage Service (Amazon S3), les tables Amazon Redshift, Amazon Service (Service), etc. OpenSearch OpenSearch L'utilisation d'Amazon SNS avec les flux de diffusion Firehose est une solution entièrement gérée et sans code qui ne nécessite pas l'utilisation de fonctions. AWS Lambda Pour de plus amples informations, veuillez consulter [Streams de diffusion de Fanout to Firehose](sns-firehose-as-subscriber.md). | 

Ce didacticiel montre comment déployer le [Pipeline de stockage et de sauvegarde d'événements](sns-fork-pipeline-as-subscriber.md#sns-fork-event-storage-and-backup-pipeline) et l'abonner à une rubrique Amazon SNS. Ce processus transforme automatiquement le AWS SAM modèle associé au pipeline en une CloudFormation pile, puis déploie la pile dans votre Compte AWS. De plus, ce processus crée et configure l'ensemble de ressources qui comprennent le pipeline de stockage et de sauvegarde des événements, y compris ce qui suit :
+ File d’attente Amazon SQS
+ Fonction Lambda
+ Flux de diffusion Firehose
+ Compartiment de sauvegarde Amazon S3

Pour plus d'informations sur la configuration d'un flux avec un compartiment Amazon S3 comme destination, consultez le `[S3DestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_S3DestinationConfiguration.html)` manuel *Amazon Data Firehose API* Reference.

Pour plus d'informations sur la transformation des événements et sur la configuration de la mise en mémoire tampon des événements, de la compression des événements et du chiffrement des événements, consultez la section [Création d'un flux de diffusion](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) dans le manuel *Amazon Data Firehose Developer* Guide.

Pour plus d'informations sur le filtrage des événements, consultez la section [Stratégies de filtre d'abonnement Amazon SNS](sns-subscription-filter-policies.md) dans le présent guide.

1. Connectez-vous à la [AWS Lambda console](https://console.aws.amazon.com/lambda/).

1. Dans le panneau de navigation, choisissez **Fonctions**, puis **Créer une fonction**.

1. Sur la page **Créer une fonction**, procédez de la façon suivante :

   1. Choisissez **Parcourir le référentiel d'applications sans serveur**, **Applications publiques**, **Afficher les applications qui créent des politiques de rôles ou de ressources IAM personnalisées**.

   1. Recherchez `fork-event-storage-backup-pipeline` et choisissez l'application.

1. Sur la page **fork-event-storage-backup-pipeline**, procédez comme suit :

   1. Dans la section **Paramètres de l'application**, entrez un **Nom d'application** (par exemple, `my-app-backup`).
**Note**  
Pour chaque déploiement, le nom de l'application doit être unique. Si vous réutilisez le nom d'une application, le déploiement mettra à jour uniquement la CloudFormation pile précédemment déployée (plutôt que d'en créer une nouvelle).

   1. (Facultatif) Pour **BucketArn**, entrez l'ARN du compartiment Amazon S3 dans lequel les événements entrants sont chargés. Si vous ne saisissez aucune valeur, un nouveau compartiment Amazon S3 est créé dans votre AWS compte.

   1. (Facultatif) Pour **DataTransformationFunctionArn**, entrez l'ARN de la fonction Lambda par laquelle les événements entrants sont transformés. Si vous ne spécifiez pas de valeur, la transformation des données est désactivée.

   1. (Facultatif) Entrez l'un des **LogLevel**paramètres suivants pour l'exécution de la fonction Lambda de votre application :
      + `DEBUG`
      + `ERROR`
      + `INFO` (par défaut)
      + `WARNING`

   1. Pour **TopicArn**, entrez l'ARN de la rubrique Amazon SNS à laquelle cette instance du pipeline de fork doit être abonnée.

   1. (Facultatif) Pour **StreamBufferingIntervalInSeconds**et **StreamBufferingSizeInMBs**, entrez les valeurs pour configurer la mise en mémoire tampon des événements entrants. Si vous n'entrez aucune valeur, 300 secondes et 5 Mo sont utilisés.

   1. (Facultatif) Entrez l'un des **StreamCompressionFormat**paramètres suivants pour compresser les événements entrants :
      + `GZIP`
      + `SNAPPY`
      + `UNCOMPRESSED` (par défaut)
      + `ZIP`

   1. (Facultatif) Pour **StreamPrefix**, entrez le préfixe de chaîne pour nommer les fichiers stockés dans le compartiment de sauvegarde Amazon S3. Si vous ne spécifiez pas de valeur, aucun préfixe n'est utilisé.

   1. (Facultatif) Pour **SubscriptionFilterPolicy**, entrez la politique de filtrage des abonnements Amazon SNS, au format JSON, à utiliser pour filtrer les événements entrants. La politique de filtrage détermine quels événements sont indexés dans l'index des OpenSearch services. Si vous ne spécifiez pas de valeur, aucun filtrage n'est utilisé (tous les événements sont indexés).

   1. (Facultatif) Pour **SubscriptionFilterPolicyScope**, entrez la chaîne `MessageBody` ou `MessageAttributes` pour activer le filtrage des messages basé sur la charge utile ou basé sur les attributs. 

   1. Choisissez **Je comprends que cette application crée des rôles IAM et des politiques de ressources personnalisés, et déploie des applications imbriquées.**, puis choisissez **Déployer**.

Sur la *my-app* page **État du déploiement pour**, Lambda affiche l'état **Votre application est en cours de déploiement**.

Dans la section **Ressources**, CloudFormation commence à créer la pile et affiche le statut **CREATE\$1IN\$1PROGRESS** pour chaque ressource. Lorsque le processus est terminé, CloudFormation affiche le statut **CREATE\$1COMPLETE**.

Une fois le déploiement terminé, Lambda affiche l'état **Votre application a été déployée**.

Les messages publiés sur votre rubrique Amazon SNS sont stockés dans le compartiment de sauvegarde Amazon S3 approvisionné automatiquement par le pipeline Event Storage and Backup.

# Déploiement et abonnement du pipeline d'analyse et de recherche d'événements sur Amazon SNS
<a name="deploy-event-search-analytics-pipeline"></a>


|  | 
| --- |
| Pour l'archivage et l'analyse des événements, Amazon SNS recommande désormais d'utiliser son intégration native avec Amazon Data Firehose. Vous pouvez abonner les flux de diffusion Firehose aux rubriques SNS, ce qui vous permet d'envoyer des notifications aux points de terminaison d'archivage et d'analyse tels que les buckets Amazon Simple Storage Service (Amazon S3), les tables Amazon Redshift, Amazon Service (Service), etc. OpenSearch OpenSearch L'utilisation d'Amazon SNS avec les flux de diffusion Firehose est une solution entièrement gérée et sans code qui ne nécessite pas l'utilisation de fonctions. AWS Lambda Pour de plus amples informations, veuillez consulter [Streams de diffusion de Fanout to Firehose](sns-firehose-as-subscriber.md). | 

Cette page montre comment déployer le [Pipeline de recherche et d'analyse des événements](sns-fork-pipeline-as-subscriber.md#sns-fork-event-search-and-analytics-pipeline) et vous abonner à une rubrique Amazon SNS. Ce processus transforme automatiquement le AWS SAM modèle associé au pipeline en une CloudFormation pile, puis déploie la pile dans votre Compte AWS. De plus, ce processus crée et configure l'ensemble de ressources qui comprennent le pipeline de recherche et d'analyse des événements, y compris ce qui suit :
+ File d’attente Amazon SQS
+ Fonction Lambda
+ Flux de diffusion Firehose
+ Domaine Amazon OpenSearch Service
+ Compartiment de lettres mortes Amazon S3

Pour plus d'informations sur la configuration d'un flux avec un index comme destination, consultez le `[ElasticsearchDestinationConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ElasticsearchDestinationConfiguration.html)` manuel *Amazon Data Firehose API* Reference.

Pour plus d'informations sur la transformation des événements et sur la configuration de la mise en mémoire tampon des événements, de la compression des événements et du chiffrement des événements, consultez la section [Création d'un flux de diffusion](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) dans le manuel *Amazon Data Firehose Developer* Guide.

Pour plus d'informations sur le filtrage des événements, consultez la section [Stratégies de filtre d'abonnement Amazon SNS](sns-subscription-filter-policies.md) dans le présent guide.

1. Connectez-vous à la [AWS Lambda console](https://console.aws.amazon.com/lambda/).

1. Dans le panneau de navigation, choisissez **Fonctions**, puis **Créer une fonction**.

1. Sur la page **Créer une fonction**, procédez de la façon suivante :

   1. Choisissez **Parcourir le référentiel d'applications sans serveur**, **Applications publiques**, **Afficher les applications qui créent des politiques de rôles ou de ressources IAM personnalisées**.

   1. Recherchez `fork-event-search-analytics-pipeline` et choisissez l'application.

1. Sur la page **fork-event-search-analytics-pipeline**, procédez comme suit :

   1. Dans la section **Paramètres de l'application**, entrez un **Nom d'application** (par exemple, `my-app-search`).
**Note**  
Pour chaque déploiement, le nom de l'application doit être unique. Si vous réutilisez le nom d'une application, le déploiement mettra à jour uniquement la CloudFormation pile précédemment déployée (plutôt que d'en créer une nouvelle).

   1. (Facultatif) Pour **DataTransformationFunctionArn**, entrez l'ARN de la fonction Lambda utilisée pour transformer les événements entrants. Si vous ne spécifiez pas de valeur, la transformation des données est désactivée.

   1. (Facultatif) Entrez l'un des **LogLevel**paramètres suivants pour l'exécution de la fonction Lambda de votre application :
      + `DEBUG`
      + `ERROR`
      + `INFO` (par défaut)
      + `WARNING`

   1. (Facultatif) Pour **SearchDomainArn**, entrez l'ARN du domaine de OpenSearch service, un cluster qui configure les fonctionnalités de calcul et de stockage nécessaires. Si vous ne spécifiez pas de valeur, un nouveau domaine est créé avec la configuration par défaut.

   1. Pour **TopicArn**, entrez l'ARN de la rubrique Amazon SNS à laquelle cette instance du pipeline de fork doit être abonnée.

   1. Pour **SearchIndexName**, entrez le nom de l'index des OpenSearch services pour la recherche et l'analyse des événements.
**Note**  
Les quotas suivants s'appliquent aux noms d'index :  
Vous ne pouvez pas inclure de majuscules
Vous ne pouvez pas inclure les caractères suivants : `\ / * ? " < > | ` , #`
Vous ne pouvez pas commencer par les caractères suivants : `- + _`
Vous ne pouvez pas utiliser : `. ..`
Vous ne pouvez pas utiliser plus de 80 caractères
Vous ne pouvez pas utiliser plus de 255 octets
Ne peut pas contenir de deux-points (depuis OpenSearch Service 7.0)

   1. (Facultatif) Entrez l'un des **SearchIndexRotationPeriod**paramètres suivants pour la période de rotation de l'indice de OpenSearch service :
      + `NoRotation` (par défaut)
      + `OneDay`
      + `OneHour`
      + `OneMonth`
      + `OneWeek`

      La rotation d'index ajoute un horodatage au nom de l'index, ce qui facilite l'expiration des anciennes données. 

   1. Pour **SearchTypeName**, entrez le nom du type de OpenSearch service pour organiser les événements dans un index.
**Note**  
OpenSearch Les noms des types de service peuvent contenir n'importe quel caractère (sauf les octets nuls), mais ils ne peuvent pas commencer par`_`.
Pour le OpenSearch Service 6.x, il ne peut y avoir qu'un seul type par index. Si vous spécifiez un nouveau type pour un index existant qui possède déjà un autre type, Firehose renvoie une erreur d'exécution.

   1. (Facultatif) Pour **StreamBufferingIntervalInSeconds**et **StreamBufferingSizeInMBs**, entrez les valeurs pour configurer la mise en mémoire tampon des événements entrants. Si vous n'entrez aucune valeur, 300 secondes et 5 Mo sont utilisés.

   1. (Facultatif) Entrez l'un des **StreamCompressionFormat**paramètres suivants pour compresser les événements entrants :
      + `GZIP`
      + `SNAPPY`
      + `UNCOMPRESSED` (par défaut)
      + `ZIP`

   1. (Facultatif) Pour **StreamPrefix**, entrez le préfixe de chaîne pour nommer les fichiers stockés dans le compartiment de lettres mortes Amazon S3. Si vous ne spécifiez pas de valeur, aucun préfixe n'est utilisé.

   1. (Facultatif) Pour **StreamRetryDurationInSecons**, entrez la durée des nouvelles tentatives dans les cas où Firehose ne parvient pas à indexer les événements dans OpenSearch l'index des services. Si vous ne spécifiez pas de valeur, 300 secondes seront utilisées.

   1. (Facultatif) Pour **SubscriptionFilterPolicy**, entrez la politique de filtrage des abonnements Amazon SNS, au format JSON, à utiliser pour filtrer les événements entrants. La politique de filtrage détermine quels événements sont indexés dans l'index des OpenSearch services. Si vous ne spécifiez pas de valeur, aucun filtrage n'est utilisé (tous les événements sont indexés).

   1. Choisissez **Je comprends que cette application crée des rôles IAM et des politiques de ressources personnalisés, et déploie des applications imbriquées.**, puis choisissez **Déployer**.

Sur la *my-app-search* page **État du déploiement pour**, Lambda affiche l'état **Votre application est en cours de déploiement**.

Dans la section **Ressources**, CloudFormation commence à créer la pile et affiche le statut **CREATE\$1IN\$1PROGRESS** pour chaque ressource. Lorsque le processus est terminé, CloudFormation affiche le statut **CREATE\$1COMPLETE**.

Une fois le déploiement terminé, Lambda affiche l'état **Votre application a été déployée**.

Les messages publiés sur votre rubrique Amazon SNS sont indexés automatiquement dans l'index des OpenSearch services fourni par le pipeline Event Search and Analytics. Si le pipeline ne parvient pas à indexer un événement, il le stocke dans un compartiment contenant des lettres mortes Amazon S3.

# Déploiement du pipeline de rediffusion d'événements avec l'intégration d'Amazon SNS
<a name="deploy-event-replay-pipeline"></a>

Cette page montre comment déployer le [Pipeline de relecture des événements](sns-fork-pipeline-as-subscriber.md#sns-fork-event-replay-pipeline) et vous abonner à une rubrique Amazon SNS. Ce processus transforme automatiquement le AWS SAM modèle associé au pipeline en une CloudFormation pile, puis déploie la pile dans votre Compte AWS. De plus, ce processus crée et configure l'ensemble de ressources qui comprennent le pipeline de relecture d'événements, y compris une file d'attente Amazon SQS et une fonction Lambda.

Pour plus d'informations sur le filtrage des événements, consultez la section [Stratégies de filtre d'abonnement Amazon SNS](sns-subscription-filter-policies.md) dans le présent guide.

1. Connectez-vous à la [AWS Lambda console](https://console.aws.amazon.com/lambda/).

1. Dans le panneau de navigation, choisissez **Fonctions**, puis **Créer une fonction**.

1. Sur la page **Créer une fonction**, procédez de la façon suivante :

   1. Choisissez **Parcourir le référentiel d'applications sans serveur**, **Applications publiques**, **Afficher les applications qui créent des politiques de rôles ou de ressources IAM personnalisées**.

   1. Recherchez `fork-event-replay-pipeline` et choisissez l'application.

1. Sur la page **fork-event-replay-pipeline**, procédez de la façon suivante :

   1. Dans la section **Paramètres de l'application**, entrez un **Nom d'application** (par exemple, `my-app-replay`).
**Note**  
Pour chaque déploiement, le nom de l'application doit être unique. Si vous réutilisez le nom d'une application, le déploiement mettra à jour uniquement la CloudFormation pile précédemment déployée (plutôt que d'en créer une nouvelle).

   1. (Facultatif) Entrez l'un des **LogLevel**paramètres suivants pour l'exécution de la fonction Lambda de votre application :
      + `DEBUG`
      + `ERROR`
      + `INFO` (par défaut)
      + `WARNING`

   1. (Facultatif **ReplayQueueRetentionPeriodInSeconds**) Entrez la durée, en secondes, pendant laquelle la file de rediffusion Amazon SQS conserve le message. Si vous ne spécifiez pas de valeur, 1 209 600 secondes (14 jours) est utilisé.

   1. Pour **TopicArn**, entrez l'ARN de la rubrique Amazon SNS à laquelle cette instance du pipeline de fork doit être abonnée.

   1. Pour **DestinationQueueName**, entrez le nom de la file d'attente Amazon SQS à laquelle la fonction Lambda replay transmet les messages.

   1. (Facultatif) Pour **SubscriptionFilterPolicy**, entrez la politique de filtrage des abonnements Amazon SNS, au format JSON, à utiliser pour filtrer les événements entrants. La politique de filtre décide quels événements sont mis en mémoire tampon pour la relecture. Si vous ne spécifiez pas de valeur, aucun filtrage n'est utilisé (tous les événements sont mis en mémoire tampon pour la relecture).

   1. Choisissez **Je comprends que cette application crée des rôles IAM et des politiques de ressources personnalisés, et déploie des applications imbriquées.**, puis choisissez **Déployer**.

Sur la *my-app-replay* page **État du déploiement pour**, Lambda affiche l'état **Votre application est en cours de déploiement**.

Dans la section **Ressources**, CloudFormation commence à créer la pile et affiche le statut **CREATE\$1IN\$1PROGRESS** pour chaque ressource. Lorsque le processus est terminé, CloudFormation affiche le statut **CREATE\$1COMPLETE**.

Une fois le déploiement terminé, Lambda affiche l'état **Votre application a été déployée**.

Les messages publiés dans votre rubrique Amazon SNS sont mis en mémoire tampon dans la file d'attente Amazon SQS mise en service automatiquement par le pipeline de relecture d'événements.

**Note**  
Par défaut, la relecture est désactivée. Pour activer la relecture, accédez à la page de la fonction sur la console Lambda, développez la section **Concepteur**, choisissez la vignette **SQS** puis, dans la section **SQS**, choisissez **Activé**.

# Utilisation d'Amazon EventBridge Scheduler avec Amazon SNS
<a name="using-eventbridge-scheduler"></a>

[Amazon EventBridge Scheduler](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html) est un planificateur sans serveur qui vous permet de créer, d'exécuter et de gérer des tâches à partir d'un service géré centralisé. Avec EventBridge Scheduler, vous pouvez créer des plannings à l'aide de Cron et d'expressions de taux pour les modèles récurrents, ou configurer des appels ponctuels. Vous pouvez configurer des fenêtres de temps flexibles pour la livraison, définir des limites de nouvelles tentatives ainsi que la durée de conservation maximale pour les invocations d'API en échec.

Cette page explique comment utiliser le EventBridge planificateur pour publier un message à partir d'une rubrique Amazon SNS selon un calendrier.



## Configuration du rôle d'exécution
<a name="using-eventbridge-scheduler-execution-role"></a>

 Lorsque vous créez un nouveau calendrier, le EventBridge planificateur doit être autorisé à appeler son opération d'API cible en votre nom. Vous accordez ces autorisations au EventBridge planificateur à l'aide d'un rôle d'*exécution*. La politique d’autorisation que vous associez au rôle d’exécution de votre planification définit les autorisations requises. Ces autorisations dépendent de l'API cible que le EventBridge Scheduler doit appeler.

 Lorsque vous utilisez la console du EventBridge planificateur pour créer un calendrier, comme dans la procédure suivante, le EventBridge planificateur définit automatiquement un rôle d'exécution en fonction de la cible que vous avez sélectionnée. Si vous souhaitez créer un calendrier à l'aide de l'un des EventBridge planificateurs SDKs CloudFormation, vous devez disposer d'un rôle d'exécution existant qui accorde les autorisations dont le EventBridge planificateur a besoin pour appeler une cible. AWS CLI*Pour plus d'informations sur la configuration manuelle d'un rôle d'exécution pour votre calendrier, consultez la section [Configuration d'un rôle d'exécution dans le guide](https://docs.aws.amazon.com/scheduler/latest/UserGuide/setting-up.html#setting-up-execution-role) de l'utilisateur du EventBridge planificateur.* 

## Créer une planification
<a name="using-eventbridge-scheduler-create"></a>

**Pour créer une planification à l’aide de la console**

1. [Ouvrez la console Amazon EventBridge Scheduler à https://console.aws.amazon.com/scheduler/ la maison.](https://console.aws.amazon.com/scheduler/home/)

1.  Sur la page **Planifications**, choisissez **Créer une planification**. 

1.  Sur la page **Spécifier le détail de la planification**, dans la section **Nom et description de la planification**, procédez comme suit : 

   1. Pour **Nom de la planification**, saisissez un nom à attribuer à votre planification. Par exemple, **MyTestSchedule**. 

   1. (Facultatif) Dans le champ **Description**, saisissez une description de la planification. Par exemple, **My first schedule**.

   1. Pour **Groupe de planifications**, choisissez un groupe de planifications dans la liste déroulante. Si vous n’avez pas de groupe, choisissez par **défaut**. Pour créer un groupe de planifications, choisissez **Crée votre propre planification**. 

      Vous utilisez des groupes de planifications pour leur ajouter des balises. 

1. 

   1. Choisissez vos options de planification.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/using-eventbridge-scheduler.html)

1. (Facultatif) Si vous avez choisi **Planification récurrente** à l’étape précédente, dans la section **Délai**, procédez comme suit : 

   1. Dans le champ **Fuseau horaire**, choisissez un fuseau horaire. 

   1. Pour **Date et heure de début**, entrez une date valide au format `YYYY/MM/DD`, puis spécifiez un horodatage au format `hh:mm` de 24 heures. 

   1. Pour **Date et heure de fin**, entrez une date valide au format `YYYY/MM/DD`, puis spécifiez un horodatage au format `hh:mm` de 24 heures. 

1. Choisissez **Suivant**. 

1. Sur la page **Sélectionner une cible**, choisissez l'opération AWS d'API invoquée par le EventBridge planificateur : 

   1. Sélectionnez **Publication Amazon SNS**.

   1. Dans la section **Publier**, sélectionnez une rubrique SNS ou choisissez **Créer une rubrique SNS**.

   1. (Facultatif) Saisissez une charge utile JSON. Si vous n'entrez aucune charge utile, le EventBridge planificateur utilise un événement vide pour appeler la fonction.

1. Choisissez **Suivant**. 

1. Sur la page **Settings (Paramètres)**, procédez comme suit : 

   1. Pour activer la planification, sous **État de la planification**, activez **Activer la planification**. 

   1. Pour configurer une stratégie de nouvelles tentatives pour votre planification, sous **Politique de nouvelle tentative et file d’attente de lettres mortes (DLQ)**, procédez comme suit :
      + Activez **Réessayer**.
      + Pour **Âge maximal de l'événement**, entrez le nombre maximum d'**heures** et de **minutes pendant lequel** le EventBridge planificateur doit conserver un événement non traité.
      + La durée maximale est 24 heures.
      + Pour Nombre **maximum de tentatives**, entrez le nombre maximum de fois que le EventBridge planificateur réessaie le calendrier si la cible renvoie une erreur. 

         La valeur maximale est 185 nouvelles tentatives. 

      Avec les politiques de nouvelle tentative, si un calendrier ne parvient pas à invoquer sa cible, le EventBridge planificateur le réexécute. Si elle est configurée, vous devez définir la durée de rétention maximale et les nouvelles tentatives pour la planification.

   1. Choisissez l'endroit où EventBridge Scheduler stocke les événements non livrés.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sns/latest/dg/using-eventbridge-scheduler.html)

   1. Pour utiliser une clé gérée par le client afin de chiffrer votre entrée cible, sous **Chiffrement**, choisissez **Personnaliser les paramètres de chiffrement (avancé)**. 

      Si vous choisissez cette option, entrez un ARN de clé KMS existant ou choisissez **Créez un AWS KMS key**pour accéder à la console AWS KMS . Pour plus d'informations sur la manière dont EventBridge Scheduler chiffre vos données au repos, consultez la section [Chiffrement au repos dans le guide de l'utilisateur](https://docs.aws.amazon.com/scheduler/latest/UserGuide/encryption-rest.html) d'*Amazon EventBridge Scheduler*. 

   1. Pour que le EventBridge planificateur crée un nouveau rôle d'exécution pour vous, choisissez **Créer un nouveau rôle pour ce** calendrier. Ensuite, saisissez un nom pour **Nom du rôle**. Si vous choisissez cette option, le EventBridge planificateur associe au rôle les autorisations requises pour votre cible modélisée.

1. Choisissez **Suivant**. 

1.  Sur la page **Examiner et créer une planification**, examinez les détails de votre planification. Dans chaque section, choisissez **Modifier** pour revenir à cette étape et modifier ses détails. 

1. Choisissez **Créer une planification**. 

   Vous pouvez consulter la liste de vos planifications nouvelles et existantes sur la page **Planifications**. Sous la colonne **État**, vérifiez que votre nouvelle planification est **activée**. 

## Ressources connexes
<a name="using-eventbridge-scheduler-related-resources"></a>

 Pour plus d'informations sur le EventBridge planificateur, consultez les rubriques suivantes : 
+ [EventBridge Guide de l'utilisateur du planificateur](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html)
+ [EventBridge Référence de l'API Scheduler](https://docs.aws.amazon.com/scheduler/latest/APIReference/Welcome.html)
+ [EventBridge Tarification du planificateur](https://aws.amazon.com/eventbridge/pricing/#Scheduler)