Comment puis-je résoudre l'erreur « Native Lambda Error:InvalidSignatureException : Signature « expirée » lors de l'appel d'une fonction Lambda à l'aide d'un SDK AWS ?

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 de signature expirée.

Brève description

L'expiration des signatures Lambda se produit lorsque l'heure du client et celle du serveur ne correspondent pas, comme dans le cas de l'erreur suivante :

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

Une demande d'API doit parvenir à AWS dans les cinq minutes suivant son horodatage, faute de quoi AWS refuse la demande. Dans certains scénarios, ce problème ne peut pas être corrigé en modifiant l'heure du client pour qu'elle corresponde à l'heure du serveur.

Résolution

Lorsque vous invoquez une fonction Lambda de manière synchrone à l'aide d'un SDK AWS, la connexion dure jusqu'à ce que la réponse soit renvoyée. Le SDK Node.js autorise 50 connexions par défaut. Si la limite de connexion est atteinte, le SDK met la demande en file d'attente localement jusqu'à ce qu'une connexion soit disponible. La limite de connexion peut être atteinte si vous avez reçu le message d'erreur d'expiration de la signature et les actions suivantes sont également vraies :

  • La fonction Lambda ne limite pas.
  • L'heure du client est correcte.
  • (SDK Node.js uniquement) L'option CorrectClockSkew:True a été définie lors de la création du client afin de s'assurer que l'heure soit corrigée lors de l'invocation.
  • La fonction Lambda est invoquée à un rythme élevé et s'exécute pendant une période prolongée.
  • La fonction Lambda est invoquée à un rythme élevé.

Le SDK signe la demande, puis la place dans une file d'attente en attendant la disponibilité d'une connexion. Si la file d'attente devient trop longue et que la demande est en attente pendant plus de cinq minutes, la signature expire. Toute demande supplémentaire échoue car la signature a expiré.

Pour résoudre ce problème, envisagez d'utiliser l'invocation asynchrone pour Lambda si la réponse de l'invocation n'est pas nécessaire. Le SDK peut alors utiliser la connexion uniquement pour invoquer la demande sans attendre de réponse.

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

**Remarque :**des connexions supplémentaires permettent à la fonction Lambda d'invoquer à une fréquence plus élevée, qui peut se traduire par 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 un an