使用 AWS SDK 調用 Lambda 函數時,我要如何解決「原生 lambda error:InvalidSignatureException: 簽名已過期」錯誤?

1 分的閱讀內容
0

當我使用 AWS SDK 調用 AWS Lambda 函數時,該函數會傳回簽章過期錯誤。

簡短說明

當用戶端時間與伺服器時間不相符時,就會發生 Lambda 過期簽章,類似於下列錯誤:

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

API 請求必須在請求時間戳記的五分鐘內送達 AWS,否則 AWS 會拒絕該請求。在某些情況下,無法透過變更用戶端時間以符合伺服器時間的方式來修正此問題。

解決方法

使用 AWS SDK 同步調用 Lambda 函數時,連線會持續到回應傳回為止。Node.js SDK 預設允許 50 個連線。如果達到連線限制,SDK 就會在本機將要求排入佇列,直到有可用的連線為止。如果您收到簽章過期錯誤,可能會達到連線限制,而下列動作也會出現這種情況:

  • Lambda 函數未進行節流。
  • 用戶端的時間正確無誤。
  • (僅限 Node.js SDK) 建立用戶端時,已設定 correctClockSkew:true 選項,以確保在調用時已更正時間。
  • Lambda 函數以高速率調用,並且長時間執行。
  • Lambda 函數以高速率調用。

SDK 會簽署要求,然後將其放入佇列中,等候可用連線。如果佇列變得太大且要求等候超過五分鐘,則簽章就會過期。任何其他要求都會失敗,因為簽章已過期。

若要解決此問題,如果不需要來自 Lambda 的非同步調用的回應,請考慮使用該調用。這允許 SDK 僅將連線用於調用要求,並且不會等候回應。

您也可以增加 SDK 允許的最大連線數

**注意:**其他連線允許 Lambda 函數以更高的速率調用,不過這可能會導致節流發生。

相關資訊

監控 Lambda 應用程式並進行疑難排解

如何疑難排解 Lambda 函數調用逾時錯誤?

如何確定我的 Lambda 函數是否逾時?

AWS 官方
AWS 官方已更新 1 年前