Risolvi i problemi di mappatura delle sorgenti degli eventi in Lambda - AWS Lambda

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 dell'origine degli eventi può variare in base all'origine esatta dell'evento utilizzata. Questa sezione elenca i problemi comuni relativi alla mappatura 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 delle 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 il seguente esempio, 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 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 invocazione così lungo, i messaggi iniziano ad arrivare in coda più rapidamente di quanto vengano elaborati. Se la concorrenza non riservata del tuo account è 100, Lambda scala fino a 100 esecuzioni simultanee e quindi si verifica la limitazione. Puoi vedere questo schema nelle metriche della funzione: CloudWatch

operazioni di debug (figura 10)

CloudWatch le metriche della 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 mediante CloudWatch allarmi e impostare un allarme ogni volta che la metrica di limitazione per una funzione è maggiore di 0. Dopo aver identificato il problema della limitazione, hai a disposizione alcune opzioni per la risoluzione:

  • Richiedi un aumento simultaneo del AWS servizio di assistenza in questa regione.

  • Identificare i problemi di prestazioni della funzione per migliorare la velocità di elaborazione e di conseguenza il throughput.

  • Aumenta la dimensione del batch della funzione, in modo che più messaggi vengano elaborati a ogni chiamata.

Errori nella funzione di elaborazione

Se la funzione di elaborazione genera errori, Lambda restituisce i messaggi alla coda SQS. Lambda impedisce la scalabilità della funzione per evitare errori su larga scala. Le seguenti metriche SQS CloudWatch indicano un problema con l'elaborazione delle code:

operazioni di debug (figura 11)

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 l'elaborazione della funzione Lambda indicano anche che esiste un problema:

operazioni di debug (figura 12)

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 scalare la tua 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 della funzione, le CloudWatch metriche dovrebbero mostrare il ripristino dell'elaborazione:

operazioni di debug (figura 13)

Qui, la metrica del conteggio degli errori scende a zero e la metrica del tasso di successo torna al 100%. Lambda ricomincia a scalare la funzione, come mostrato nel grafico delle 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 l'età del messaggio più vecchio che cresce in modo lineare, 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 la velocità effettiva tramite la funzione Lambda, sono disponibili alcune opzioni:

  • Richiedi al AWS Support un aumento simultaneo della regione specifica.

  • Aumenta la dimensione del batch della funzione, in modo che più messaggi vengano elaborati a ogni chiamata.