如何排查 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),您的函数正在尝试访问的端点具有有效的网络路径。有关更多信息,请参阅 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 函数权限

有关更多信息,请参阅以下主题:

识别并排查任何代码错误

如果您的 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 函数日志记录说明:

**注意:**如果您的函数返回堆栈跟踪,则堆栈跟踪中的错误消息会指明导致错误的原因。

2.    使用 AWS X-Ray 确定任何代码的性能瓶颈。如果您的 Lambda 函数使用下游 AWS 资源、微服务、数据库或 HTTP Web API,那么您可以使用 AWS X-Ray 来排查代码性能问题。有关更多信息,请参阅 Using AWS Lambda with AWS X-Ray

3.    确认函数的部署包可以导入任何必需的依赖项。按照您所用的编程语言的 Lambda 部署包说明进行操作:

**注意:**您还可以使用 Lambda 层添加部署包之外的依赖项。

4.    (对于作为容器映像部署的代码)确认您安装的是运行时接口客户端并正确部署映像。按照您所用的编程语言的容器映像说明进行操作:

识别并排查任何节流错误

如果您的函数受到节流,则会出现以下错误:

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 中的容器映像问题中的说明进行操作。


相关信息

Monitoring and troubleshooting Lambda applications

Error handling and automatic retries in Lambda

AWS 官方
AWS 官方已更新 1 年前
没有评论