Risoluzione dei problemi relativi alle istanze gestite da 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à.

Risoluzione dei problemi relativi alle istanze gestite da Lambda

Problemi di limitazione e scalabilità

Tassi di errore elevati durante lo scale-up

Problema: si verificano errori di limitazione (HTTP 429) quando il traffico aumenta rapidamente.

Causa: le istanze gestite Lambda scalano in modo asincrono in base all'utilizzo delle risorse della CPU e alla saturazione multi-concorrenza. Se il traffico raddoppia più che nel giro di 5 minuti, potresti riscontrare rallentamenti man mano che Lambda ridimensiona le istanze e gli ambienti di esecuzione per soddisfare la domanda.

Soluzione::

  • Modifica l'utilizzo delle risorse target: se il carico di lavoro presenta modelli di traffico prevedibili, imposta un utilizzo delle risorse target inferiore per mantenere un margine di manovra aggiuntivo in caso di picchi di traffico.

  • Capacità di preriscaldamento: per gli aumenti di traffico pianificati, aumenta gradualmente il traffico su un periodo più lungo per consentire alla scalabilità di tenere il passo.

  • Monitora le metriche di scalabilità: tieni traccia delle metriche degli errori di accelerazione per comprendere il motivo delle limitazioni e dei problemi di scalabilità della capacità.

  • Rivedi la configurazione delle funzioni: assicurati che le impostazioni della memoria delle funzioni e della vCPU supportino le esecuzioni simultanee multiple. Se necessario, aumentare la memoria funzionale o l'allocazione della vCPU.

Ridimensionamento lento

Problema: una volta diminuito il traffico, le istanze impiegano molto tempo a ridursi.

Causa: le istanze gestite Lambda si ridimensionano gradualmente per mantenere la disponibilità ed evitare rapidi cambiamenti di capacità che potrebbero influire sulle prestazioni.

Soluzione::

Questo è il comportamento previsto. Lambda riduce le istanze in modo conservativo per garantire la stabilità. Monitora le tue CloudWatch metriche per tenere traccia del numero di istanze in esecuzione.

Problemi di concorrenza

Ambienti di esecuzione con bassa esperienza di concorrenza, limiti

Problema: nonostante la capacità disponibile, le funzioni subiscono delle limitazioni.

Causa: gli ambienti di esecuzione con una concorrenza massima molto bassa possono avere difficoltà a scalare in modo efficace. Le istanze gestite Lambda sono progettate per applicazioni multi-concorrenti.

Soluzione::

  • Aumenta la concorrenza massima: se le chiamate alle funzioni utilizzano pochissima CPU, aumenta l'impostazione della concorrenza massima fino a 64 per vCPU.

  • Ottimizza il codice della funzione: rivedi il codice della funzione per ridurre il consumo di CPU per chiamata e consentire una maggiore concorrenza.

  • Regola la memoria delle funzioni e la vCPU: assicurati che la tua funzione disponga di risorse sufficienti per gestire più chiamate simultanee.

Problemi di sicurezza dei thread (runtime Java)

Problema: la funzione Java produce risultati errati o presenta condizioni di gara sotto carico.

Causa: più thread eseguono il metodo handler contemporaneamente e lo stato condiviso non è thread-safe.

Soluzione::

  • Usa AtomicInteger o per i contatori anziché AtomicLong i tipi primitivi

  • Sostituisci con HashMap ConcurrentHashMap

  • Utilizzare Collections.synchronizedList() per avvolgere ArrayList

  • Usa ThreadLocal per lo stato specifico della richiesta

  • Accedi alla traccia IDs dall'oggetto Lambda Context, non dalle variabili di ambiente

Per una guida dettagliata, consulta la documentazione di Java runtime for Lambda Managed Instances.

Problemi di isolamento dello stato (runtime Node.js)

Problema: la funzione Node.js restituisce dati da richieste diverse o presenta un danneggiamento dei dati.

Causa: le variabili globali sono condivise tra chiamate simultanee sullo stesso thread di lavoro. Quando le operazioni asincrone danno il controllo, altre invocazioni possono modificare lo stato condiviso.

Soluzione::

  • Installa e usa @aws/lambda-invoke-store per tutti gli stati specifici della richiesta

  • Sostituisci le variabili globali con e InvokeStore.set() InvokeStore.get()

  • Usa nomi di file univoci nella /tmp richiesta IDs

  • Accedi alla traccia IDs utilizzando InvokeStore.getXRayTraceId() invece delle variabili di ambiente

Per una guida dettagliata, consulta la documentazione del runtime Node.js per le istanze gestite Lambda.

Conflitti tra file (runtime Python)

Problema: la tua funzione Python legge dati errati dai file in. /tmp

Causa: più processi condividono la /tmp directory. Le scritture simultanee sullo stesso file possono causare il danneggiamento dei dati.

Soluzione::

  • Usa nomi di file univoci con richiesta IDs: /tmp/request_{context.request_id}.txt

  • Usa il blocco dei file con fcntl.flock() per i file condivisi

  • Pulisci i file temporanei con os.remove() dopo l'uso

Per una guida dettagliata, consulta la documentazione del runtime Python per le istanze gestite Lambda.

Problemi di prestazioni

Elevato utilizzo della memoria

Problema: le funzioni presentano un elevato utilizzo della memoria o out-of-memory errori.

Causa: ogni richiesta simultanea in Python viene eseguita in un processo separato con il proprio spazio di memoria. L'utilizzo totale della memoria è uguale alla memoria per processo moltiplicata per i processi simultanei.

Soluzione::

  • MemoryUtilizationMonitora la metrica in CloudWatch

  • Riduci l'MaxConcurrencyimpostazione se l'utilizzo della memoria si avvicina al limite di memoria della funzione

  • Aumenta l'allocazione della memoria funzionale per supportare una maggiore concorrenza

  • Ottimizza l'utilizzo della memoria caricando i dati su richiesta anziché durante l'inizializzazione

Prestazioni incoerenti

Problema: le prestazioni delle funzioni variano in modo significativo tra le chiamate.

Causa: Lambda può selezionare diversi tipi di istanze in base alla disponibilità oppure le funzioni possono essere eseguite su istanze con disponibilità di risorse variabile.

Soluzione::

  • Specificare i tipi di istanze consentiti: se hai requisiti prestazionali specifici, configura i tipi di istanza consentiti nel tuo provider di capacità per limitare i tipi di istanze che Lambda può selezionare.

  • Monitora le metriche a livello di istanza: monitora CPUUtilization e MemoryUtilization a livello di provider di capacità per identificare i vincoli di risorse.

  • Esamina le metriche sulla capacità: verifica vCPUAvailable e MemoryAvailable assicurati che siano disponibili risorse sufficienti sulle tue istanze.

Problemi con i fornitori di capacità

La versione della funzione non riesce a diventare ATTIVA

Problema: la versione della funzione rimane in sospeso dopo la pubblicazione.

Causa: Lambda sta avviando istanze gestite e avviando ambienti di esecuzione. Questo processo richiede tempo, soprattutto per la prima versione della funzione su un nuovo provider di capacità.

Soluzione::

Attendi che Lambda completi il processo di inizializzazione. Lambda avvia tre istanze per impostazione predefinita per la resilienza AZ e avvia tre ambienti di esecuzione prima di contrassegnare la versione della funzione come ATTIVA. Questo richiede in genere diversi minuti.

Impossibile eliminare il provider di capacità

Problema: viene visualizzato un errore quando si tenta di eliminare un provider di capacità.

Causa: non è possibile eliminare un provider di capacità a cui sono associate versioni di funzioni.

Soluzione::

  1. Identifica tutte le versioni delle funzioni utilizzando il provider di capacità con l'ListFunctionVersionsByCapacityProviderAPI.

  2. Elimina o aggiorna le versioni di tali funzioni per rimuovere l'associazione del fornitore di capacità.

  3. Riprova a eliminare il provider di capacità.

Messaggi di errore generici durante la pubblicazione delle funzioni

Problema: durante la pubblicazione delle funzioni vengono visualizzati messaggi di errore generici come «Si è verificato un errore interno durante la pubblicazione».

Soluzione::

  • Verifica le autorizzazioni IAM: assicurati di disporre dell'lambda:PassCapacityProviderautorizzazione per il provider di capacità che stai cercando di utilizzare.

  • Verifica la configurazione del provider di capacità: conferma che il tuo fornitore di capacità sia nello stato ATTIVO utilizzando l'GetCapacityProviderAPI.

  • Rivedi la configurazione del VPC: assicurati che le sottoreti e i gruppi di sicurezza specificati nel tuo provider di capacità siano configurati e accessibili correttamente.

  • Controlla AWS CloudTrail i log: consulta i CloudTrail log per informazioni dettagliate sugli errori relativi all'operazione non riuscita.

Problemi di monitoraggio e osservabilità

Metriche mancanti CloudWatch

Problema: non vedi le metriche previste CloudWatch per il tuo capacity provider o per le tue funzioni.

Causa: le metriche vengono pubblicate a intervalli di 5 minuti. I nuovi fornitori di capacità o le nuove funzioni potrebbero non disporre di metriche immediatamente disponibili.

Soluzione::

Attendi almeno 5-10 minuti dopo la pubblicazione della versione di una funzione prima di aspettarti che le metriche vengano visualizzate in. CloudWatch Verifica di utilizzare lo spazio dei nomi (AWS/Lambda) e le dimensioni (CapacityProviderName, o) corretti. FunctionName InstanceType

Impossibile trovare i log CloudWatch

Problema: la funzione viene eseguita correttamente, ma non è possibile trovare i log in Logs. CloudWatch

Causa: le istanze gestite Lambda vengono eseguite nel tuo VPC e richiedono una connettività di rete per inviare i log ai log. CloudWatch Senza una corretta configurazione della connettività VPC, le funzioni non possono raggiungere l'endpoint del servizio CloudWatch Logs.

Soluzione::

Configura la connettività VPC per consentire alle tue funzioni di inviare log a Logs. CloudWatch Sono disponibili tre opzioni:

Opzione 1: endpoint VPC per CloudWatch registri (consigliato per la produzione)

  1. Apri la console Amazon VPC all'indirizzo console.aws.amazon.com/vpc/.

  2. Nel pannello di navigazione, seleziona Endpoints (Endpoint).

  3. Seleziona Crea endpoint.

  4. Per Service category (Categoria servizio), scegli AWS services.

  5. Per Nome del servizio, seleziona (sostituisci con la tua regione). com.amazonaws.region.logs region AWS

  6. Per VPC, seleziona il VPC utilizzato dal tuo provider di capacità.

  7. Per le sottoreti, seleziona le sottoreti in cui desideri creare interfacce di rete endpoint. Per un'elevata disponibilità, seleziona le sottoreti in più zone di disponibilità.

  8. Per i gruppi di sicurezza, seleziona i gruppi di sicurezza che consentono il traffico HTTPS in entrata (porta 443) dal gruppo di sicurezza della funzione.

  9. Abilita il DNS privato per l'endpoint.

  10. Seleziona Crea endpoint.

Opzione 2: sottorete pubblica con gateway Internet

Se il tuo fornitore di capacità utilizza sottoreti pubbliche, assicurati che:

  1. Un gateway Internet è collegato al tuo VPC

  2. La tabella delle rotte indirizza 0.0.0.0/0 il traffico verso il gateway Internet

  3. I gruppi di sicurezza consentono il traffico HTTPS in uscita sulla porta 443

Opzione 3: sottorete privata con gateway NAT

Se il tuo fornitore di capacità utilizza sottoreti private, assicurati di:

  1. Un gateway NAT esiste in una sottorete pubblica

  2. La tabella di routing della sottorete privata indirizza il 0.0.0.0/0 traffico verso il gateway NAT

  3. La tabella di routing della sottorete pubblica indirizza il 0.0.0.0/0 traffico verso un gateway Internet

  4. I gruppi di sicurezza consentono il traffico HTTPS in uscita sulla porta 443

Per una guida dettagliata sulle opzioni di connettività VPC, consulta Connettività VPC per istanze gestite Lambda.

Difficoltà a correlare i log delle richieste simultanee

Problema: i log di richieste diverse sono interlacciati, il che rende difficile tracciare le singole richieste.

Causa: l'interlacciamento dei log è un comportamento previsto e standard nei sistemi multi-concorrenti.

Soluzione::

  • Usa la registrazione strutturata con formato JSON: includi l'ID della richiesta in tutte le istruzioni di registro

  • Java: usa Log4j con ThreadContext per includere automaticamente l'ID della richiesta

  • Node.js: da utilizzare console.log() con la formattazione JSON e includere InvokeStore.getRequestId()

  • Python: usa il modulo di registrazione standard con formattazione JSON e includi context.request_id

Per una guida dettagliata, consulta le pagine di documentazione specifiche del runtime.

Ottenere ulteriore assistenza

Se continui a riscontrare problemi dopo aver provato queste soluzioni:

  1. Esamina CloudWatch le metriche: verifica le metriche del provider di capacità e dell'ambiente di esecuzione per identificare i vincoli di risorse o i problemi di scalabilità.

  2. Controlla AWS CloudTrail i log: consulta i CloudTrail log per informazioni dettagliate su chiamate ed errori delle API.

  3. Contatta l' AWS assistenza: se non riesci a risolvere il problema, contatta l' AWS assistenza per fornire dettagli sulla configurazione del tuo provider di capacità, sulla configurazione delle funzioni e sui messaggi di errore specifici che stai riscontrando.

Fasi successive