Come posso risolvere gli errori che ricevo quando integro API Gateway con una funzione Lambda?

7 minuti di lettura
0

Desidero risolvere gli errori che ricevo quando integro Gateway Amazon API con una funzione AWS Lambda.

Risoluzione

Attiva la registrazione per l'API e la fase

1.    Nella console API Gateway, trova lo Stage Editor per la tua API.

2.    Nel riquadro Stage Editor, seleziona la scheda Logs/Tracing.

3.    Nella scheda Logs/Tracing, per le Impostazioni di CloudWatch, procedi come segue per attivare la registrazione:
Seleziona la casella di controllo Abilita i file di log di CloudWatch.
Per Livello di log, scegli INFO per generare i log per tutte le richieste. Oppure, scegli ERROR per generare i log solo per le richieste alla tua API che generano un errore.
Per le REST API, seleziona la casella di controllo Registra i dati completi delle richieste/risposte. In alternativa, per le API WebSocket, seleziona la casella di controllo Registra i dati completi dei messaggi.

4.    In Registrazione personalizzata degli accessi, procedi come segue per attivare la registrazione degli accessi:
Seleziona la casella di controllo Abilita la registrazione degli accessi.
Per ARN di destinazione del log degli accessi, inserisci l'Amazon Resource Name (ARN) di un gruppo di log di CloudWatch o di uno stream Amazon Kinesis Data Firehose.
Inserisci un Formato di log. Come modello, scegli CLF, JSON, XML o CSV per visualizzare un esempio in quel formato.

5.    Scegli Salva modifiche.
Nota: la console non conferma che le impostazioni siano state salvate.

Per ulteriori informazioni, consulta Configurazione della registrazione dei log delle API di CloudWatch utilizzando la console API Gateway.

Determina i tipi di integrazione, verifica gli errori e intraprendi i passaggi successivi

1.    Determina se un'integrazione proxy Lambda o un'integrazione personalizzata Lambda è configurata in API Gateway. È possibile verificare il tipo di integrazione esaminando l'output della funzione Lambda o eseguendo il comando get-integration.

2.    Verifica che gli errori in API Gateway corrispondano agli errori in Lambda. Esegui la seguente query di CloudWatch Logs Insights per trovare un codice di stato di errore durante un periodo di tempo specificato:

parse @message '(*) *' as reqId, message
    | filter message like /Method completed with status: \d\d\d/
    | parse message 'Method completed with status: *' as status
    | filter status != 200
    | sort @timestamp asc
    | limit 50

Quindi, esegui la seguente query di CloudWatch Logs Insights per cercare i log degli errori Lambda nello stesso intervallo di tempo:

fields @timestamp, @message
    | filter @message like /(?i)(Exception|error|fail)/
    | sort @timestamp desc
    | limit 20

3.    In base al tipo di errore che identifichi nei tuoi registri, scegli una delle seguenti opzioni:

Se ricevi il seguente errore, completa i passaggi nella sezione Risoluzione dei problemi di concorrenza.

(XXXXX) Lambda invocation failed with status: 429. Lambda request id: XXXXXXXXXX
(XXXXX) Execution failed due to configuration error: Rate Exceeded.
(XXXXX) Method completed with status: 500

Se ricevi uno dei seguenti errori, completa i passaggi nella sezione Risolvi i problemi di timeout.

Per un'integrazione personalizzata Lambda:

< 29 sec:
(XXXXX) Method response body after transformations: {"errorMessage":"2019-08-14T02:45:14.133Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Per un'integrazione con proxy Lambda:

< 29 sec:
(XXXXX) Endpoint response body before transformations: {"errorMessage":"2019-08-14T02:50:25.865Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after xx.01 seconds"}
> 29 sec:
(XXXXX) Execution failed due to a timeout error

Se ricevi il seguente errore, completa i passaggi nella sezione Risolvi gli errori della funzione.

(XXXXX) Execution failed due to configuration error: Malformed Lambda proxy response
(XXXXX) Method response body after transformations: {"errorMessage": "Syntax error in module 'lambda_function'"}

Risolvi i problemi di concorrenza

Riceverai 429 errori di limitazione o 500 errori quando arrivano richieste aggiuntive da API Gateway più velocemente di quanto la tua funzione Lambda possa scalare.

Per risolvere questi errori, analizza le metriche Count(API Gateway), Limitazioni (Lambda) e ConcurrentExecutions (Lambda) in CloudWatch. Considera quanto segue:

  • Conteggio (API Gateway) è il numero totale di richieste API in un determinato periodo.
  • Limitazioni (Lambda) sono il numero di richieste di chiamata che vengono limitate. Quando tutte le istanze di funzione stanno elaborando richieste e non è disponibile alcuna concorrenza per la scalabilità, Lambda rifiuta le richieste aggiuntive con l'errore TooManyRequestsException. Le richieste limitate e altri errori di chiamata non contano come invocazioni o errori.
  • ConcurrentExecutions (Lambda) è il numero di istanze di funzioni che elaborano eventi. Se questo numero raggiunge la quota di esecuzioni simultanee per la regione AWS, le richieste di invocazione aggiuntive vengono limitate. Le richieste di chiamata vengono inoltre limitate quando il numero di istanze della funzione raggiunge il limite di concorrenza riservato configurato sulla funzione.

**Nota:**Per ulteriori informazioni, consulta Metriche di API Gateway e Utilizzo delle metriche delle funzioni Lambda.

Se impostate la concorrenza di riserva nella funzione Lambda, imposta un valore di concorrenza di riserva più elevato per la funzione Lambda. Oppure, rimuovi il valore di concorrenza inverso dalla funzione Lambda. La funzione attinge quindi dal pool di esecuzioni simultanee senza riserve.

Se non imposti la concorrenza di riserva nella funzione Lambda, controlla la metrica ConcurrentExecutions per scoprire l'utilizzo. Per ulteriori informazioni, consulta Quote Lambda.

Risolvi i problemi di timeout

Il timeout di integrazione è di 29 secondi (un limite rigido) per tutte le integrazioni di API Gateway. Quando si crea un'API di API Gateway con integrazione Lambda, è possibile che si verifichino due scenari. Gli scenari si verificano quando il timeout è inferiore a 29 secondi o superiore a 29 secondi.

Se il timeout della funzione Lambda è inferiore a 29 secondi, controlla i log Lambda per esaminare il problema. Se la funzione Lambda deve essere eseguita dopo 29 secondi, valuta la possibilità di richiamare la funzione Lambda in modo asincrono.

Per l'integrazione personalizzata di Lambda, completa i seguenti passaggi:

1.    Apri la console API Gateway.

2.    Dal riquadro di navigazione, scegli API, quindi scegli la tua API.

3.    Scegli Risorse, quindi scegli il tuo metodo.

4.    Scegli Richiesta di integrazione.

5.    Scegli Richiesta del metodo.

6.    Espandi le intestazioni delle richieste HTTP.

7.    Scegli Aggiungi intestazione.

8.    In Nome, inserisci un nome per la tua policy. Ad esempio: X-Amz-Invocation-Type

Importante: devi mappare l'intestazione da 'Evento' (sono necessarie virgolette singole).

Per l'integrazione con proxy Lambda:

Utilizza due funzioni Lambda: la funzione A e la funzione B. API Gateway richiama prima la funzione A in modo sincrono. Quindi, la funzione A richiama la funzione B in modo asincrono. La funzione A può restituire una risposta corretta a API Gateway quando la funzione B viene richiamata in modo asincrono.

Se utilizzi l'integrazione proxy Lambda, valuta la possibilità di cambiarla con un'integrazione personalizzata. Tuttavia, è necessario configurare i modelli di mappatura per trasformare la richiesta/risposta nel formato desiderato. Per ulteriori informazioni, consulta Configurazione della chiamata asincrona della funzione Lambda back-end.

Nota: Poiché una funzione Lambda asincrona viene eseguita in background, il client non può ricevere dati direttamente da una funzione Lambda. È necessario disporre di un database intermedio per archiviare qualsiasi dato persistente.

Risolvere gli errori di funzione

Se ricevi un errore di funzione quando richiami l'API, controlla la funzione Lambda per eventuali errori di sintassi. Questo errore viene visualizzato anche se la funzione Lambda non restituisce un oggetto JSON valido previsto da API Gateway per le integrazioni proxy.

Per risolvere questo errore, completa i passaggi indicati nella sezione Attiva la registrazione per l'API e la fase.


Informazioni correlate

Gestione degli errori Lambda standard in API Gateway

Gestione degli errori Lambda personalizzati in API Gateway