如何排查 Lambda 函数失败的问题?

上次更新时间:2019 年 10 月 16 日

当我运行 AWS Lambda 函数时,运行失败并显示错误。如何排查这个问题?

简要描述

Lambda 函数失败通常由以下原因引起:

  • 权限问题
  • 代码问题
  • 网络问题
  • 限流
  • Invoke API 500 和 502 错误

根据您的 Lambda 代码和配置,您可以使用以下 AWS 服务和功能来确定原因:

查看以下常见问题类型,以确定要使用的服务或功能,以及在哪里可以找到更多信息和问题排查说明。

解决方法

权限问题

CloudTrail 将您的 AWS 账户中的 API 调用捕获为事件。当您的 Lambda 函数无法调用时,请查看 Lambda 的 CloudTrail 日志条目

调用 Lambda 的请求者必须拥有调用您的函数所需的 AWS Identity and Access Management (IAM) 权限。如果请求者没有权限,请更新您的 Lambda 函数权限,以授予他们权限。有关更多信息,请参阅故障排除 AWS Lambda 身份和访问

代码问题

CloudWatch Logs

要了解 Lambda 函数失败的详细信息,请在 CloudWatch 中查看 Lambda 日志。有关更多信息,请参阅所用编程语言的日志记录说明:

X-Ray

如果您的 Lambda 函数使用下游 AWS 资源、微服务、数据库或 HTTP Web API,请使用 X-Ray 来排查问题。

依赖关系

如果 Lambda 函数的部署程序包包含任何依赖关系,请确保您的代码可以成功导入它们。有关更多信息,请参阅所用编程语言的说明:

或者,您可以使用 Lambda 层添加部署程序包之外的依赖关系。

网络问题

如果您的 Lambda 函数连接到 Amazon Virtual Private Cloud (Amazon VPC),请确保所有内容已正确配置。有关更多信息,请参阅配置 Lambda 函数以访问 VPC 中的资源

如果连接到 Amazon VPC 的 Lambda 函数需要访问互联网,请确保为它提供互联网访问权限

限流

如果调用 Lambda 函数的请求过于频繁,以致其无法及时扩展,或者超过并发限制,则这些请求将失败,并显示 429 限流错误。有关更多信息,请参阅 AWS Lambda 函数扩展

可使用 CloudWatch 监视 Lambda 指标 ConcurrentExecutionsUnreservedConcurrentExecutionsThrottles 帮助进行原因排查。有关更多信息,请参阅 AWS Lambda CloudWatch 指标

调用 API 502 和 500 错误

如果您的 Lambda 函数由于 502 或 500 服务器错误而失败,请查看这些问题排查说明

有关可能的错误列表及其描述,请参阅 Lambda Invoke API 参考中的错误部分。