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

8 minuti di lettura
0

La mia funzione AWS Lambda va in timeout in modo intermittente, anche se non ho implementato alcuna modifica al codice. Come posso risolvere e prevenire gli errori di timeout di chiamata della funzione 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 funzione Lambda vada in timeout

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

Per istruzioni, consulta la sezione In che modo posso a determinare se la mia funzione Lambda va in timeout?

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 i tuoi file di log CloudWatch per Lambda

Puoi utilizzare Amazon CloudWatch per visualizzare tutti i log generati dal codice della funzione e identificare potenziali problemi. Per istruzioni, consulta Accesso ai file di log Amazon CloudWatch 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 log per ogni chiamata (START, END e REPORT). Queste tre righe sono le uniche che appaiono nei log 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 log.

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

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 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:

  • I costi di importazione e archiviazione dei dati per i log vended si applicano quando si pubblicano i flussi di log su:
  • CloudWatch Logs
  • Amazon Simple Storage Service (Amazon S3)

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 funzione Lambda sia idempotente

Le chiamate API possono richiedere più tempo del previsto a causa di problemi di rete transitori. 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 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 iniziale
  • Inizializza le connessioni ad altri servizi e risorse a valle

Questa inizializzazione statica consente a queste risorse di essere inizializzate una volta per ambiente di sperimentazione (sandbox) e quindi riutilizzate per tutte le chiamate future nello stesso ambiente di runtime.

Per ulteriori informazioni, consulta Ottimizzazione dell'inizializzazione statica. Inoltre, Indisponibilità a valle nella Guida per operatori Lambda e Codice funzione nella 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 In che modo posso risolvere i problemi di timeout e di ripetizione 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, segui le istruzioni nella sezione Configurazione della simultaneità fornita.

Nota: La configurazione della simultaneità fornita comporta addebiti al 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 Memoria e potenza di elaborazione nella 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 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, Gateway Amazon API richiede un massimo di 29 secondi per il completamento di una chiamata proxy della funzione Lambda. Per ulteriori informazioni, consulta la sezione In che modo posso risolvere gli errori che vengono restituiti al momento dell'integrazione di Gateway API con una funzione Lambda? Inoltre, consulta Utilizzo 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 Come si risolvono i problemi di timeout con una funzione Lambda presente in un Amazon VPC?


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa