Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Code per le lettere morte di Amazon SNS
Una coda DLQ è una coda Amazon SQS a cui un abbonamento Amazon SNS può mirare per i messaggi che non possono essere recapitati correttamente agli abbonati. I messaggi che non possono essere recapitati a causa di errori client o errori server vengono mantenuti nella coda DLQ per ulteriori analisi o elaborazione. Per ulteriori informazioni, consulta Configurazione di una coda Amazon SNS dead-letter per una sottoscrizione e Tentativi di consegna dei messaggi di Amazon SNS.
Nota
L'abbonamento Amazon SNS e la coda Amazon SQS devono essere associati allo stesso account e alla stessa regione. AWS
-
Per un Argomento FIFO, puoi utilizzare una coda di Amazon SQS come una coda DLQ per la sottoscrizione ad Amazon SNS. Le sottoscrizioni agli argomenti FIFO utilizzano le code FIFO e le sottoscrizioni agli argomenti standard utilizzano le code standard.
Per utilizzare una coda Amazon SQS crittografata come coda di posta morta, devi utilizzare un KMS personalizzato con una policy chiave che conceda al servizio Amazon SNS l'accesso principale alle azioni API. AWS KMS Per ulteriori informazioni, consulta questa guida e la sezione Protecting Amazon SQS Data Using Server-Side Encryption (SSE) e Protezione dei dati di Amazon SNS con crittografia lato server nella Amazon Simple Queue Service Developer Guide. AWS KMS
Perché le consegne dei messaggi non riescono?
In generale, la consegna dei messaggi non riesce quando Amazon SNS non può accedere a un endpoint sottoscritto a causa di un errore lato client o lato server. Quando Amazon SNS riceve un errore sul lato client o continua a ricevere un errore sul lato server per un messaggio che supera il numero di tentativi specificato dalla policy di ripetizione dei tentativi corrispondente, Amazon SNS ignora il messaggio, a meno che non sia allegata una coda DLQ all'abbonamento. Le consegne non riuscite non modificano lo stato delle sottoscrizioni. Per ulteriori informazioni, consulta Tentativi di consegna dei messaggi di Amazon SNS.
Client-side errori
Client-side possono verificarsi errori quando Amazon SNS ha metadati di abbonamento non aggiornati. Questi errori si verificano in genere quando un proprietario elimina l'endpoint (ad esempio, una funzione Lambda sottoscritta a un argomento Amazon SNS) o quando un proprietario modifica la policy associata all'endpoint sottoscritto in modo da impedire ad Amazon SNS la policy di consegna dei messaggi all'endpoint. Amazon SNS non riprova a recapitare i messaggi che non riescono a causa di un errore sul lato client.
Server-side errori
Server-side possono verificarsi errori quando il sistema responsabile dell'endpoint sottoscritto non è disponibile o restituisce un'eccezione che indica che non è in grado di elaborare una richiesta valida da Amazon SNS. Quando si verificano errori lato server, Amazon SNS ripropone le consegne non riuscite utilizzando una funzione di backoff lineare o esponenziale. Per gli errori lato server causati da endpoint AWS gestiti supportati da Amazon SQS or AWS Lambda, Amazon SNS riprova la consegna fino a 100.015 volte, nell'arco di 23 giorni.
Gli endpoint gestiti dal cliente (ad esempio HTTP, SMTP, SMS o push mobile) possono anche causare errori lato server. Amazon SNS tenta di eseguire nuovamente la consegna anche a questi tipi di endpoint. Mentre gli endpoint HTTP supportano le policy di nuovi tentativi definite dal cliente, Amazon SNS imposta una policy di nuovi tentativi di consegna interna su 50 volte nell'arco di 6 ore per gli endpoint push SMTP, SMS e dispositivi mobili.
Come funzionano le code DLQ?
Una coda dead-letter è allegata a una sottoscrizione Amazon SNS (anziché a un argomento) perché la consegna dei messaggi avviene a livello di sottoscrizione. In questo modo è possibile identificare più facilmente l'endpoint di destinazione originale per ogni messaggio.
Una coda dead-letter associata a una sottoscrizione Amazon SNS è una coda Amazon SQS ordinaria. Per ulteriori informazioni sul periodo di conservazione dei messaggi, consulta Quote correlate ai messaggi nella Guida per sviluppatori Amazon Simple Queue Service. È possibile modificare il periodo di conservazione dei messaggi utilizzando l'operazione API Amazon SQS SetQueueAttributes. Per rendere le applicazioni più resilienti, è consigliabile impostare il periodo massimo di conservazione per le code dead-letter a 14 giorni.
Come vengono spostati i messaggi in una coda DLQ?
I messaggi vengono spostati in una coda dead-letter utilizzando una policy di redrive. Una policy di redrive è un oggetto JSON che fa riferimento all'ARN della coda dead-letter. L'attributo deadLetterTargetArn specifica l'ARN. L'ARN deve puntare a una coda Amazon SQS nella stessa regione e nella stessa regione dell'abbonamento Amazon Account AWS SNS. Per ulteriori informazioni, consulta Configurazione di una coda Amazon SNS dead-letter per una sottoscrizione.
L'oggetto JSON seguente è una policy di redrive di esempio, allegato a una sottoscrizione SNS.
{
"deadLetterTargetArn": "arn:aws:sqs:us-east-2:123456789012:MyDeadLetterQueue"
}
Come posso spostare i messaggi fuori da una coda DLQ?
È possibile spostare i messaggi fuori da una coda dead-letter in due modi:
-
Evitare di scrivere logica consumer Amazon SQS - Impostare la coda dead-letter come origine evento sulla funzione Lambda per drenare la coda dead-letter.
-
Scrivi la logica consumer di Amazon SQS: utilizza l'API Amazon SQS, l' AWS SDK o AWS CLI per scrivere una logica di consumo personalizzata per il polling, l'elaborazione e l'eliminazione dei messaggi nella coda dei messaggi morti.
Come posso monitorare e registrare code DLQ?
Puoi utilizzare Amazon CloudWatch Metrics per monitorare le code di lettere morte associate ai tuoi abbonamenti Amazon SNS. Tutte le code Amazon SQS emettono parametri a intervalli di un minuto. CloudWatch Per ulteriori informazioni, consulta le CloudWatch metriche disponibili per Amazon SQS nella Amazon Simple Queue Service Developer Guide. Anche tutti gli abbonamenti Amazon SNS con code di lettere morte emettono parametri. CloudWatch Per ulteriori informazioni, consulta Monitoraggio degli argomenti di Amazon SNS utilizzando CloudWatch.
Per ricevere notifiche sulle attività nelle code per le lettere morte, puoi utilizzare metriche e allarmi. CloudWatch L'impostazione di un allarme per la NumberOfMessagesSent metrica non è adatta perché questa metrica non acquisisce i messaggi inviati a un DLQ a causa di tentativi di elaborazione non riusciti. Utilizzate invece la ApproximateNumberOfMessagesVisible metrica, che acquisisce tutti i messaggi attualmente disponibili nel DLQ, inclusi quelli spostati a causa di errori di elaborazione.
Esempio di configurazione degli allarmi CloudWatch
-
Crea un CloudWatch allarme per la
ApproximateNumberOfMessagesVisiblemetrica. -
Imposta la soglia di allarme su 1 (o su un altro valore appropriato in base alle tue aspettative e al traffico DLQ).
-
Specifica un argomento Amazon SNS per ricevere una notifica quando l'allarme scatta. In questo argomento Amazon SNS è possibile inviare la notifica di allarme a qualsiasi tipo di endpoint (ad esempio un indirizzo e-mail, un numero di telefono o un'app per il cercapersone mobile).
Puoi utilizzare CloudWatch Logs per esaminare le eccezioni che causano il fallimento delle consegne di Amazon SNS e per inviare messaggi a code di lettere morte. Amazon SNS è in grado di registrare sia le consegne riuscite che quelle non riuscite. CloudWatch Per ulteriori informazioni, consulta Attributi dell'app mobile Amazon SNS.