Come faccio a risolvere la limitazione della funzione Lambda che restituisce gli errori "Rate exceeded" e 429 "TooManyRequestsException"?
La mia funzione AWS Lambda genera errori "Rate exceeded" e 429 "TooManyRequestsException".
Soluzione
Le funzioni Lambda sono talvolta limitate per proteggere le risorse e le applicazioni downstream. Anche seLambda si dimensiona automaticamente per adattarsi al traffico in entrata, la funzione può comunque essere limitata per vari motivi.
Per risolvere i problemi di limitazione di Lambda, inclusi gli errori Rate exceeded e TooManyRequestsException, esamina i passaggi seguenti.
Verificare quale risorsa è limitata
Gli errori di limitazione potrebbero non provenire dalla funzione Lambda. Le limitazioni possono verificarsi anche nelle chiamate API durante la chiamata della funzione.
Per confermare quale risorsa è limitata, controlla le seguenti risorse.
Controlla i tuoi file di log Amazon CloudWatch per verificare la presenza di errori di limitazione e l'assenza di punti dati corrispondenti nelle metriche sulle limitazioni di Lambda
Se non sono presenti metriche sullelimitazioni di Lambda, la limitazione si verifica sulle chiamate API nel codice della funzione Lambda.
Controlla il tuo codice funzione per eventuali chiamate API limitate
Se determinate chiamate API sono limitate, assicurati di utilizzare il backoff esponenziale nel codice per riprovare le chiamate API.
Nota: Se hai bisogno di una quota di transazioni al secondo (TPS) più elevata per una chiamata API, richiedi un aumento della quota di servizio. Non tutte le quote sono regolabili.
Controlla i parametri di concorrenza della tua funzione
Esamina le tue metriche Lambda in Amazon CloudWatch
Controlla la metrica ConcurrentExecutions relativa alla tua funzione nella regione AWS in cui vedi una limitazione.
Confronta la metrica ConcurrentExecutions con la metrica limitazioni per lo stesso timestamp
Visualizza la statistica Maximum per ConcurrentExecutions e la statistica Sum per limitazioni. Verifica se il numero massimo di ConcurrentExecutions è vicino alla quota di concorrenza a livello di account nella regione, insieme ai punti dati corrispondenti nel grafico limitazioni.
Verifica se stai superando la quota di concorrenza burst per una regione AWS specifica
Nella pagina delle metriche di Lambda nella console CloudWatch, riduci l'intervallo di tempo del grafico a 1 minuto. Se sei limitato dal dimensionamento burst, sul grafico vedrai un picco di limitazioni che corrisponde a uno schema a gradini di ConcurrentExecutions.
Nota: Per aggirare i limiti di concorrenza tra burst, puoi configurare la concorrenza fornita.
Controlla i picchi nelle metriche di durata relative alla tua funzione
La concorrenza dipende dalla durata della funzione. Se il completamento del codice della funzione richiede troppo tempo, è possibile che le risorse di elaborazione non siano sufficienti.
Prova ad aumentare l'impostazione della memoria della funzione. Quindi, utilizza AWS X-Ray e i log Amazon CloudWatch per isolare la causa degli aumenti di durata.
Nota: La modifica dell'impostazione della memoria può influire sui costi sostenuti per il tempo di esecuzione.
Puoi connettere la funzione a un Amazon Virtual Private Cloud (Amazon VPC). Se la funzione si trova in un Amazon VPC, consulta Come posso concedere l'accesso a Internet a una funzione Lambda connessa a un Amazon VPC?
Verifica l'aumento delle Metriche di errore per la tua funzione
Un aumento degli errori può portare a nuovi tentativi e causare un aumento complessivo delle chiamate. Un aumento delle chiamate può portare a un aumento della simultaneità. Usa i log CloudWatch per identificare ed eliminare gli errori e fare in modo che il codice della tua funzione gestisca le eccezioni.
Nota: La funzione può anche essere limitata in base alle richieste di chiamata per regione (richieste al secondo), pari a 10 volte la quota di esecuzioni simultanee.
Configurazione della concorrenza riservata
Conferma di averconfigurato la concorrenza riservata sulla tua funzione
Usa la console Lambda per verificare l'impostazione della concorrenza riservata. Se la concorrenza riservata non è configurata, la funzione utilizza la concorrenza non riservata. Quando le chiamate con funzioni superano la concorrenza non riservata, si verifica una limitazione.
Nota: Se hai configurato una funzione con zero concorrenza riservata, la funzione viene limitata perché non è in grado di elaborare alcun evento. Assicurati di aumentare il valore a un numero maggiore di zero.
Esamina la statistica massima in CloudWatch relativa alla tua funzione
Verifica se la metrica della funzione raggiunge il valore massimo per la metrica ConcurrentExecutions in qualsiasi momento.
Aumenta la concorrenza riservata per la tua funzione a un valore di concorrenza che impedisca alla funzione di subire limitazioni
Usa la console Lambda per modificare l'impostazione o chiama l'API PutFunctionConcurrency.
Usa il backoff esponenziale nella tua app
Per riprovare le richieste limitate, è consigliabile utilizzare il backoff esponenziale nell'applicazione che chiama la funzione Lambda.
Usa una coda DLQ
Per le fonti di eventi asincrone, come Amazon Simple Storage Service (Amazon S3) e Amazon EventBridge, configura la tua funzione con una coda DLQ. Quindi, verifica la gestione degli errori per la configurazione delle chiamate asincrone. Il DLQ rileva tutti gli eventi che vengono ignorati a causa delle continue limitazioni ed è in grado di proteggere i dati in caso di limitazioni significative.
Nota: Per le sorgenti di eventi Amazon Simple Queue Service (Amazon SQS), devi configurare il DLQ sulla coda Amazon SQS.
Richiedi un aumento della quota di servizio
Se il carico di lavoro richiede una quota di servizio più elevata per le esecuzioni simultanee, utilizza la console delle quote di servizio per richiedere un aumento della quota di servizio.
Informazioni correlate
Best practice per lavorare con le funzioni AWS Lambda
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- In che modo posso risolvere i problemi relativi a ReportBatchItemFailures della funzione Lambda SQS?AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa