本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 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 延伸時,會發生此錯誤。當您的函數使用 SnapStart 時,它會從容器端點取得登入資料,而 Lambda 不會設定AWS_SESSION_TOKEN環境變數。如果您的函數從該環境變數設定 X-Aws-Parameters-Secrets-Token 標頭,則標頭為空,延伸會拒絕請求。
Resolution
若要修正此錯誤,請使用 AWS SDK 登入資料提供者鏈結來擷取工作階段字符,而不是直接讀取AWS_SESSION_TOKEN環境變數。將 X-Aws-Parameters-Secrets-Token標頭設定為提供者鏈傳回的字符。登入資料提供者鏈結會在所有初始化模式中傳回正確的工作階段字符,包括 SnapStart。如需範例程式碼,請參閱 在 Lambda 函式中使用 Secrets Manager 秘密。
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 函數設定此屬性。
快照建立失敗
Error: 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 分鐘,讓函數版本完成初始化,然後再調用它。