View a markdown version of this page

É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 que le point de terminaison peut gérer les requêtes HTTP POST qu'Amazon SNS utilise pour envoyer les messages de confirmation d'abonnement et de notification. Cela implique généralement la création et le déploiement d'une application Web qui traite les requêtes HTTP d'Amazon SNS. Par exemple, utilisez un servlet Java si l'hôte de votre terminal exécute Linux avec Apache et Tomcat. Lorsque vous abonnez un point de terminaison HTTP, Amazon SNS envoie une demande de confirmation d'abonnement. Votre terminal doit être prêt à recevoir et à traiter cette demande lorsque vous créez l'abonnement. 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é, Amazon SNS envoie des notifications au terminal lorsqu'une action de publication est effectuée sur le sujet.

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êtex-amz-sns-message-type. Ce champ vous indique le type de message qu'Amazon SNS vous a envoyé. En regardant l'en-tête, vous pouvez déterminer le type de message sans analyser le corps de la requête 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 HTTP/HTTPS en-têtes. 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 requête HTTP POST et du 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 \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 des champs d'objet et de message au format JSON valide, Amazon SNS doit convertir certains caractères de contrôle en représentations échappées pouvant être incluses dans le document JSON. Lorsque vous recevez le document JSON dans le corps de la requête POST, vous devez reconvertir les caractères échappés à leur valeur d'origine. Procédez ainsi si vous souhaitez obtenir une représentation exacte du sujet d'origine et des messages publiés sur le sujet. Ceci est essentiel si vous souhaitez vérifier la signature d'une notification. La signature utilise le message et le sujet dans leur forme originale dans le cadre de la chaîne à signer.

  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 Amazon SNS, votre terminal peut recréer la signature. Vous pouvez ensuite vérifier le contenu du message en faisant correspondre votre signature à celle envoyée par Amazon SNS. 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 HTTP/HTTPS format JSON de confirmation d'abonnement. 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 vous rendre sur leSubscribeURL, vous pouvez confirmer l'abonnement en utilisant l'ConfirmSubscriptionaction en Token réglant 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 HTTP/HTTPS en-têtes. 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 terminal répond au message HTTP POST d'Amazon SNS avec le code d'état approprié. La connexion expire au bout de 15 secondes environ. Si votre terminal ne répond pas à temps, Amazon SNS considère la livraison comme une tentative d'échec. Il en va de même si votre terminal renvoie un code d'état en dehors de la plage de 200 à 4 xx.

  6. Assurez-vous que votre code peut gérer les nouvelles tentatives d'envoi de messages depuis 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 livraison initiale échoue, Amazon SNS tente jusqu'à trois nouvelles tentatives, le délai entre les tentatives échouées étant fixé à 20 secondes.

    Note

    La demande de message expire au bout de 15 secondes environ. Ainsi, si l'échec de livraison est dû à un délai d'attente, Amazon SNS réessaie environ 35 secondes après la tentative précédente. Vous pouvez définir une politique de livraison différente pour le point de terminaison.

    Amazon SNS utilise le champ x-amz-sns-message-id d'en-tête pour identifier chaque message publié sur une rubrique Amazon SNS. En comparant les ID des messages traités avec ceux des messages entrants, vous pouvez déterminer s'il s'agit d'une nouvelle tentative.

  7. Si vous vous abonnez à un point de terminaison HTTPS, assurez-vous que celui-ci possède un certificat de serveur délivré par une autorité de certification (CA) de confiance. 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.