如何排查 Lambda 函数故障?
尝试调用我的 AWS Lambda 函数时,调用失败并返回错误。如何排查 Lambda 函数故障?
解决方法
要排查 Lambda 函数故障,请首先使用本文中列出的一项或多项 AWS 服务和功能来确定导致错误的原因。然后按照提供的链接,查看对每个问题进行故障排除的最佳实践。
识别和排查任何权限错误
如果您的 Lambda 部署软件包的安全权限不正确,则会出现以下错误之一:
- EACCES: permission denied, open '/var/task/index.js'
- cannot load such file -- function
- [Errno 13] Permission denied: '/var/task/function.py'
如果您的 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 的请求者必须拥有调用您的函数所需的 AWS Identity and Access Management (IAM) 权限。要授予所需权限,请更新您的 Lambda 函数权限。
有关更多信息,请参阅了解 AWS Lambda 日志文件条目、对 AWS Lambda 身份和访问进行故障排除以及 IAM: lambda: InvokeFunction 未授权。
识别并排查任何代码错误
如果您的 Lambda 代码存在问题,则会出现许多类型的错误。以下是一些较常见的 Lambda 代码相关错误:
- Unable to marshal response: Object of type AttributeError is not JSON serializable
- 问题:运行时包含的 AWS 开发工具包不是最新版本
- (Node.js) 函数在代码完成执行之前返回
- KeyError
排查 Lambda 代码错误
1. 查看 Lambda 的 Amazon CloudWatch Logs。
您可以使用 CloudWatch 查看由函数代码生成的所有日志,并识别潜在问题。有关更多信息,请参阅访问 Amazon CloudWatch 的 AWS Lambda 日志。有关函数日志记录的详细信息,请按照以下与您所用编程语言对应的 Lambda 函数日志记录说明进行处理:
- Python 中的 AWS Lambda 函数日志记录说明
- Node.js 中的 AWS Lambda 函数日志记录说明
- Java 中的 AWS Lambda 函数日志记录说明
- Go 中的 AWS Lambda 函数日志记录说明
- C# 中的 AWS Lambda 函数日志记录说明
- PowerShell 中的 AWS Lambda 函数日志记录说明
- Ruby 中的 AWS Lambda 函数日志记录说明
**注意:**如果您的函数返回堆栈跟踪,则堆栈跟踪中的错误信息会指出错误原因。
2. 使用 AWS X-Ray 确定任何代码的性能瓶颈。如果您的 Lambda 函数调用下游 AWS 资源、微服务、数据库或 HTTP Web API,请使用 AWS X-Ray 来排查代码性能问题。有关更多信息,请参阅将 AWS Lambda 与 AWS X-Ray 结合使用。
3. 确认函数的部署程序包可以导入任何必需的依赖项。请按照与您所用编程语言对应的部署程序包说明进行处理:
- 使用 .zip 文件存档部署 Python Lambda 函数
- 使用 .zip 文件存档部署 Node.js Lambda 函数
- 使用 .zip 或 JAR 文件存档部署 Java Lambda 函数
- 使用 .zip 文件存档部署 Go Lambda 函数
- 使用 .zip 文件存档部署 C# Lambda 函数
- 使用 .zip 文件存档部署 PowerShell Lambda 函数
- 使用 .zip 文件存档部署 Ruby Lambda 函数
**注意:**您还可以使用 Lambda 层来添加部署程序包之外的依赖项。
4. (对于作为容器映像部署的代码)确认您正确安装了运行时接口客户端并正确部署了映像。请按照与您所用编程语言对应的容器映像说明进行处理:
- 使用容器映像部署 Python Lambda 函数
- 使用容器映像部署 Node.js Lambda 函数
- 使用容器映像部署 Java Lambda 函数
- 使用容器映像部署 Go Lambda 函数
- 使用容器映像部署 C# Lambda 函数
- 使用容器映像部署 Ruby Lambda 函数
识别并排查任何网络错误
如果您的 Lambda 网络配置存在问题,则会出现许多类型的错误。以下是一些最常见的 Lambda 网络相关错误:
如果您的函数位于 Virtual Private Cloud (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
要排查 Lambda 网络错误,请执行以下操作:
1. 确认您的函数正在尝试访问的终端节点有一个有效的网络路径。有关更多信息,请参阅配置 Lambda 函数以访问 VPC 中的资源。
2. (对于连接到 Amazon VPC 的函数)确认您的函数可以访问互联网。有关更多信息,请参阅如何为连接到 Amazon VPC 的 Lambda 函数提供互联网访问权限? 此外,请参阅如何使用 Lambda 函数排查 VPC 中的超时问题?
**注意:**如果在查看 VPC 配置后仍无法确定为什么函数代码未到达公共终端节点,请参阅 VPC 流日志。利用 VPC 流日志功能,您可以查看往返 VPC 的所有网络流量,从而确定请求被拒绝或未被传输的原因。有关更多信息,请参阅 Lambda 中的联网问题疑难解答。
识别并排查任何限流错误
如果您的函数受到限流,则会出现以下错误:
Rate exceeded
429 TooManyRequestsException
要排查 Lambda 限流错误,请执行以下操作:
查看您的 Lambda CloudWatch 指标。有关更多信息,请参阅 AWS Lambda CloudWatch 指标。
需要监控的关键指标:
- ConcurrentExecutions
- UnreservedConcurrentExecutions
- Throttles
**注意:**如果调用函数的请求过于频繁,以致其无法及时扩展,或者超过并发限制,则这些请求会因限制错误而失败(状态代码为 429)。有关更多信息,请参阅 AWS Lambda 函数扩展。此外,请参阅如何排查出现“Rate Exceeded”和 429 “TooManyRequestsException”错误时的 Lambda 函数限流问题?
识别并排查任何 Invoke API 500 和 502 错误
如果您的调用请求失败,则会出现以下 502 或 500 服务器错误:
- InvalidRuntimeException
- InvalidSecurityGroupIDException
- InvalidZipFileException
- KMSAccessDeniedException
- KMSNotFoundException
- You have exceeded the maximum limit for Hyperplane ENIs for your account
- SubnetIPAddressLimitReachedException
对 Lambda Invoke API 500 和 502 错误进行故障排除
请按照如何排查调用 Lambda 函数时出现的 502 和 500 错误?中的说明进行处理 有关可能的错误列表及其描述,请参阅 Lambda Invoke 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 容器映像错误
请参照 Lambda 中的容器映像问题疑难解答中的说明进行处理。
注意:如果您不确定导致错误的问题类型,请按照本文识别和排查 Lambda 代码错误部分中的说明进行处理。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前