Quando richiamo la mia funzione AWS Lambda utilizzando un SDK AWS, la funzione restituisce un errore di firma scaduto.
Breve descrizione
Le firme Lambda scadute si verificano quando l'ora del client e l'ora del server non corrispondono, in modo simile al seguente errore:
"Error: native lambda error:InvalidSignatureException: Signature expired: 20230118T161739Z is now earlier than 20230118T161739Z (20190318T162239Z - 5 min.)"
Una richiesta API deve pervenire ad AWS entro cinque minuti dal timestamp indicato nella richiesta, altrimenti AWS nega la richiesta. In alcuni scenari, questo problema non può essere corretto modificando l'ora del client in modo che corrisponda all'ora del server.
Risoluzione
Quando si richiama una funzione Lambda in modo sincrono utilizzando un SDK AWS, la connessione dura fino alla restituzione della risposta. L'SDK Node.js consente 50 connessioni per impostazione predefinita. Se viene raggiunto il limite di connessione, l'SDK mette in coda la richiesta localmente fino a quando non è disponibile una connessione. Il limite di connessione potrebbe essere raggiunto se si riceve l'errore di firma scaduta e sono valide anche le seguenti azioni:
- La funzione Lambda non rallenta.
- L'ora del cliente è corretta.
- (Solo Node.js SDK) L'opzione correctClockSkew:true è stata impostata durante la creazione del client per assicurarsi che l'ora sia corretta durante l'invocazione.
- La funzione Lambda viene richiamata a una frequenza elevata e viene eseguita per un periodo di tempo prolungato.
- La funzione Lambda viene richiamata a una frequenza elevata.
L'SDK firma la richiesta e la inserisce in una coda in attesa di una connessione disponibile. Se la coda diventa troppo grande e la richiesta è in sospeso da più di cinque minuti, la firma scade. Eventuali richieste aggiuntive falliscono perché la firma è scaduta.
Per risolvere questo problema, considera l'utilizzo di una chiamata asincrona per Lambda se la risposta dall'invocazione non è necessaria. Ciò consente all'SDK di utilizzare la connessione solo per richiamare la richiesta e non attende una risposta.
Puoi anche aumentare il numero massimo di connessioni consentite dall'SDK.
**Nota:**Le connessioni aggiuntive consentono alla funzione Lambda di richiamare a una velocità maggiore, il che potrebbe causare una limitazione della velocità.
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?