Quando utilizzo un AWS SDK per invocare una funzione AWS Lambda , la funzione restituisce un errore "Signature expired".
Breve descrizione
Quando l'ora del client e l'ora del server non corrispondono, la firma Lambda scade e ricevi un messaggio di errore simile al seguente:
"Error: native lambda error:InvalidSignatureException: Signature expired: 20230118T161739Z is now earlier than 20230118T161739Z (20190318T162239Z - 5 min.)"
Una richiesta API deve pervenire ad AWS entro 5 minuti dal timestamp indicato nella richiesta, altrimenti AWS la nega. In determinati casi, puoi modificare l'ora del client in modo che corrisponda all'ora del server.
Risoluzione
Quando utilizzi 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 raggiungi la quota di connessioni, l'SDK mette in coda la richiesta localmente finché non è disponibile una connessione. Se ricevi l'errore "Signature expired" e le condizioni seguenti sono vere, potresti aver raggiunto la quota di connessioni:
- La funzione Lambda non è soggetta a limitazione (della larghezza di banda della rete).
- 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 a una frequenza elevata e l'invocazione viene eseguita per un tempo prolungato.
L'SDK firma la richiesta e 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, utilizza l'invocazione asincrona. L'invocazione asincrona consente all'SDK di utilizzare la connessione solo per invocare la richiesta, senza attendere una risposta.
Puoi anche utilizza Top Level Await (TLA) nell'applicazione. Utilizza TLA se effettui chiamate API all'esterno di un gestore e ricevi eccezioni SignatureDoesNotMatch quando utilizzi 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 (della larghezza di banda della rete).
Informazioni correlate
Monitoraggio, debug e risoluzione dei problemi delle funzioni Lambda
Come posso risolvere gli errori di timeout di invocazione di una funzione Lambda?
Come posso utilizzare CloudWatch Logs per determinare se la mia funzione Lambda è scaduta?