本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 Lambda 函數的 SnapStart 錯誤進行故障診斷
此頁面說明如何解決使用 Lambda SnapStart 時發生的常見問題,包括快照建立錯誤、逾時錯誤和內部服務錯誤。
SnapStartNotReadyException
錯誤:呼叫 Invoke20150331 操作時發生錯誤 (SnapStartNotReadyException):Lambda 正在初始化函數。一旦函數狀態變為「作用中」,即可進行調用。
常見原因
當嘗試調用處於Inactive狀態的函數版本時,便會發生此錯誤。函數版本若超過 14 天未被調用,或在 Lambda 定期回收執行環境時,該函數版本的狀態會變為 Inactive
Resolution
等待函數版本進入 Active 狀態,然後再次調用它。
SnapStartTimeoutException
問題:當嘗試調用 SnapStart 函數版本時遇到 SnapStartTimeoutException 錯誤。
常見原因
在還原階段,Lambda 會還原 Java 執行時期,並執行任何還原後執行時期勾點。如果還原後執行時期勾點執行超過 10 秒,且Restore階段逾時,則當您嘗試調用函數時便會出現錯誤。網路連線和憑證問題也可能導致 Restore 階段逾時。
Resolution
檢查函數的 CloudWatch 日誌,看看還原階段是否發生了逾時錯誤。確定所有還原後勾點在 10 秒內完成。
範例 CloudWatch 日誌
{ "cause": "Lambda couldn't restore the snapshot within the timeout limit. (Service: Lambda, Status Code: 408, Request ID: 11a222c3-410f-427c-ab22-931d6bcbf4f2)", "error": "Lambda.SnapStartTimeoutException"}500 內部服務錯誤
錯誤:由於已達到並行快照建立限制,Lambda 無法建立新的快照。
常見原因
500 錯誤是 Lambda 服務本身的內部錯誤,而不是函數或程式碼的問題。這些錯誤通常是間歇性的。
Resolution
嘗試再次發布函數版本。
401 (未經授權)
錯誤:錯誤的工作階段字符或標頭金鑰
常見原因
將 Lambda SnapStart 與 AWS Systems Manager 參數存放區和 AWS Secrets Manager 延伸功能搭配使用時,便會發生此錯誤。
Resolution
AWS Systems Manager 參數存放區和 AWS Secrets Manager 延伸功能與 SnapStart 不相容。該延伸功能會產生憑證,以便在函數初始化期間與 AWS Secrets Manager 通訊,當與 SnapStart 搭配使用時,便會導致憑證過期錯誤。
UnknownHostException (Java)
錯誤:無法執行 HTTP 請求:abc.us-east-1.amazonaws.com 的憑證不符合任何主體別名。
常見原因
Lambda 函數已快取 DNS 回應。如果您透過 SnapStart 使用其他 DNS 快取,則當函數從快照恢復,可能會發生連線逾時的情況。
Resolution
為防止 Java 11 執行時期出現 UnknownHostException 失敗,建議將 networkaddress.cache.negative.ttl 設定為 0。在 Java 17 和更新版本的執行時期中,則不需要此步驟。您可以使用 AWS_LAMBDA_JAVA_NETWORKADDRESS_CACHE_NEGATIVE_TTL=0 環境變數為 Lambda 函數設定此屬性。
快照建立失敗
錯誤:AWS Lambda 無法調用 SnapStart 函數。如果此錯誤持續存在,請檢查函數的 CloudWatch 日誌,看看是否存在初始化錯誤。
Resolution
檢閱函數的 Amazon CloudWatch 日誌,了解檢查點前的執行時期勾點逾時。您也可以嘗試發布新的函數版本,這麼做有時可以解決問題。
快照建立延遲
問題:發布新的函數版本時,函數會長時間處於Pending狀態。
常見原因
Lambda 建立快照時,初始化程式碼最多可能會執行 15 分鐘。時間限制為 130 秒或設定的函數逾時 (最長 900 秒),以較長者為準。
如果函數已連接至 VPC,Lambda 可能還需要在函數的狀態轉變成Active之前建立網路介面。如果您嘗試在函數處於Pending狀態時調用函數版本,則可能會遇到 409 ResourceConflictException 錯誤。如果使用 Amazon API Gateway 端點調用函數,則可能會在 API Gateway 中遇到 500 錯誤。
Resolution
請至少等待 15 分鐘,讓函數版本完成初始化,然後再調用它。