本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
當您調用 Lambda 函數時,Lambda 會先驗證請求並檢查擴展容量,再將事件傳送到您的函數,或是事件佇列 (針對非同步調用)。導致調用錯誤的可能原因包含請求參數、事件結構、函數設定、使用者許可、資源許可或限制等問題。
如果您直接調用函數,您會在 Lambda 的回應中看到調用錯誤。如果您透過事件來源映射或是其他服務以非同步方式調用您的函數,您可能會在日誌、無效字母佇列或是失敗事件目的地上找到錯誤。錯誤處理選項和重試行為會因您調用函數的方式,以及錯誤的類型而有所不同。
如需 Invoke
操作可以傳回的錯誤類型清單,請參閱調用。
主題
Lambda:函數在初始化階段逾時 (Sandbox.Timedout)
錯誤:任務在 3.00 秒後逾時
當初始化階段出現逾時,Lambda 會在下一個調用請求到達時重新執行Init
階段,以再次初始化執行環境。(我們將其稱為隱藏的初始化。) 不過,如果函數設定了較短的逾時持續時間 (通常大約 3 秒),則隱藏的初始化可能無法在配置的逾時前完成,導致Init
階段再次逾時。或者,隱藏的初始化雖然完成,但留給調用階段的時間不夠,導致後者無法完成,從而造成Invoke
階段逾時。
若要減少逾時錯誤,請使用以下其中一種或幾種策略:
IAM:lambda:InvokeFunction 未獲授權
錯誤:使用者 arn:aws:iam::123456789012:user/developer 無權對資源 my-function 執行 lambda:InvokeFunction
您的使用者或您擔任的角色必須有調用函數的許可。此要求也適用於 Lambda 函數及其他調用函數的運算資源。將 AWS 受管政策 AWSLambdaRole 新增至您的使用者,或新增允許對目標函數lambda:InvokeFunction
執行動作的自訂政策。
注意
IAM 動作的名稱 (lambda:InvokeFunction
) 指的是 Invoke
Lambda API 操作。
如需詳細資訊,請參閱 在 中管理許可 AWS Lambda。
Lambda:找不到有效的引導程序 (Runtime.InvalidEntrypoint)
錯誤:找不到有效的引導程序:[/var/task/bootstrap /opt/bootstrap]
當部署套件的根層級不包含名為 bootstrap
的可執行檔時,通常會發生此錯誤。例如,如果您使用 .zip 檔案部署 provided.al2023
函數,則 bootstrap
檔案必須位於 .zip 檔案的根層級,而不在目錄中。
Lambda:無法執行操作 ResourceConflictException
錯誤:ResourceConflictException:此時無法執行操作。函數量前處於下列狀態:擱置中
當您在建立時將函數連接到 Virtual Private Cloud (VPC) 時,函數會在 Lambda 建立彈性網路界面的同時,進入 Pending
狀態。在此期間,您無法調用或修改函數。如果您在建立後將函數連接到 VPC,則可以在更新擱置時調用該函數,但無法修改其程式碼或組態。
如需詳細資訊,請參閱 Lambda 函數狀態。
Lambda:函數卡在待定狀態
錯誤: 函數停留在 Pending
狀態幾分鐘的時間。
如果函數卡在 Pending
狀態的時間超過六分鐘,請呼叫下列其中一個 API 操作來解除封鎖:
Lambda 會取消待處理的操作並將該函數放入 Failed
狀態。您接著可以嘗試另一個更新。
Lambda:一個函數正在使用所有並行
問題:單一函數正在使用所有可用的並行,造成其他函數遭到調節。
若要將 AWS 區域中您 AWS 帳戶的可用並行分割為集區,請使用預留並行。預留並行可確保函數一律會擴展至其受到指派的並行,且函數擴展的並行也不會超過其受到指派的並行。
一般:無法使用其他帳戶或服務調用函數
問題:您可以直接調用函數,但當其他服務或帳戶調用該函數時,它不會執行。
您在函數以資源為基礎的政策中,授予其他服務和帳戶調用函數的許可。如果調用者屬於另一個帳戶,則該使用者也必須具備函數的調用許可。
一般:函數調用正在循環
問題: 在迴圈中連續調用函數。
這通常發生在函數在觸發它的相同 AWS 服務中管理資源時。例如,可以建立函數,將物件存放在所設定的 Amazon Simple Storage Service (Amazon S3) 儲存貯體中,該儲存貯體具有再次調用函數的通知。若要阻止函數執行,可將函數的可用並行處理降為零,這會限制所有將來的調用。然後,識別造成遞迴調用的程式碼路徑或組態錯誤。Lambda 會自動偵測並停止某些 AWS 服務和 SDKs遞迴迴圈。如需詳細資訊,請參閱使用 Lambda 遞迴迴圈偵測功能防止無限迴圈。
Lambda:具有佈建並行的別名路由
問題: 在別名路由期間佈建並行溢出調用。
Lambda 使用簡單的概率模型來在兩個函數版本之間分配流量。在流量較低時,您可能會看到每個版本已設定流量百分比與實際流量百分比之間,存在很大差異。如果您的函數使用佈建並行,透過在別名路由作用期間設定較高數目的已佈建並行執行個體,則可以避免溢出調用。
Lambda:使用佈建並行的冷啟動
問題:啟用佈建的並行後,您會看到冷啟動。
當函數上的並行執行次數少於或等於已設定的佈建並行層級,則不應該發生任何冷啟動。若要協助您確認佈建的並行是否能正常運作,請執行下列動作:
-
請在函數版本或別名上檢查佈建的並行是否啟用。
注意
函數的未發佈版本 ($LATEST) 無法設定佈建並行。
-
確保您的觸發條件調用的是正確的函數版本或別名。例如,如果您使用的是 Amazon API Gateway,請檢查 API Gateway 調用的函數版本或別名具有佈建的並行,而不是 $LATEST。若要確認正在使用佈建的並行,您可以檢查 ProvisionedConcurrencyInvocations Amazon CloudWatch 指標。非零值表示函數正在初始化執行環境上處理調用。
-
判斷您的函數並行是否超過已佈建並行的設定層級,方法是檢查 ProvisionedConcurrencySpilloverInvocations CloudWatch 指標。非零值表示所有已佈建的並行處於使用中的狀態,而某些調用會在冷啟動時發生。
-
檢查調用頻率 (每秒請求數)。具有佈建並行的函數,每個佈建並行的請求速率上限為每秒 10 個。例如,設定為具備 100 個佈建並行的函數每秒可以處理 1,000 個請求。如果調用速率超過每秒 1,000 個請求,就可能會發生冷啟動。
Lambda:新版本的冷啟動
問題:在部署新版的函數時,您會看到冷啟動。
當您更新函數別名時,Lambda 會根據別名上設定的權重,自動將佈建的並行移至新版本。
錯誤:KMSDisabledException:因為使用的 KMS 金鑰已停用,Lambda 無法解密環境變數。請檢查函數的 KMS 金鑰設定。
如果您的 AWS Key Management Service (AWS KMS) 金鑰已停用,或如果允許 Lambda 使用金鑰的授予遭到撤銷,則可能會發生此錯誤。如果授權遺失,請將函數設定為使用不同的金鑰。然後重新分配自訂金鑰以重新建立授權。
EFS:函數無法掛載 EFS 檔案系統
錯誤:EFSMountFailureException:函數無法使用存取點 arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd 掛載 EFS 檔案系統。
對檔案系統的掛載要求已遭拒。檢查函數的許可,並確認其檔案系統和存取點是否存在,且可供使用。
EFS:函數無法連線到 EFS 檔案系統
錯誤:EFSMountConnectivityException:函數無法使用存取點 arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd 連線至 Amazon EFS 檔案系統。請檢查您的網路組態,並再試一次。
函數無法使用 NFS 通訊協定 (TCP 連接埠 2049) 建立函數檔案系統的連線。為 VPC 的子網路檢查安全群組與路由組態。
如果您在更新函數的 VPC 組態設定後遇到這些錯誤,請嘗試卸載並重新掛載檔案系統。
EFS:因為逾時,函數無法掛載 EFS 檔案系統
錯誤:EFSMountTimeoutException:由於掛載逾時,函數無法使用存取點 {arn:aws:elasticfilesystem:us-east-2:123456789012:access-point/fsap-015cxmplb72b405fd} 掛載 EFS 檔案系統。
函數可以連線至函數的檔案系統,但掛載操作逾時。稍後再試一次,並考慮限制函數的並行數量,以減少檔案系統的負載。
Lambda:Lambda 偵測到耗時太久的 IO 程序
EFSIOException:函數執行個體已停止,因為 Lambda 偵測到耗時太久的 IO 處理序。
先前的調用逾時,而且 Lambda 無法終止函數處理常式。當附加的檔案系統用完高載額度,且基準輸送量不足時,可能會發生此問題。若要增加輸送量,您可以增加檔案系統的大小,或使用佈建的輸送量。