View a markdown version of this page

Paso 1: Asegúrese de que el punto de enlace está listo para procesar mensajes de Amazon SNS. - Amazon Simple Notification Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Paso 1: Asegúrese de que el punto de enlace está listo para procesar mensajes de Amazon SNS.

Antes de suscribir su punto de enlace HTTP o HTTPS a un tema, debe asegurarse de que el punto de enlace pueda gestionar las solicitudes HTTP POST que Amazon SNS utiliza para enviar los mensajes de confirmación y notificación de la suscripción. Por lo general, esto implica crear e implementar una aplicación web que procese las solicitudes HTTP de Amazon SNS. Por ejemplo, utilice un servlet de Java si su host de punto final ejecuta Linux con Apache y Tomcat. Cuando suscribe un punto de enlace HTTP, Amazon SNS envía una solicitud de confirmación de la suscripción. Su terminal debe estar preparado para recibir y procesar esta solicitud al crear la suscripción. Amazon SNS envía esta solicitud en ese momento. Amazon SNS no enviará notificaciones al punto de enlace hasta que se confirme la suscripción. Tras confirmar, Amazon SNS envía notificaciones al punto final cuando se realiza una acción de publicación sobre el tema.

Para configurar el punto de enlace para que procese los mensajes de confirmación de la suscripción y de notificación
  1. El código debe leer los encabezados HTTP de las solicitudes HTTP POST que Amazon SNS envía a su punto de enlace. El código debe buscar el campo del encabezado. x-amz-sns-message-type Este campo le indica el tipo de mensaje que le ha enviado Amazon SNS. Al observar el encabezado, puede determinar el tipo de mensaje sin analizar el cuerpo de la solicitud HTTP. Hay dos tipos que debe administrar: SubscriptionConfirmation y Notification. El mensaje UnsubscribeConfirmation se utiliza únicamente cuando la suscripción se elimina del tema.

    Para obtener información detallada sobre el encabezado HTTP, consulte HTTP/HTTPS encabezados. La siguiente solicitud HTTP POST es un ejemplo de un mensaje de confirmación de la suscripción.

    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. El código debe analizar el documento JSON del cuerpo de la solicitud HTTP POST y del tipo de contenido text/plain para leer los pares nombre-valor que forman el mensaje de Amazon SNS. Utilice un analizador JSON que se encargue de convertir la representación en forma de secuencias de escape de los caracteres de control en sus valores de caracteres ASCII (por ejemplo, convertir \n en un carácter de nueva línea). Puede utilizar un analizador JSON existente como Jackson JSON Processor o crear el suyo propio. Para enviar el texto de los campos de asunto y mensaje como un JSON válido, Amazon SNS debe convertir algunos caracteres de control en representaciones de escape que puedan incluirse en el documento JSON. Cuando reciba el documento JSON en el cuerpo de la solicitud POST, debe volver a convertir los caracteres de escape a sus valores de caracteres originales. Hazlo si quieres una representación exacta del asunto original y de los mensajes publicados en el tema. Esto es fundamental si quieres verificar la firma de una notificación. La firma usa el mensaje y el asunto en sus formas originales como parte de la cadena que se va a firmar.

  3. El código debe verificar la autenticidad de una notificación, la confirmación de la suscripción o la cancelación del mensaje de confirmación enviado por Amazon SNS. Con la información del mensaje de Amazon SNS, su punto final puede volver a crear la firma. A continuación, puede verificar el contenido del mensaje haciendo coincidir su firma con la que envió Amazon SNS. Para obtener más información acerca de la verificación de la firma de un mensaje, consulte Verificación de la firmas de mensajes de Amazon SNS.

  4. Según el tipo especificado por el campo de encabezado x-amz-sns-message-type, el código debe leer el documento JSON incluido en el cuerpo de la solicitud HTTP y procesar el mensaje. Estas son las directrices para administrar los dos tipos principales de mensajes:

    SubscriptionConfirmation

    Lea el valor de SubscribeURL y visite esa URL. Para confirmar la suscripción y empezar a recibir notificaciones en el punto de enlace, debe visitar la URL SubscribeURL (por ejemplo, enviando una solicitud HTTP GET a la URL). Consulte el ejemplo de la solicitud HTTP del paso anterior para ver cómo es esa URL SubscribeURL. Para obtener más información sobre el formato del mensaje SubscriptionConfirmation, consulte HTTP/HTTPS formato JSON de confirmación de suscripción. Cuando visite la dirección URL, recibirá una respuesta similar al siguiente documento XML. El documento devuelve el ARN de suscripción del punto de enlace en el elemento 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>

    Como alternativa a visitar elSubscribeURL, puedes confirmar la suscripción mediante la ConfirmSubscription acción Token establecida en su valor correspondiente en el SubscriptionConfirmation mensaje. Si desea permitir únicamente al propietario del tema y al propietario de la suscripción que cancelen la suscripción del punto de enlace, puede llamar a la acción ConfirmSubscription con una firma de AWS .

    Notificación

    Lea los valores de Subject y Message para obtener la información de la notificación que se publicó en el tema.

    Para obtener más información sobre el formato del mensaje Notification, consulte HTTP/HTTPS encabezados. La siguiente solicitud HTTP POST es un ejemplo de un mensaje de notificación enviado al punto de enlace 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. Asegúrese de que su punto final responda al mensaje HTTP POST de Amazon SNS con el código de estado adecuado. El tiempo de espera de la conexión es de unos 15 segundos. Si su terminal no responde a tiempo, Amazon SNS considera que la entrega ha sido un intento fallido. Lo mismo se aplica si el punto final devuelve un código de estado que no oscila entre 200 y 4 xx.

  6. Asegúrese de que su código pueda gestionar los reintentos de entrega de mensajes desde Amazon SNS. Si Amazon SNS no recibe una respuesta correcta del punto de enlace, intenta entregar de nuevo el mensaje. Esto se aplica a todos los mensajes, incluido el mensaje de confirmación de la suscripción. De forma predeterminada, si se produce un error en la entrega inicial, Amazon SNS intenta realizar hasta tres reintentos, con un retraso entre intentos fallidos establecido en 20 segundos.

    nota

    La solicitud de mensajes se agota después de unos 15 segundos. Por lo tanto, si el error de entrega se debe a que se ha agotado el tiempo de espera, Amazon SNS lo vuelve a intentar unos 35 segundos después del intento anterior. Puede establecer una política de entrega diferente para el punto de enlace.

    Amazon SNS utiliza el campo de x-amz-sns-message-id encabezado para identificar cada mensaje publicado en un tema de Amazon SNS. Al comparar los ID de los mensajes procesados con los mensajes entrantes, puede determinar si el mensaje es un reintento.

  7. Si se suscribe a un punto final HTTPS, asegúrese de que el punto final tenga un certificado de servidor emitido por una autoridad de certificación (CA) de confianza. Amazon SNS solo enviará mensajes a puntos de enlace HTTPS que tengan un certificado de servidor de una CA en la que confíe Amazon SNS.

  8. Implemente el código que ha creado para recibir mensajes de Amazon SNS. Cuando suscriba el punto de enlace, este debe estar preparado para recibir al menos el mensaje de confirmación de la suscripción.