Étape 1 : Vérification de la disponibilité de votre point de terminaison pour traiter des messages Amazon SNS - Amazon Simple Notification Service

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.

Étape 1 : Vérification de la disponibilité de votre point de terminaison pour traiter des messages Amazon SNS

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. 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" }
  2. Votre code doit analyser le document JSON dans le corps de la demande HTTP POST et content-type 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 \n en caractère de nouvelle ligne). Vous pouvez utiliser un analyseur JSON existant tel que Jackson JSON Processor 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.

  3. 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.

  4. 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'SubscribeURLURL (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. 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 d'accéder à SubscribeURL, vous pouvez confirmer l'abonnement à l'aide de l'action ConfirmSubscription avec le paramètre Token défini sur la valeur correspondante dans le message SubscriptionConfirmation. 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. 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" }
  5. 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 au bout de 15 secondes. Si votre point de terminaison ne répond pas dans le délai imparti ou renvoie un code d'état en dehors de la plage 200–4xx, Amazon SNS considère la diffusion du message comme une tentative infructueuse.

  6. 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 après 15 secondes. 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 ID des messages que vous avez traités avec les messages entrants, vous pouvez déterminer si le message est une tentative de relance.

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

  8. 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.