Perché la funzione Lambda riprova a inviare messaggi Amazon SQS validi e li inserisce nella coda dei messaggi non recapitabili?

Ultimo aggiornamento: 01/11/2021

Ho configurato la funzione AWS Lambda per elaborare i messaggi in una coda Amazon Simple Queue Service (Amazon SQS). Ora, alcuni dei miei messaggi Amazon SQS validi vengono ricevuti più volte fino a raggiungere il valore maxReceiveCount e finiscono nella coda dei messaggi non recapitabili. Perché si verifica questo problema e come posso assicurarmi che la mia funzione Lambda elabori tutti i messaggi Amazon SQS validi?

Breve descrizione

Se la funzione Lambda è limitata, restituisce un errore o non risponde durante la lettura di un batch di messaggi Amazon SQS, allora i messaggi tornano alla coda. Dopo il timeout visibilità, la funzione Lambda riceve nuovamente il batch di messaggi. Se la funzione prova più volte senza successo a elaborare i messaggi validi, Amazon SQS li invia alla coda dei messaggi non recapitabili, se ne hai configurata una.

Per evitare che i messaggi validi vengano inseriti in una coda dei messaggi non recapitabili, il codice della funzione deve essere idempotente e in grado di gestire i messaggi più volte.

Risoluzione

Verifica che il codice della tua funzione Lambda sia idempotente

Per le best practice sull'idempotenza ed esempi di logica delle funzioni, consulta Come posso rendere la funzione Lambda idempotente?

Verifica che il timeout visibilità della coda Amazon SQS sia almeno sei volte superiore al timeout impostato per la funzione Lambda

Imposta il timeout visibilità della coda fonte in modo che sia almeno sei volte superiore al timeout della funzione. Il tempo aggiuntivo consente alla funzione di ritentare l'elaborazione di un batch se la funzione viene limitata durante l'elaborazione di un batch precedente.

Per ulteriori informazioni, consulta la sezione Impostazione del timeout visibilità nella Guida per sviluppatori di Amazon SQS.

Nota: se la funzione non riceve messaggi perché il timeout visibilità della coda non è sufficientemente lungo, i messaggi non verranno registrati in Amazon CloudWatch Logs.

Verifica che l'attributo maxReceiveCount sia impostato su un valore uguale o superiore a cinque nella policy di reindirizzamento della coda fonte

Imposta il valore maxReceiveCount nella policy di reindirizzamento della coda fonte su un valore uguale o superiore a cinque. Se la funzione restituisce un errore o non può essere richiamata perché è stato raggiunto il limite massimo di esecuzioni simultanee, l'elaborazione potrebbe avere esito positivo con ulteriori tentativi. Un valore maxReceiveCount uguale o superiore a cinque offre ai tuoi messaggi maggiori possibilità di essere elaborati prima di essere inviati alla coda dei messaggi non recapitabili.

Per ulteriori informazioni, consulta le sezioni Come funzionano le code di messaggi non recapitabili? ed Evitare l'elaborazione incoerente dei messaggi nella Guida per sviluppatori di Amazon SQS.

Identifica e risolvi eventuali errori restituiti dalla funzione Lambda

Segui le istruzioni in Come posso risolvere gli errori delle funzioni Lambda? La funzione rimuove automaticamente i messaggi dalla coda solo se non restituisce un errore.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?