Salta al contenuto

Come posso risolvere l'errore "native lambda error:InvalidSignatureException: Signature expired" (errore lambda nativo:InvalidSignatureException: firma scaduta) quando uso un AWS SDK per invocare una funzione Lambda?

3 minuti di lettura
0

Quando uso un AWS SDK per invocare una funzione AWS Lambda , la funzione restituisce un errore di firma scaduta.

Breve descrizione

Quando l'ora del client e l'ora del server non corrispondono, la firma Lambda scade e viene visualizzato un messaggio di errore simile al seguente:

"Error: native lambda error:InvalidSignatureException: Signature expired: 20230118T161739Z is now earlier than 20230118T161739Z (20190318T162239Z - 5 min.)" (Errore: errore lambda nativo:InvalidSignatureException: firma scaduta: 20230118T161739Z ora precede 20230118T161739Z (20190318T162239Z - 5 min.))

Una richiesta API deve pervenire ad AWS entro 5 minuti dal timestamp indicato nella richiesta, altrimenti AWS rifiuta la richiesta. In alcuni scenari, è possibile modificare l'ora del client in modo che corrisponda all'ora del server.

Risoluzione

Quando usi un AWS SDK per invocare in modo sincrono una funzione Lambda, la connessione dura fino alla restituzione della risposta. Per impostazione predefinita, l'SDK Node.js consente 50 connessioni. Se viene raggiunta la quota di connessioni, l'SDK mette in coda la richiesta localmente finché non è disponibile una connessione. Se viene visualizzato l'errore di firma scaduta e le condizioni seguenti sono vere, potrebbe essere stata raggiunta la quota di connessioni:

  • La funzione Lambda non viene limitata.
  • L'ora del client è corretta.
  • (Solo SDK Node.js) Hai impostato l'opzione correctClockSkew:true quando hai creato il client in modo che l'ora venga corretta quando invochi la funzione.
  • Hai invocato la funzione Lambda con una frequenza elevata oppure hai invocato la funzione Lambda con una frequenza elevata e l'invocazione viene eseguita per un periodo di tempo prolungato.

L'SDK firma la richiesta e quindi la mette in coda. Se la coda diventa troppo grande e la richiesta resta in sospeso per più di 5 minuti, la firma scade. Eventuali richieste aggiuntive hanno esito negativo perché la firma è scaduta.

Se non ti occorre la risposta all'invocazione, usa l'invocazione asincrona. L'invocazione asincrona consente all'SDK di usare la connessione solo per invocare la richiesta, senza attendere una risposta.

Puoi anche usare Top Level Await (TLA) nella tua applicazione. Usa TLA se effettui chiamate API esternamente a un gestore e ricevi eccezioni SignatureDoesNotMatch quando usi l'AWS SDK v3 Node.js.

Oppure aumenta il numero massimo di connessioni consentite dall'SDK.

Nota: quando aggiungi connessioni, la funzione Lambda aumenta la frequenza delle invocazioni e può causare una limitazione.

Informazioni correlate

Monitoraggio e risoluzione dei problemi delle applicazioni Lambda

Come posso risolvere gli errori di timeout delle chiamate delle funzioni Lambda?

Come posso determinare se la mia funzione Lambda sta scadendo?

AWS UFFICIALEAggiornata un anno fa