如何排查 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 官方已更新 2 年前
- AWS 官方已更新 2 个月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 个月前