Come posso risolvere gli errori di timeout di chiamata della funzione Lambda?

Ultimo aggiornamento: 11/01/2022

La mia funzione AWS Lambda scade in modo intermittente, anche se non ho implementato alcuna modifica al codice. Come posso risolvere i problemi di timeout delle funzioni Lambda e come posso prevenire i timeout delle funzioni Lambda?

Risoluzione

Le funzioni Lambda possono scadere per una serie di motivi. Per risolvere i problemi relativi ai timeout delle funzioni Lambda, determina innanzitutto la causa del problema utilizzando uno dei servizi e delle caratteristiche AWS elencati in questo articolo. Quindi, risolvi il problema in base al tuo caso d'uso.

Per evitare il timeout della funzione Lambda, consulta la sezione Best practices for preventing Lambda function timeouts (Best practice per prevenire i timeout delle funzioni Lambda) di questo articolo.

Verifica che la tua funzione Lambda sia scaduta

Recupera gli ID di richiesta di qualsiasi chiamata di timeout cercando nel gruppo di registro Amazon CloudWatch della funzione la frase Task timed out. Quindi, utilizza gli ID di richiesta delle chiamate di timeout associate per recuperare i registri completi per ogni timeout di invocazione.

Per le istruzioni, consulta la sezione How do I determine if my Lambda function is timing out? (In che modo posso a determinare se la mia funzione Lambda è scaduta?)

Identifica cosa causa il timeout della tua funzione Lambda

Utilizza uno o più dei seguenti metodi per identificare il punto di errore che causa il timeout della funzione:

Esamina Amazon CloudWatch Logs per Lambda

Puoi utilizzare CloudWatch per visualizzare tutti i registri generati dal codice della funzione e identificare potenziali problemi. Per le istruzioni, consulta Accesso ad Amazon CloudWatch Logs per AWS Lambda.

Se la tua funzione restituisce una traccia della pila, il messaggio di errore nella traccia della pila specifica cosa sta causando l'errore.

Importante: Lambda genera automaticamente tre righe di registro per ogni chiamata (START, END e REPORT). Queste tre righe sono le uniche che appaiono nei registri di CloudWatch della tua funzione se una delle seguenti condizioni è vera:

  • Non ci sono altri registri espliciti configurati nel codice personalizzato della funzione Lambda.
  • Il limite di durata della funzione viene raggiunto prima che Lambda possa eseguire il codice della funzione che emette i registri.

Se non riesci a determinare la causa dei timeout dopo aver esaminato i registri, prova a eseguire una o più delle seguenti operazioni:

Per aggiungere altro output di registrazione al codice della tua funzione, consulta la seguente documentazione per il tempo di esecuzione Lambda che stai utilizzando:

Usa AWS X-Ray per identificare eventuali colli di bottiglia nelle prestazioni del codice

Se la funzione Lambda utilizza risorse AWS a valle, microservizi, database o API Web HTTP, puoi utilizzare AWS X-Ray per risolvere problemi di prestazioni del codice.

Per ulteriori informazioni, consulta Utilizzo di AWS Lambda con AWS X-Ray.

Utilizza Lambda Insights per raccogliere parametri a livello di sistema per la tua funzione

Lambda Insights raccoglie parametri a livello di sistema, tra cui tempo CPU, memoria, disco e parametri di rete. Raccoglie anche informazioni diagnostiche, tra cui avvii a freddo e arresti dei worker Lambda per aiutarti a isolare problemi con le tue funzioni Lambda.

Per ulteriori informazioni, consulta la sezione Utilizzo di Lambda Insights.

Nota: L'utilizzo di Lambda Insights comporta addebiti per il tuo account AWS. Ti viene addebitato il tempo di chiamata consumato dall'estensione Lambda in incrementi di 1 ms.

Utilizza i flussi di log VPC per determinare perché una richiesta di chiamata specifica è stata negata o non è stata instradata

I flussi di log VPC ti consentono di visualizzare tutto il traffico di rete che scorre da e verso un Amazon Virtual Private Cloud (Amazon VPC).

Per ulteriori informazioni, consulta la sezione Risoluzione dei problemi di rete in Lambda.

Nota: Tieni presente quanto segue se scegli di configurare flussi di log VPC:

Utilizza le wire trace HTTP per la registrazione dettagliata delle richieste di rete generate dal codice della funzione durante una chiamata

Per ulteriori informazioni, consulta la sezione Registrazione wire trace HTTP.

Best practice per prevenire i timeout delle funzioni Lambda

Assicurati che la tua funzione Lambda sia idempotente

Le chiamate API possono richiedere più tempo del previsto quando si verificano problemi di connessione di rete. I problemi di rete possono anche causare nuovi tentativi e richieste API duplicate. Per essere pronti in questi casi, assicurati che la tua funzione Lambda sia idempotente.

Per ulteriori informazioni, consulta la sezione How do I make my Lambda function idempotent? (In che modo posso rendere la mia funzione Lambda idempotente?)

Inizializza la logica statica della tua funzione al di fuori del gestore di funzioni

Quando si inizializza una funzione Lambda, Lambda alloca fino a 10 secondi per il completamento della fase di inizializzazione della chiamata. A causa di questo vincolo temporale, è consigliabile eseguire le seguenti operazioni al di fuori del gestore di funzioni nel codice di inizializzazione:

  • Importa librerie e dipendenze
  • Imposta la configurazione
  • Inizializza le connessioni ad altri servizi e risorse a valle

Questa inizializzazione statica consente a queste risorse di essere inizializzate una volta per sandbox e quindi riutilizzate per tutte le chiamate future nell'ambiente di runtime.

Per ulteriori informazioni, consulta Ottimizzazione dell'inizializzazione statica. Anche l'indisponibilità a valle nella Lambda Operator Guide (Guida per operatori Lambda) e nel codice funzione nella Lambda Developer Guide (Guida per sviluppatori Lambda).

Nota: Lambda rimuove le connessioni inattive alle risorse a valle. Per consentire alla tua funzione di mantenere una connessione persistente, usa la variabile tcp_keepalive associata al tempo di esecuzione Lambda che stai utilizzando.

Verifica che le impostazioni di conteggio dei tentativi e timeout nell'SDK AWS che stai utilizzando consentano un tempo sufficiente per l'inizializzazione della funzione

Se effettui una chiamata API utilizzando un SDK AWS e la chiamata non riesce, l'SDK AWS ritenta automaticamente la chiamata. Il numero di tentativi di SDK AWS e la durata sono determinati da impostazioni che variano in ciascun SDK AWS. L'inizializzazione della funzione potrebbe richiedere più tempo di quanto consentito dalle impostazioni SDK AWS predefinite.

Per ulteriori informazioni, consulta la sezione How do I troubleshoot retry and timeout issues when invoking a Lambda function using an AWS SDK? (In che modo posso risolvere i problemi di timeout e di ripetizione tentativi quando invoco una funzione Lambda attraverso un SDK AWS)?

(Facoltativo) Configurare la simultaneità fornita per la funzione Lambda

La simultaneità fornita inizializza un numero richiesto di ambienti di runtime in modo che siano pronti a rispondere immediatamente alle chiamate della funzione. Per impostare la simultaneità fornita per la funzione, seguire le istruzioni nella sezione Configurazione della simultaneità fornita.

Per ulteriori informazioni, consulta la sezione Managing concurrency for a Lambda function (Gestione della simultaneità per una funzione Lambda).

Nota: La configurazione della simultaneità fornita comporta addebiti per il tuo account AWS. È possibile configurare la simultaneità fornita su una versione di una funzione o su un alias di funzione Lambda.

Verifica che la tua funzione Lambda disponga di risorse di sistema sufficienti

La quantità di larghezza di banda di rete e CPU allocata a una chiamata di funzione Lambda è determinata dalla configurazione della memoria della funzione.

Per ulteriori informazioni, consulta la sezione Memory and computing power (Memoria e potenza di calcolo) nella Lambda Operator Guide (Guida per operatori Lambda).

Assicurati che tutti i processi in background utilizzati dalla funzione Lambda siano completi prima che il gestore della funzione restituisca una stringa

Per ulteriori informazioni, consulta la sezione Understanding container reuse in AWS Lambda (Concetti relativi al riutilizzo dei container in AWS Lambda).

Verifica che la funzione Lambda sia configurata per funzionare entro le impostazioni di timeout massimo di qualsiasi servizio AWS integrato

Anche se il limite massimo di timeout di chiamata di una funzione Lambda è di 15 minuti, altri servizi AWS potrebbero avere limiti di timeout diversi.

Ad esempio, Amazon API Gateway richiede un massimo di 29 secondi per il completamento di una chiamata proxy della funzione Lambda. Per ulteriori informazioni, consulta la sezione How can I resolve the errors that I receive when I integrate API Gateway with a Lambda function (In che modo posso risolvere gli errori che mi vengono restituiti al momento dell'integrazione di API Gateway con una funzione Lambda?) Consulta anche Uso di AWS Lambda con altri servizi.

Verifica che ci sia un percorso di rete valido per l'endpoint che la tua funzione sta tentando di raggiungere

Per rivedere le impostazioni di rete, segui le istruzioni nella sezione How do I troubleshoot timeout issues with a Lambda function that's in an Amazon VPC (Come si risolvono i problemi di timeout con una funzione Lambda presente in un Amazon VPC?)


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?