Come faccio a fare in modo che il mio abbonamento Amazon SQS riceva correttamente una notifica dal mio argomento Amazon SNS?

6 minuti di lettura
0

Il mio abbonamento ad Amazon Simple Queue Service (Amazon SQS) non riceve alcuna notifica dal mio argomento Amazon Simple Notification Service (Amazon SNS).

Descrizione breve

Prima di iniziare, configura la registrazione dello stato di consegna Amazon CloudWatch per il tuo argomento SNS. Per ulteriori informazioni, consulta Monitoraggio degli argomenti di Amazon SNS tramite CloudWatch.

Nota:

Soluzione

Convalida lo stato dell'abbonamento

Verifica che lo stato dell'abbonamento sia Confermato e non In attesa di conferma o Eliminato. Se lo stato è In attesa di conferma, conferma l'abbonamento. Se lo stato è Eliminato, ricrea l'abbonamento eliminato.

Questi sono i motivi per cui un abbonamento è nello stato Confermato, ma i messaggi non vengono consegnati alle code:

  • Non hai configurato la policy di accesso della tua coda SQS o la policy delle chiavi del sistema AWS di gestione delle chiavi (AWS KMS).
  • I messaggi vengono filtrati.
  • I messaggi vengono deduplicati negli argomenti FIFO (first in first out).
  • Hai attivato la consegna di messaggi non elaborati per gli abbonamenti.
  • I messaggi sono stati consegnati, ma non li vedi in Amazon SQS.

Hai ricevuto un errore di accesso negato

Configura la policy di accesso della tua coda SQS per consentire ad Amazon SNS di inviare messaggi

Per visualizzare la policy di accesso della coda SQS, configura la policy di accesso.

Se la policy di accesso della tua coda SQS non include l'azione dell'API "sqs:SendMessage" per il tuo argomento SNS, aggiorna la policy con le autorizzazioni corrette. Le autorizzazioni devono consentire ad Amazon SNS di inviare messaggi alla coda SQS.

Configura la policy della chiave di AWS KMS per utilizzare SSE nella tua coda SQS

Se la crittografia lato server (SSE) è attivata per la coda SQS, procedi nel seguente modo:

1.    Assicurati che la chiave AWS KMS sia attivata.

2.    Verifica se la tua coda SQS utilizza una chiave KMS gestita dal cliente. La policy della chiave deve concedere le autorizzazioni kms:Decrypt e kms:GenerateDataKey per l'argomento SNS.

Nota: non puoi usare le chiavi gestite da AWS negli abbonamenti tra più account.

3.    Per consentire al servizio Amazon SNS di eseguire le azioni API kms:GenerateDataKey e kms:Decrypt, aggiungi questa dichiarazione alla policy della chiave KMS:

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

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

Se la policy della chiave KMS non concede l'accesso al principale Amazon SNS, i log dello stato di consegna dei messaggi visualizzano l'errore 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"
}

Per ulteriori informazioni, consulta Perché i messaggi che pubblico sul mio argomento Amazon SNS non vengono consegnati alla coda Amazon SQS sottoscritta che ha attivato la crittografia lato server?

I messaggi vengono filtrati

Nella console CloudWatch, controlla le metriche di CloudWatch per Amazon SNS. Controlla la metrica NumberOfNotificationsFilteredOut per verificare che i messaggi siano stati filtrati. Se i messaggi vengono filtrati, controlla la policy di filtro dell'abbonamento agli argomenti SNS della tua coda SQS.

Per verificare la politica di abbonamento all'argomento SNS, completa i seguenti passaggi:

1.    Apri la console Amazon SNS.

2.    Nel riquadro di navigazione, scegli Abbonamenti.

3.    Seleziona il tuo abbonamento, quindi scegli Modifica.

4.    Espandi la sezione Policy di filtro per gli abbonamenti. Verifica se gli attributi del messaggio o il corpo del messaggio corrispondono all'](https://docs.aws.amazon.com/sns/latest/dg/sns-message-filtering-scope.html)ambito della politica di filtro dell'abbonamento SNS[. Se gli attributi o il corpo non corrispondono, aggiorna la politica del filtro.

5.    Scegli Salva modifiche.

Per ulteriori informazioni, consulta la sezione Filtraggio messaggi di Amazon SNS.

I messaggi vengono deduplicati

Gli argomenti FIFO di Amazon SNS e le code FIFO di Amazon SQS supportano la deduplicazione dei messaggi, basata sul contenuto del messaggio o su un ID di deduplicazione. Se ContentBasedDeduplication è impostato nell'argomento, il sistema genera un MessageDeduplicationId in base al contenuto del messaggio. Se ContentBasedDeduplication non è impostato, ogni messaggio pubblicato sull'argomento deve avere un MessageDeduplicationID univoco.

Utilizza il parametro MessageDeduplicationID per deduplicare i messaggi pubblicati negli argomenti SNS entro l'intervallo di deduplicazione di 5 minuti. Per ulteriori informazioni, consulta Deduplicazione dei messaggi per argomenti FIFO.

Hai attivato la consegna di messaggi non elaborati per gli abbonamenti

Se utilizzi la consegna di messaggi non elaborati, verifica di non inviare più di 10 attributi del messaggio nella notifica pubblicata. Per i messaggi attivati con la consegna di messaggi non elaborati, Amazon SNS mappa gli attributi del messaggio agli attributi dei messaggi SQS.

L'esempio seguente è un registro dello stato di consegna con più di 10 attributi del messaggio:

{    "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"
}

I messaggi sono stati consegnati, ma non li vedi in Amazon SQS

Un messaggio potrebbe essere consegnato alla coda ma non è disponibile per il polling per i seguenti motivi:

  • È attualmente in fuga oppure il messaggio è invisibile perché un consumatore lo ha ricevuto ed elaborato. Per confermare se il consumatore ha ricevuto ed elaborato il messaggio, utilizza la metrica di CloudWatch NumberOfMessagesReceived o ApproximateNumberOfMessagesNotVisible.
  • Hai configurato il messaggio con una coda di ritardo oppure i messaggi sono stati inviati con il ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-timers.html)timer dei messaggi[. Per controllare il messaggio, utilizza la metrica di CloudWatch ApproximateNumberOfMessagesDelayed.

L'abbonamento SNS non è visibile nella console SQS

Se hai creato l'abbonamento SQS dall'account dell'argomento SNS, non puoi visualizzare l'abbonamento nella console SQS. Questo perché l'account SNS è proprietario dell'abbonamento, quindi puoi visualizzare l'abbonamento solo nella console SNS.

Se l'abbonamento SNS è stato creato dalla console Amazon SQS, l'account dell'argomento SQS possiede l'abbonamento. Puoi quindi visualizzare l'abbonamento SNS dalla console SNS e dalla console SQS.

L'abbonamento SQS non è visibile nell'abbonamento dell'argomento SNS

Questo problema si verifica quando elimini e ricrei l'argomento SNS con lo stesso nome e non elimini l'abbonamento SQS. Puoi visualizzare l'abbonamento SQS nella console SNS dell'elenco Abbonamenti o dalla chiamata API ListSubscriptions di SNS. Per verificare il timestamp in cui sono state eseguite le operazioni, esamina gli eventi AWS CloudTrail per le chiamate API DeleteTopic e CreateTopic di SNS.

Informazioni correlate

Come faccio a configurare il mio endpoint Amazon SQS per più account sull'argomento Amazon SNS?

AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa