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 HTTP o HTTPS tiene la capacidad de administrar las solicitudes HTTP POST que Amazon SNS utiliza para enviar la confirmación de suscripción y los mensajes de notificación. Por lo general, esto implica crear e implementar una aplicación web (por ejemplo, un servlet Java si el host del punto de enlace ejecuta Linux con Apache y Tomcat) que procese las solicitudes HTTP de Amazon SNS. Cuando suscribe un punto de enlace HTTP, Amazon SNS envía una solicitud de confirmación de la suscripción. El punto de enlace debe estar preparado para recibir y procesar esta solicitud cuando cree la suscripción, porque 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. Una vez confirmada la suscripción, Amazon SNS enviará notificaciones al punto de enlace cuando se ejecute una acción de publicación en el tema suscrito.

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 examinar el campo de encabezado x-amz-sns-message-type, en el que se indica el tipo de mensaje que Amazon SNS ha enviado. En este encabezado, puede determinar el tipo de mensaje sin tener que 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 Encabezados de HTTP/HTTPS. 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 el texto sin formato de tipo de contenido para leer los pares de nombre-valor que conforman 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 poder enviar el texto del asunto y los campos de los mensajes en formato JSON válido, Amazon SNS debe convertir algunos caracteres de control en secuencias de escape que se puedan incluir en el documento JSON. Cuando reciba el documento JSON en el cuerpo de la solicitud POST enviada a su punto de enlace, debe convertir los caracteres incluidos en secuencias de escape en sus valores de caracteres originales si desea una representación exacta del asunto original y de los mensajes publicados en el tema. Esto es fundamental si desea verificar la firma de una notificación, porque la firma utiliza el mensaje y el asunto en sus formatos originales como parte de la cadena para 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. Mediante la información incluida en el mensaje de Amazon SNS, el punto de enlace puede volver a crear la firma para que se pueda verificar el contenido del mensaje cotejando la firma propia con la firma que Amazon SNS envió con el mensaje. 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 Formato JSON de confirmación de suscripción HTTP/HTTPS. 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>

    En lugar de visitar la URL SubscribeURL, puede confirmar la suscripción mediante la acción ConfirmSubscription con Token establecido en su valor correspondiente en el mensaje SubscriptionConfirmation. 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 Encabezados de HTTP/HTTPS. 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 de enlace responde al mensaje HTTP POST de Amazon SNS con el código de estado adecuado. El tiempo de espera de la conexión se agotará en 15 segundos. Si el punto de enlace no responde antes de que se agote el tiempo de espera de la conexión, o si devuelve un código de estado fuera del intervalo 200-4xx, Amazon SNS considerará la entrega del mensaje un intento fallido.

  6. Asegúrese de que el código puede administrar los reintentos de entrega de mensajes de 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 la entrega inicial del mensaje da un error, Amazon SNS realiza tres reintentos con un intervalo entre los intentos fallidos establecido en 20 segundos.

    nota

    El tiempo de espera de la solicitud de mensajes se agota tras 15 segundos. Esto significa que si no se pudo entregar el mensaje porque se agotó el tiempo de espera, Amazon SNS lo volverá a intentar aproximadamente 35 segundos después del intento de entrega anterior. Puede establecer una política de entrega diferente para el punto de enlace.

    Amazon SNS usa el campo de encabezado x-amz-sns-message-id para identificar de forma única cada mensaje publicado en un tema de Amazon SNS. Comparando los ID de los mensajes que ha procesado con los mensajes entrantes, puede determinar si se trata de un reintento de entrega del mensaje.

  7. Si suscribe un punto de enlace HTTPS, asegúrese de que el punto de enlace tiene un certificado de servidor de una entidad 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.