Wie kann ich den Fehler „native lambda error:invalidSignatureException: Signature expired" beim Aufrufen einer Lambda-Funktion mit einem AWS SDK beheben?

Lesedauer: 2 Minute
0

Wenn ich meine AWS Lambda-Funktion mit einem AWS-SDK aufrufe, gibt die Funktion den Fehler „signature expired“ (Signatur abgelaufen) zurück.

Kurzbeschreibung

Abgelaufene Lambda-Signaturen treten auf, wenn die Client-Zeit und die Serverzeit nicht übereinstimmen, ähnlich dem folgenden Fehler:

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

Eine API-Anfrage muss AWS innerhalb von fünf Minuten nach dem in der Anfrage angegebenen Zeitstempel erreichen, andernfalls lehnt AWS die Anfrage ab. In einigen Szenarien kann dieses Problem nicht behoben werden, indem die Client-Zeit an die Serverzeit angepasst wird.

Lösung

Wenn eine Lambda-Funktion synchron mit einem AWS-SDK aufgerufen wird, hält die Verbindung an, bis die Antwort zurückgegeben wird. Das Node.js SDK erlaubt standardmäßig 50 Verbindungen. Wenn das Verbindungslimit erreicht ist, stellt das SDK die Anforderung lokal in die Warteschlange, bis eine Verbindung verfügbar ist. Das Verbindungslimit ist möglicherweise erreicht, wenn Sie den Fehler „Signatur abgelaufen“ erhalten haben und die folgenden Aktionen ebenfalls zutreffen:

  • Die Lambda-Funktion drosselt nicht.
  • Die Client-Zeit ist korrekt.
  • (Nur Node.js SDK) Die Option correctClockSkew:true wurde bei der Erstellung des Clients gesetzt, um sicherzustellen, dass die Zeit beim Aufrufen korrigiert wird.
  • Die Lambda-Funktion wird mit hoher Geschwindigkeit aufgerufen und läuft über einen längeren Zeitraum.
  • Die Lambda-Funktion wird mit hoher Geschwindigkeit aufgerufen.

Das SDK signiert die Anfrage und stellt sie dann in eine Warteschlange, bis eine Verbindung verfügbar ist. Wenn die Warteschlange zu groß wird und die Anfrage länger als fünf Minuten aussteht, läuft die Signatur ab. Alle weiteren Anfragen schlagen fehl, da die Signatur abgelaufen ist.

Um dieses Problem zu lösen, sollten Sie erwägen, einen asynchronen Aufruf für Lambda zu verwenden, wenn die Antwort des Aufrufs nicht benötigt wird. Dadurch kann das SDK die Verbindung nur zum Aufrufen der Anfrage verwenden und nicht auf eine Antwort warten.

Sie können auch die maximale Anzahl der vom SDK zugelassenen Verbindungen erhöhen.

Hinweis: Durch zusätzliche Verbindungen kann die Lambda-Funktion mit einer höheren Rate aufgerufen werden, was zu einer Drosselung führen kann.

Relevante Informationen

Überwachung und Fehlerbehebung von Lambda-Anwendungen

Wie behebe ich Timeout-Fehler beim Aufrufen von Lambda-Funktionen?

Wie stelle ich fest, ob meine Lambda-Funktion ein Timeout hat?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr