如何對 Lambda 函數失敗進行疑難排解?

3 分的閱讀內容
0

在我嘗試調用 AWS Lambda 函數時,它失敗並傳回錯誤。

解決方法

若要對 Lambda 函數故障進行疑難排解,請使用本文中列出的一或多項 AWS 服務和功能來確定導致錯誤的原因。然後,點選提供的連結以檢閱每個問題的疑難排解最佳實務。

識別任何聯網錯誤並進行疑難排解

如果 Lambda 聯網組態出現問題,您會看到許多類型的錯誤。以下是一些最常見的 Lambda 聯網相關錯誤:

如果您的函數不在虛擬私有雲端 (VPC) 中,且您嘗試使用私有 DNS 名稱存取資源,則會看到下列錯誤:

UnknownHostException
Error: getaddrinfo ENOTFOUND

如果您的函數在 VPC 中,然後遺失網路存取權或逾時,您會看到下列錯誤:

connect ETIMEDOUT 176.32.98.189:443
Task timed out after 10.00 seconds

如果函數所在的 VPC 達到彈性網路介面限制,您會看到下列錯誤:

ENILimitReachedException: The elastic network interface limit was reached for the function's VPC.

如果傳輸控制協定 (TCP) 連線中斷,您會看到下列錯誤:

Connection reset by peer
ECONNRESET
ECONNREFUSED

對 Lambda 聯網錯誤進行疑難排解

1.    確認您的函數嘗試為 Amazon Virtual Private Cloud (Amazon VPC) 存取的端點具有有效的網路路徑。如需詳細資訊,請參閱設定 Lambda 函數以存取 VPC 中的資源

2.    確認您的函數可以存取網際網路。如需詳細資訊,請參閱如何讓網際網路存取連接至 Amazon VPC 的函數?另請參閱如何對 Amazon VPC 中的 Lambda 函數的逾時問題進行疑難排解?

3.    若要對與 DNS 解析相關的問題進行疑難排解,請確定已針對私有資源存取權設定 VPC。如果您不使用 AWS 提供的 DNS,請使用 EC2 執行個體來確定提供的自訂 DHCP 選項已正確解析 DNS 名稱。如需詳細資訊,請參閱 DNS 如何運作,以及如何對部分或間歇性 DNS 故障進行疑難排解?

**注意:**如果您在檢閱 VPC 組態後無法確定函數程式碼未到達公有端點的原因,請開啟 VPC 流程日誌。VPC 流程日誌可讓您查看流入和流出 VPC 的所有網路流量。VPC 流程日誌還可讓您確定特定請求遭拒或未路由的原因。如需詳細資訊,請參閱對 Lambda 中的聯網問題進行疑難排解

識別任何許可錯誤並進行疑難排解

如果 Lambda 部署套件的安全許可不正確,您會看到下列其中一個錯誤:

  • EACCES: permission denied, open '/var/task/index.js'
  • cannot load such file -- function
  • [Errno 13] Permission denied: '/var/task/function.py'

Lambda 執行時期需要讀取部署套件中的檔案的許可。您可以使用 chmod 命令來變更檔案模式。下列範例命令使目前目錄中的所有檔案和資料夾都可供任何使用者讀取:

chmod -R o+rX .

如需詳細資訊,請參閱對 Lambda 中的部署問題進行疑難排解

如果您的 AWS Identity and Access Management (IAM) 身分沒有調用函數的許可,您會收到下列錯誤:

User: arn:aws:iam::123456789012:user/developer is not authorized to perform: lambda:InvokeFunction on resource: my-function

對 Lambda 許可錯誤進行疑難排解

在 AWS CloudTrail 中檢閱您的 Lambda 日誌檔案項目。呼叫 Lambda 的請求者必須具有調用您的函數所需的 IAM 許可。若要授予所需的許可,請更新 Lambda 函數許可

如需詳細資訊,請參閱下列主題:

識別任何程式碼錯誤並進行疑難排解

如果 Lambda 程式碼出現問題,您會看到許多類型的錯誤。以下是一些較常見的 Lambda 程式碼相關錯誤:

  • 無法整理回應: AttributeError 類型的物件不可 JSON 序列化
  • 問題: 執行時期中包含的 AWS SDK 不是最新版本
  • (Node.js) 函數在程式碼執行完成之前傳回
  • KeyError

對 Lambda 程式碼錯誤進行疑難排解

1.    檢閱 Lambda 的 Amazon CloudWatch Logs。

您可以使用 CloudWatch,來檢視函數程式碼產生的所有日誌並識別潛在問題。如需詳細資訊,請參閱存取 AWS Lambda 的 Amazon CloudWatch Logs。如需有關函數日誌記錄的詳細資訊,請參閱下列適用於您所使用程式設計語言的 Lambda 函數日誌記錄指示:

**注意:**如果您的函數傳回堆疊追蹤,則堆疊追蹤中的錯誤訊息會指定導致錯誤的原因。

2.    使用 AWS X-Ray 識別任何程式碼效能瓶頸。如果您的 Lambda 函數使用下游 AWS 資源、微型服務、資料庫或 HTTP Web API,您可以使用 AWS X-Ray 對程式碼效能問題進行疑難排解。如需詳細資訊,請參閱將 AWS Lambda 與 AWS X-Ray 搭配使用

3.    確認函數的部署套件可以匯入任何所需相依項。請遵循適用於您所使用程式設計語言的 Lambda 部署套件指示進行操作:

**注意:**您也可以使用 Lambda 層來新增部署套件外部的相依項。

4.    (對於部署為容器映像的程式碼) 確認您正在安裝執行時期介面用戶端並正確部署映像。請遵循適用於您所使用程式設計語言的容器映像指示進行操作:

識別任何限流錯誤並進行疑難排解

如果您的函數受到限流,您會看到下列錯誤:

Rate exceeded
429 TooManyRequestsException

對 Lambda 限流錯誤進行疑難排解

檢閱 Lambda 的 CloudWatch 指標。如需詳細資訊,請參閱使用 Lambda 函數指標

要監控的主要指標:

  • ConcurrentExecutions
  • UnreservedConcurrentExecutions
  • Throttles

**注意:**如果調用函數的請求到達的速度快於函數可擴展的速度或超出並行限制,請求將失敗並顯示 429 限流錯誤。如需詳細資訊,請參閱 Lambda 函數擴展。另請參閱如何對顯示「超過速率」和 429 "TooManyRequestsException" 錯誤的 Lambda 函數限流進行疑難排解?

識別任何調用 API 500 和 502 錯誤並進行疑難排解

如果您的調用請求失敗,您會看到下列任何 502 或 500 伺服器端錯誤:

  • InvalidRuntimeException
  • InvalidSecurityGroupIDException
  • InvalidZipFileException
  • KMSAccessDeniedException
  • KMSNotFoundException
  • You have exceeded the maximum limit for Hyperplane ENIs for your account
  • SubnetIPAddressLimitReachedException

對 Lambda 調用 API 500 和 502 錯誤進行疑難排解

遵循如何對 AWS Lambda 中的 HTTP 502 和 HTTP 500 狀態碼 (伺服器端) 錯誤進行疑難排解?中的指示進行操作。如需可能錯誤的清單及描述,請參閱 Lambda 調用 API 參考中的錯誤

識別任何容器映像錯誤並進行疑難排解

如果您正在使用容器映像且容器映像出現問題,您會看到下列任何錯誤:

  • "errorType": "Runtime.InvalidEntrypoint"
  • Error: You are using an AWS CloudFormation template, and your container ENTRYPOINT is being overridden with a null or empty value.

對 Lambda 容器映像錯誤進行疑難排解

遵循](https://docs.aws.amazon.com/lambda/latest/dg/troubleshooting-images.html)對 Lambda 中的容器映像問題進行疑難排解[中的指示進行操作。


相關資訊

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

Lambda 中的錯誤處理和自動重試

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