Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
Come posso risolvere gli errori di timeout di invocazione di una funzione Lambda?
La mia funzione AWS Lambda scade a intermittenza anche se non ho distribuito modifiche del codice.
Risoluzione
Il timeout di una funzione Lambda può dipendere da diversi motivi. Per risolvere i timeout delle funzioni Lambda, determina prima di tutto la causa del problema. Quindi risolvi il problema a seconda del caso d'uso.
Verifica se la funzione Lambda è scaduta
Per recuperare gli ID di richiesta di qualsiasi invocazione scaduta, cerca nel gruppo di log di Amazon CloudWatch della funzione la frase Task timed out. Quindi utilizza gli ID di richiesta delle relative invocazioni scadute per recuperare i log completi per il timeout di ogni invocazione.
Per istruzioni, consulta Come posso utilizzare CloudWatch Logs per determinare se la mia funzione Lambda è scaduta?
Individua cosa causa il timeout della funzione Lambda
Utilizza uno o più dei seguenti metodi per identificare il punto di errore che ha causato il timeout della funzione:
Controlla i log di CloudWatch per Lambda
Puoi utilizzare Amazon CloudWatch per visualizzare tutti i log generati dal codice della funzione e identificare potenziali problemi. Per istruzioni, consulta Lambda invia automaticamente i log delle funzioni a CloudWatch Logs.
Se la funzione ha restituito una traccia dello stack, il messaggio di errore nella traccia specifica cosa ha causato l'errore.
Importante: Lambda genera automaticamente tre righe di log per ogni invocazione (START, END e REPORT). Queste tre righe sono le uniche che appaiono nei log di CloudWatch della funzione se una delle seguenti condizioni è vera:
- Non ci sono altre registrazioni esplicite configurate nel codice personalizzato della funzione Lambda.
- Il limite di durata della funzione viene raggiunto prima che Lambda possa eseguire il codice della funzione che genera i log.
Se non riesci a determinare la causa dei timeout dai log di CloudWatch, prova una o più delle seguenti soluzioni:
- Verifica che le impostazioni del numero di tentativi e del timeout nell'AWS SDK che hai utilizzato consentano un tempo sufficiente per l'inizializzazione della funzione.
- Aumenta temporaneamente l'impostazione di timeout della funzione Lambda per consentire al codice della funzione di generare i dati di log.
- Aumenta la memoria configurata della funzione per ridurre la latenza della durata dell'invocazione e aumentare la potenza di calcolo.
Per aggiungere altro output di registrazione al codice della funzione, consulta la seguente documentazione per la versione di runtime Lambda utilizzata:
- Registrare e monitorare funzioni Lambda in Node.js
- Registrare e monitorare le funzioni Lambda con Python
- Registrare e monitorare le funzioni Lambda con Ruby
- Registrare e monitorare funzioni Lambda in Java
- Registrare e monitorare le funzioni Lambda con Go
- Registrare e monitorare le funzioni Lambda con C#
- Registrare e monitorare le funzioni Lambda con Powershell
Utilizza AWS X-Ray per individuare eventuali colli di bottiglia che compromettono le prestazioni del codice
Se la funzione Lambda utilizza risorse AWS, microservizi, database o API web HTTP a valle, puoi utilizzare AWS X-Ray per risolvere i problemi di prestazioni del codice.
Per ulteriori informazioni, consulta Visualizza le invocazioni della funzione Lambda utilizzando AWS X-Ray.
Utilizza Lambda Insights per raccogliere metriche a livello di sistema per la tua funzione
Lambda Insights raccoglie metriche a livello di sistema, tra cui metriche relative al tempo di CPU, alla memoria, al disco e alla rete. Raccoglie anche informazioni diagnostiche, tra cui avvii a freddo e arresti dei worker Lambda, per aiutarti a isolare i problemi delle funzioni Lambda.
Nota: l'utilizzo di Lambda Insights comporta addebiti a carico dell'account AWS. Ti viene addebitato il tempo di invocazione consumato dall'estensione Lambda con incrementi di 1 ms.
Utilizza i log di flusso VPC per determinare perché una specifica richiesta di invocazione è stata rifiutata o non è stata instradata
I log di flusso VPC consentono di visualizzare tutto il traffico di rete che fluisce da e verso un Amazon Virtual Private Cloud (Amazon VPC).
Per ulteriori informazioni, consulta Risoluzione dei problemi di rete in Lambda.
Nota: se scegli di configurare i log di flusso VPC, si applicano le seguenti variabili:
- Quando pubblichi i log di flusso in CloudWatch Logs o Amazon Simple Storage Service (Amazon S3), si applicano costi di importazione e archiviazione dei dati per i vended log.
- Quando configuri una funzione Lambda per accedere alle risorse in un Amazon VPC, Lambda assegna la funzione a un'interfaccia di rete elastica. Per identificare il traffico di rete associato alla funzione Lambda, devi individuare l'interfaccia di rete della funzione. Per istruzioni, consulta Perché non riesco a scollegare o eliminare un'interfaccia di rete elastica creata da Lambda?
Utilizza le tracce delle connessioni HTTP per la registrazione dettagliata delle richieste di rete generate dal codice della funzione durante un'invocazione
Per ulteriori informazioni, consulta Logging HTTP wire traces (Registrazione delle tracce delle connessioni HTTP).
Best practice per prevenire i timeout delle funzioni Lambda
Assicurati che la funzione Lambda sia idempotente
Le chiamate API potrebbero 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 prepararti a questi eventi, assicurati che la funzione Lambda sia idempotente.
Per ulteriori informazioni, consulta Come faccio a rendere idempotente la mia funzione Lambda?
Inizializza la logica statica della funzione all'esterno del gestore della funzione
Quando inizializzi una funzione Lambda, Lambda alloca fino a 10 secondi per il completamento della fase Init dell'invocazione. A causa di questo vincolo temporale, è consigliabile eseguire le seguenti azioni al di fuori del gestore della funzione nel codice di inizializzazione:
- Importa librerie e dipendenze
- Definisci la configurazione iniziale
- Inizializza le connessioni ad altri servizi e risorse a valle
L'inizializzazione statica consente di inizializzare queste risorse una volta per sandbox e quindi di riutilizzarle per tutte le invocazioni successive nello stesso ambiente di runtime.
Per ulteriori informazioni, consulta Ottimizzazione dell'inizializzazione statica.
Nota: Lambda rimuove le connessioni inattive alle risorse a valle. Per consentire alla funzione di mantenere una connessione persistente, utilizza la variabile TCP keepAlive associata al runtime Lambda utilizzato.
Verifica che le impostazioni del numero di tentativi e del timeout nell'AWS SDK che utilizzi consentano un tempo sufficiente per l'inizializzazione della funzione
Se hai utilizzato un AWS SDK per effettuare una chiamata API e la chiamata ha esito negativo, l'AWS SDK riprova automaticamente la chiamata. Il numero di tentativi e la durata di ogni tentativo dell'AWS SDK sono determinati da impostazioni che variano tra gli AWS SDK. L'inizializzazione della funzione potrebbe richiedere più tempo di quanto consentito dalle impostazioni predefinite dell'AWS SDK.
Per ulteriori informazioni, consulta Come posso risolvere i problemi relativi ai tentativi e al timeout quando uso AWS SDK per invocare una funzione Lambda?
(Facoltativo) Configura la concorrenza assegnata per la funzione Lambda
La concorrenza assegnata inizializza un numero richiesto di ambienti di runtime in modo che siano pronti a rispondere immediatamente alle invocazioni della funzione. Per configurare la concorrenza assegnata per la funzione, segui le istruzioni in Configurazione della concorrenza assegnata.
Nota: la configurazione della concorrenza assegnata comporta costi per l'account AWS. Puoi configurare la concorrenza assegnata su una versione di una funzione o su un alias della funzione Lambda.
Verifica che la funzione Lambda abbia abbastanza risorse di sistema
La quantità di larghezza di banda di rete e CPU allocata all'invocazione di una funzione Lambda è determinata dalla configurazione della memoria della funzione.
Per ulteriori informazioni, consulta Determinazione dell'impostazione di memoria appropriata per una funzione 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 Understanding container reuse in AWS Lambda (Riutilizzo del container in AWS Lambda).
Verifica che la funzione Lambda sia configurata per operare entro le impostazioni di timeout massime di qualsiasi servizio AWS integrato
Anche se il limite massimo di timeout di invocazione di una funzione Lambda è di 15 minuti, altri servizi AWS potrebbero avere limiti di timeout diversi.
Ad esempio, Gateway Amazon API attende un massimo di 29 secondi per il completamento dell'invocazione del proxy di una funzione Lambda.
Per ulteriori informazioni, consulta Come posso risolvere i problemi di integrazione di Gateway API con funzioni Lambda?Inoltre, consulta Invocare Lambda con eventi di altri servizi AWS.
Verifica che esista un percorso di rete valido verso l'endpoint che la funzione sta cercando di raggiungere
Per rivedere le impostazioni di rete, segui le istruzioni in Come posso risolvere i problemi di timeout di una funzione Lambda presente in un Amazon VPC?
- Argomenti
- ServerlessCompute
- Tag
- AWS Lambda
- Lingua
- Italiano
