Perché la mia funzione Lambda riprova i messaggi Amazon SQS validi e li inserisce nella mia coda di lettere non autorizzate?

4 minuti di lettura
0

Ho configurato la mia funzione AWS Lambda per elaborare i messaggi in una coda Amazon Simple Queue Service (Amazon SQS). Alcuni dei miei messaggi Amazon SQS validi vengono ricevuti più volte fino a MaxReceiveCount e finiscono nella mia coda di lettere non autorizzate.

Breve descrizione

Se la funzione Lambda è limitata, restituisce un errore o non risponde durante la lettura di un batch di messaggi Amazon SQS, i messaggi tornano nella coda. Al termine del timeout di visibilità, la funzione Lambda riceve nuovamente il batch di messaggi. Se la tua funzione non riesce a elaborare più volte i messaggi validi, Amazon SQS invia i messaggi alla tua coda di non recapito, se ne hai configurata una.

Per evitare che messaggi validi vengano inseriti in una coda di non recapito, il codice della funzione deve essere idempotente e in grado di gestire i messaggi più volte. Per ulteriori informazioni, vedi Come posso impedire a un messaggio Amazon SQS di richiamare la mia funzione Lambda più di una volta?

Risoluzione

Verifica che il codice della tua funzione Lambda sia idempotente

Per le migliori pratiche sull'idempotenza e la logica delle funzioni di esempio, vedi Come posso rendere la mia funzione Lambda idempotente?

Verifica che il timeout di visibilità della coda Amazon SQS sia almeno sei volte più lungo dell'impostazione di timeout della funzione Lambda

Imposta il timeout di visibilità della coda di origine su almeno sei volte più lungo del timeout della tua funzione. Il tempo supplementare consente alla funzione di riprovare a elaborare un batch se la funzione viene limitata durante l'elaborazione di un batch precedente.

Per ulteriori informazioni, consulta Impostazione del timeout di visibilità nella Amazon SQS Developer Guide.

**Nota:**Se la tua funzione non riceve messaggi perché il timeout di visibilità della coda non è sufficientemente lungo, i messaggi non verranno registrati nei tuoi Amazon CloudWatch Logs.

Verifica che l'attributo maxReceiveCount sia impostato su almeno cinque nella politica di redrive della coda di origine

Imposta il MaxReceiveCount sulla politica di redrive della coda di origine su almeno cinque. Se la funzione restituisce un errore o non può essere richiamata perché è alla massima concorrenza, l'elaborazione potrebbe avere esito positivo con ulteriori tentativi. Un** MaxReceiveCount** di almeno cinque offre maggiori possibilità di elaborare i messaggi prima che vengano inviati alla coda delle lettere non autorizzate.

Per aggiornare il limite massimo di impostazione della concorrenza, consulta Configurazione della concorrenza massima per le sorgenti di eventi Amazon SQS.

Per ulteriori informazioni, vedi Come funzionano le code per lettere non ricevute? ed evitando l'elaborazione incoerente dei messaggi nella Amazon SQS Developer Guide.

Verifica la limitazione e la concorrenza riservata nella funzione Lambda

Le funzioni Lambda sono talvolta limitate per proteggere le risorse e le applicazioni downstream. Anche se Lambda si ridimensiona automaticamente per adattarsi al traffico in entrata, la funzione può comunque essere limitata per vari motivi.

Usa la console Lambda per verificare l'impostazione della concorrenza riservata. Se la concorrenza riservata non è configurata, la funzione utilizza la concorrenza non riservata. Quando le chiamate con funzioni superano la concorrenza senza riserve, si verifica una limitazione.

**Nota:**Se hai configurato una funzione con zero concorrenza riservata, la funzione viene limitata perché non è in grado di elaborare alcun evento. Assicurati di aumentare il valore a un numero maggiore di zero.

Se altre funzioni nella stessa regione AWS utilizzano il limite di concorrenza, può verificarsi una limitazione. Le funzioni Lambda soggette a limitazione inviano i messaggi SQS alla coda delle lettere non consentite.

Evitare di rielaborare tutti i messaggi SQS in un batch fallito

Tutti i messaggi SQS sono visibili nella coda delle lettere non consentite per le funzioni Lambda che riscontrano errori durante l'elaborazione di un batch, inclusi i messaggi che Lambda ha elaborato correttamente. Lambda riprova quindi l'intero batch di messaggi SQS.

Per evitare di rielaborare tutti i messaggi SQS in un batch fallito, configura la mappatura dell'origine degli eventi con il valore** reportBatchItemFailures** nell'elenco** FunctionResponseTypes**. Ciò consente alla funzione di restituire un successo parziale e di ridurre il numero di tentativi. Per ulteriori informazioni, vedere Segnalazione degli errori degli articoli in batch.

Identifica e risolvi gli errori restituiti dalla funzione Lambda

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

Informazioni correlate

Come posso richiedere un aumento del limite di concorrenza per la mia funzione Lambda?

Come posso risolvere i problemi di limitazione delle funzioni Lambda con gli errori «Rate exceeded» e 429 «TooManyRequestsException»?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa