Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何排查 Lambda 函数故障?
尝试调用我的 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),您的函数正在尝试访问的端点具有有效的网络路径。有关更多信息,请参阅 Configuring a Lambda Function to Access Resources in a VPC。
2. 确认您的函数可以访问互联网。有关更多信息,请参阅如何为连接到 Amazon VPC 的 Lambda 函数提供互联网访问权限?另请参阅如何排查 Amazon VPC 中 Lambda 函数的超时问题?
3. 要解决与 DNS 解析相关的问题,请确保将 VPC 配置为允许私有资源访问。如果您没有使用 AWS 提供的 DNS,请使用 EC2 实例来确保自定义提供的 DHCP 选项可正确解析 DNS 名称。有关更多信息,请参阅 DNS 的工作原理是什么,以及如何排查部分或间歇性 DNS 失败的问题?
**注意:**如果您查看 VPC 配置后无法确定函数代码为何未到达公共端点,请启用 VPC 流日志。您可以在 VPC 流日志中查看流入和流出 VPC 的所有网络流量。VPC 流日志还可让您确定特定请求被拒或未路由的原因。有关更多信息,请参阅 Troubleshoot networking issues in 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 .
有关更多信息,请参阅 Troubleshoot deployment issues in Lambda。
如果您的 AWS Identity and Access Management(AWS 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 函数权限。
有关更多信息,请参阅以下主题:
- Understanding AWS Lambda log file entries
- Troubleshooting AWS Lambda identity and access
- IAM: lambda:InvokeFunction not authorized。
识别并排查任何代码错误
如果您的 Lambda 代码存在问题,您会看到许多类型的错误。以下是一些较为常见的 Lambda 代码相关错误:
- Unable to marshal response: Object of type AttributeError is not JSON serializable
- Issue: The AWS SDK included on the runtime is not the latest version
- (Node.js) Function returns before code finishes executing
- KeyError
排查 Lambda 代码错误
1. 查看您的 Lambda 的 Amazon CloudWatch Logs。
您可以使用 CloudWatch 查看函数代码生成的所有日志并找出潜在问题。有关更多信息,请参阅 Accessing Amazon CloudWatch Logs for AWS Lambda。有关函数日志记录的详细信息,请参阅以下适用于相应编程语言的 Lambda 函数日志记录说明:
- Python Lambda 函数日志记录说明
- Node.js Lambda 函数日志记录说明
- Java Lambda 函数日志记录说明
- Go Lambda 函数日志记录说明
- C# Lambda 函数日志记录说明
- PowerShell Lambda 函数日志记录说明
- Ruby Lambda 函数日志记录说明
**注意:**如果您的函数返回堆栈跟踪,则堆栈跟踪中的错误消息会指明导致错误的原因。
2. 使用 AWS X-Ray 确定任何代码的性能瓶颈。如果您的 Lambda 函数使用下游 AWS 资源、微服务、数据库或 HTTP Web API,那么您可以使用 AWS X-Ray 来排查代码性能问题。有关更多信息,请参阅 Using AWS Lambda with AWS X-Ray。
3. 确认函数的部署包可以导入任何必需的依赖项。按照您所用的编程语言的 Lambda 部署包说明进行操作:
- Python Lambda 部署包说明
- Node.js Lambda 部署包说明
- Java Lambda 部署包说明
- Go Lambda 部署包说明
- C# Lambda 部署包说明
- PowerShell Lambda 部署包说明
- Ruby Lambda 部署包说明
**注意:**您还可以使用 Lambda 层添加部署包之外的依赖项。
4. (对于作为容器映像部署的代码)确认您安装的是运行时接口客户端并正确部署映像。按照您所用的编程语言的容器映像说明进行操作:
- Python Lambda 容器映像说明
- Node.js Lambda 容器映像说明
- Java Lambda 容器映像说明
- Go Lambda 容器映像说明
- C# Lambda 容器映像说明
- Ruby Lambda 容器映像说明
识别并排查任何节流错误
如果您的函数受到节流,则会出现以下错误:
Rate exceeded
429 TooManyRequestsException
排查 Lambda 节流错误
查看 Lambda 的 CloudWatch 指标。有关更多信息,请参阅 Working with Lambda function metrics。
需要监控的关键指标:
- ConcurrentExecutions
- UnreservedConcurrentExecutions
- Throttles
**注意:**如果调用函数的请求过于频繁,以致其无法及时扩展,或者超过并发限制,则请求将失败,同时出现 429 节流错误。有关更多信息,请参阅 Lambda function scaling。此外,请参阅如何排查出现 "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 错误
按照在 AWS Lambda 返回 HTTP 502 和 HTTP 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 中的容器映像问题中的说明进行操作。
相关信息
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 1 年前