Comment puis-je résoudre l'erreur « native lambda error:InvalidSignatureException: Signature expired » lorsque j'utilise un kit SDK AWS pour invoquer une fonction Lambda ?

Lecture de 3 minute(s)
0

Lorsque j'appelle ma fonction AWS Lambda à l'aide d'un kit SDK AWS, la fonction renvoie une erreur « Signature expired ».

Brève description

Lorsque l'heure du client et celle du serveur ne correspondent pas, la signature Lambda expire et vous recevez un message d'erreur similaire au message suivant :

« Error: native lambda error:InvalidSignatureException: Signature expired: 20230118T161739Z is now earlier than 20230118T161739Z (20190318T162239Z - 5 min.) »

Une requête d'API doit parvenir à AWS dans les 5 minutes suivant son horodatage. Sinon, AWS refuse la requête. Dans certains scénarios, vous pouvez modifier l'heure du client afin qu'elle corresponde à l'heure du serveur.

Résolution

Lorsque vous utilisez un kit SDK AWS pour invoquer de manière synchrone une fonction Lambda, la connexion est interrompue jusqu'à ce que la réponse soit renvoyée. Le kit SDK Node.js autorise 50 connexions par défaut. Si le quota de connexion est atteint, le kit SDK met la requête en file d'attente localement jusqu'à ce qu'une connexion soit disponible. Si le message d'erreur « Signature expired » s'affiche et que les actions suivantes sont correctes, il est possible que le quota de connexion soit atteint :

  • La fonction Lambda ne limite pas.
  • L'heure du client est correcte.
  • (Kit SDK Node.js uniquement) Vous définissez l'option correctClockSkew:true lorsque vous avez créé le client afin que l'heure soit corrigée lorsque vous appelez la fonction.
  • Vous avez appelé la fonction Lambda à un débit élevé ou vous avez appelé la fonction Lambda à un débit élevé et l'appel s'exécute pendant une période prolongée.

Le kit SDK signe la requête, puis la place dans une file d'attente. Si la file d'attente devient trop longue et que la requête est en attente pendant plus de 5 minutes, la signature expire. Toute requête supplémentaire échoue car la signature a expiré.

Si vous n'avez pas besoin de la réponse de l'invocation, utilisez une invocation asynchrone. L'appel asynchrone permet au kit SDK d'utiliser la connexion uniquement pour invoquer la requête et n'attend pas de réponse.

Vous pouvez également utiliser Top Level Await (TLA) dans votre application. Utilisez TLA si vous passez des appels d'API en dehors d'un gestionnaire et que vous recevez des exceptions SignatureDoesNotMatch lorsque vous utilisez le kit SDK Node.js v3.

Vous pouvez également augmenter le nombre maximal de connexions autorisées par le kit SDK.

Remarque : Lorsque vous ajoutez des connexions, la fonction Lambda est invoquée à un rythme plus élevé et peut provoquer une limitation.

Informations connexes

Surveillance et dépannage des applications Lambda

Comment résoudre les erreurs de délai d'invocation d'une fonction Lambda ?

Comment déterminer si ma fonction Lambda arrive à expiration ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 4 mois