¿Cómo puedo hacer que mi suscripción a Amazon SQS reciba correctamente notificaciones de mi tema de Amazon SNS?

7 minutos de lectura
0

Mi suscripción a Amazon Simple Queue Service (Amazon SQS) no recibe ninguna notificación de mi tema de Amazon Simple Notification Service (Amazon SNS).

Breve descripción

Antes de empezar, configure los registros de estado de entrega de Amazon CloudWatch para su tema de SNS. Para obtener más información, consulte Monitoreo de los temas de Amazon SNS mediante Amazon CloudWatch.

Nota:

Solución

Validar el estado de la suscripción

Compruebe si la suscripción tiene el estado Confirmada, no Pendiente de confirmación ni Eliminada. Si el estado es Pendiente de confirmación, confirme la suscripción. Si el estado es Eliminada, vuelva a crear la suscripción eliminada.

Si una suscripción tiene el estado Confirmada, pero los mensajes no se entregan en las colas, puede deberse a los siguientes motivos:

  • No ha configurado la política de acceso de la cola de SQS ni la política de claves de AWS Key Management Service (AWS KMS).
  • Los filtros descartan los mensajes.
  • Los mensajes son temas desduplicados según la secuencia FIFO (el primero en entrar es el primero en salir).
  • Ha activado la entrega de mensajes sin procesar para las suscripciones.
  • Los mensajes se han entregado, pero no los ve en Amazon SQS.

Se muestra el error «Acceso denegado»

Configurar la política de acceso de la cola de SQS de modo que permita que Amazon SNS envíe mensajes

Para ver la política de acceso de la cola de SQS, configure la política.

Si la política de acceso de la cola de SQS no incluye la acción de API SendMessage para el tema de SNS, actualice la política con los permisos correctos. Los permisos deben permitir que Amazon SNS envíe mensajes a la cola de SQS.

Configurar la política de claves de AWS KMS para que funcione con SSE en la cola de SQS

Si se ha activado el cifrado del servidor (SSE) para la cola de SQS, siga estos pasos:

1.    Asegúrese de que la clave de AWS KMS esté activada.

2.    Compruebe si la cola de SQS utiliza una clave de KMS administrada por el cliente. La política de claves debe conceder los permisos kms:Decrypt y kms:GenerateDataKey en relación con el tema de SNS.

Nota: No puede utilizar claves administradas de AWS en suscripciones entre cuentas.

3.    Para permitir que el servicio de Amazon SNS realice las acciones de API kms:GenerateDataKey y kms:Decrypt, añada esta instrucción a la política de claves de KMS:

{    "Sid": "Allow Amazon SNS to use this key",
    "Effect": "Allow",
    "Principal": {
        "Service": "sns.amazonaws.com"

    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": "*"
}

Si la política de claves de KMS no concede acceso a la entidad principal de Amazon SNS, en los registros de estado de entrega de los mensajes se mostrará el error KMS.AccessDeniedException:

{    "notification": {
        "messageMD5Sum": "9ecb1c62c0de86ac894c5fd6c447fe1f",
        "messageId": "f762cbcb-8643-5ef3-95c8-9739fe5f07f6",
        "topicArn": "arn:aws:sns:::",
        "timestamp": "2023-06-01 10:41:32.114"
    },
    "delivery": {
        "deliveryId": "f7a48fb3-1d98-5fe8-ae45-d34165842b39",
        "destination": "arn:aws:sqs:::",
        "providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: 00df5c7d-1834-4cfb-bc05-e5a7fccfa816; Proxy: null)\",\"sqsRequestId\":\"Unrecoverable\"}",
        "dwellTimeMs": 59,
        "statusCode": 400
    },
    "status": "FAILURE"
}

Para obtener más información, consulte Why aren't messages that I publish to my Amazon SNS topic getting delivered to my subscribed Amazon SQS queue that has server-side encryption activated?

Los filtros descartan los mensajes

En la consola de CloudWatch, compruebe las métricas de CloudWatch para Amazon SNS. Para confirmar si los filtros han descartado los mensajes, consulte la métrica NumberOfNotificationsFilteredOut. Si los filtros han descartado los mensajes, compruebe la política de filtro de suscripciones a temas de SNS de la cola de SQS.

Para comprobar la política de suscripción a temas de SNS, siga estos pasos:

1.    Abra la consola de Amazon SNS.

2.    En el panel de navegación, elija Suscripciones.

3.    Seleccione su suscripción y, a continuación, Editar.

4.    Expanda la sección Política de filtro de suscripciones. Compruebe si los valores en Atributos del mensaje o Cuerpo del mensaje coinciden con el alcance de las políticas de filtro de suscripciones de Amazon SNS. Si los atributos o el cuerpo no coinciden, actualice la política de filtro.

5.    Elija Guardar los cambios.

Para obtener más información, consulte Filtrado de mensajes en Amazon SNS.

Los mensajes están desduplicados

En función del contenido del mensaje o si existe un ID de desduplicación, los temas FIFO de Amazon SNS y las colas FIFO de Amazon SQS admiten la desduplicación de mensajes. Si se ha configurado ContentBasedDeduplication en el tema, el sistema generará un valor para MessageDeduplicationId según el contenido del mensaje. Si no se ha configurado ContentBasedDeduplication, cada mensaje publicado en el tema deberá tener un valor único de MessageDeduplicationId.

Utilice el parámetro MessageDeduplicationId para desduplicar los mensajes publicados en los temas de SNS dentro del intervalo de desduplicación de 5 minutos. Para obtener más información, consulte Desduplicación de mensajes para temas FIFO.

Ha activado la entrega de mensajes sin procesar para las suscripciones

Si utiliza la entrega de mensajes sin procesar, asegúrese de no enviar más de 10 atributos de mensaje en la notificación publicada. En el caso de los mensajes activados con la entrega de mensajes sin procesar, Amazon SNS asigna los atributos de mensaje a los atributos de mensaje de SQS.

A continuación, se muestra un ejemplo de un registro de estado de entrega con más de 10 atributos de mensaje:

{    "notification": {
        "messageMD5Sum": "8fa14cdd754f91cc6554c9e71929cce7",
        "messageId": "22540375-973d-5c6d-8d9e-5f870de34c49",
        "topicArn": "arn:aws:sns:<region>:<account>:<topic name>",
        "timestamp": "2023-06-01 13:09:50.947"
    },
    "delivery": {
        "deliveryId": "9ccf7066-19e5-5bbb-a973-2c94833bc5fc",
        "destination": "arn:aws:sqs:<region>:<account>:<queue name>",
        "providerResponse": "{\\"ErrorCode\\":\\"InvalidParameterValue\\",\\"ErrorMessage\\":\\"Number of message attributes \[13\] exceeds the allowed maximum \[10\].\\",\\"sqsRequestId\\":\\"Unrecoverable\\"}",
        "dwellTimeMs": 31,
        "statusCode": 400
    },
    "status": "FAILURE"
}

Los mensajes se han entregado, pero no los ve en Amazon SQS

Es posible que se haya entregado un mensaje en la cola, pero que no esté disponible para el sondeo por los siguientes motivos:

La suscripción a SNS no está visible en la consola de SQS

Si ha creado la suscripción a SQS desde la cuenta de temas de SNS, no podrá ver la suscripción en la consola de SQS. Esto se debe a que la cuenta de SNS es la propietaria de la suscripción, por lo que solo podrá ver la suscripción en la consola de SNS.

Si ha creado la suscripción a SNS desde la consola de Amazon SQS, la cuenta de temas de SQS es la propietaria de la suscripción. En este caso, podrá ver la suscripción a SNS tanto desde la consola de SNS como desde la consola de SQS.

La suscripción a SQS no está visible en la suscripción al tema de SNS

Este problema surge cuando elimina un tema de SNS y lo vuelve a crear con el mismo nombre sin eliminar la suscripción a SQS. Podrá ver la suscripción a SQS en la consola de SNS en la lista Suscripciones o con la llamada a la API ListSubscriptions en SNS. Para comprobar la marca de tiempo del momento en que se realizaron las operaciones, revise los eventos de AWS CloudTrail para las llamadas a la API DeleteTopic y CreateTopic de SNS.

Información relacionada

How do I configure my cross-account Amazon SQS endpoint to the Amazon SNS topic?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses