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à.
Risolvi i problemi di mappatura delle sorgenti degli eventi in Lambda
I problemi in Lambda relativi alla mappatura dell'origine di un evento possono essere più complessi perché implicano il debug su più servizi. Inoltre, il comportamento della fonte dell'evento può differire in base all'origine esatta dell'evento utilizzata. Questa sezione elenca i problemi più comuni che riguardano le mappature delle sorgenti degli eventi e fornisce indicazioni su come identificarli e risolverli.
Nota
Questa sezione utilizza una fonte di eventi Amazon SQS a scopo illustrativo, ma i principi si applicano ad altre mappature di sorgenti di eventi che mettono in coda i messaggi per le funzioni Lambda.
Identificazione e gestione della limitazione
In Lambda, la limitazione si verifica quando si raggiunge il limite di concorrenza della funzione o dell'account. Considera l'esempio seguente, in cui è presente una funzione Lambda che legge i messaggi da una coda Amazon SQS. Questa funzione Lambda simula invocazioni di 30 secondi e ha una dimensione del batch di 1. Ciò significa che la funzione elabora solo 1 messaggio ogni 30 secondi:
const doWork = (ms) => new Promise(resolve => setTimeout(resolve, ms))
exports.handler = async (event) => {
await doWork(30000)
}
Con un tempo di chiamata così lungo, i messaggi iniziano ad arrivare in coda più rapidamente di quanto vengano elaborati. Se la concorrenza non riservata del tuo account è pari a 100, Lambda è in grado di scalare fino a 100 esecuzioni simultanee, dopodiché si verifica una limitazione. Puoi vedere questo schema nelle metriche della funzione: CloudWatch
CloudWatch le metriche relative alla funzione non mostrano errori, ma il grafico delle esecuzioni simultanee mostra che è stata raggiunta la concorrenza massima di 100. Di conseguenza, il grafico Throttles mostra la limitazione in atto.
È possibile rilevare la limitazione tramite CloudWatch allarmi e impostare una sveglia ogni volta che la metrica di limitazione per una funzione è maggiore di 0. Dopo aver identificato il problema della limitazione, sono disponibili alcune opzioni per la risoluzione:
-
Richiedi un aumento della concorrenza all' AWS assistenza in questa regione.
-
Identificare i problemi di prestazioni della funzione per migliorare la velocità di elaborazione e di conseguenza il throughput.
-
Aumentate la dimensione del batch della funzione, in modo che a ogni chiamata vengano elaborati più messaggi.
Errori nella funzione di elaborazione
Se la funzione di elaborazione genera errori, Lambda restituisce i messaggi alla coda SQS. Lambda impedisce il ridimensionamento della funzione per prevenire errori su larga scala. Le seguenti metriche SQS CloudWatch indicano un problema con l'elaborazione delle code:
In particolare, aumentano sia l'età del messaggio più vecchio che il numero di messaggi visibili, mentre nessun messaggio viene eliminato. La coda continua a crescere ma i messaggi non vengono elaborati. Le CloudWatch metriche per la funzione Lambda di elaborazione indicano anche che c'è un problema:
Il parametro numero errori è diverso da zero ed è in aumento, mentre le esecuzioni simultanee si sono ridotte e la limitazione è stata interrotta. Ciò dimostra che Lambda ha smesso di aumentare la scalabilità della funzione a causa di errori. I CloudWatch log della funzione forniscono dettagli sul tipo di errore.
È possibile risolvere questo problema identificando la funzione che causa l'errore, quindi trovando e risolvendo l'errore. Dopo aver corretto l'errore e distribuito il nuovo codice funzione, le CloudWatch metriche dovrebbero mostrare il ripristino dell'elaborazione:
Qui, la metrica del conteggio degli errori scende a zero e la metrica del tasso di successo torna al 100%. Lambda inizia nuovamente a scalare la funzione, come mostrato nel grafico Esecuzioni simultanee.
Identificazione e gestione della contropressione
Se un produttore di eventi genera costantemente messaggi per una coda SQS più velocemente di quanto una funzione Lambda possa elaborarli, si verifica una contropressione. In questo caso, il monitoraggio SQS dovrebbe mostrare che l'età del messaggio più vecchio cresce linearmente, insieme al numero approssimativo di messaggi visibili. È possibile rilevare la contropressione nelle code utilizzando gli allarmi. CloudWatch
I passaggi per risolvere la contropressione dipendono dal carico di lavoro. Se l'obiettivo principale è aumentare la capacità di elaborazione e il throughput tramite la funzione Lambda, hai alcune opzioni:
-
Richiedi all'assistenza un aumento della concorrenza nella regione specifica. AWS
-
Aumentate la dimensione del batch della funzione, in modo che a ogni chiamata vengano elaborati più messaggi.