如何排查 Lambda 同步调用问题?

上次更新日期:2022 年 10 月 14 日

我已经设置了一个 AWS Lambda 函数来同步调用,但目标没有启动。如何解决此问题?

当我通过 Lambda 控制台调用 Lambda 函数时,它是同步调用还是异步调用?

-或者-

为什么我的 Lambda 函数,在我将其设置为重试一次或两次后没有重试?

解决方法

当您同步调用 Lambda 函数但该函数失败时,可能的原因如下:

  • Lambda 无权执行代码中包含的操作。
  • 调用 Lambda 函数的 AWS 服务没有足够的权限。
  • Lambda 是异步调用的。
  • Lambda 仅支持异步调用和流调用的目标,不支持同步调用的目标。

请按照以下步骤排查同步调用问题:

1.    确定如何调用 Lambda 函数。该函数是否使用 AWS CLI 调用? 该函数是否通过 AWS 服务调用?

2.    检查 AWS 服务是同步还是异步调用 Lambda 函数

3.    使用以下命令同步调用 Lambda 函数:

aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{ "key": "value" }' response.json

查看是否报告了 200 状态码,或者该命令是否返回错误。

4.    请记住,在同步调用中,Lambda 函数重试行为由客户端控制。来自 AWS Lambda 控制台的 Retry attempts(重试次数)配置仅限于异步调用。确保客户端重试请求,而不是检查 Lambda 日志。

5.    请记住,在 Lambda 控制台中调用的 Lambda 函数始终是同步调用。

6.    根据每项服务的事件源映射,同步调用重试行为因 AWS 服务而异。

有关更多信息,请参阅事件驱动型调用

7.    确保 Lambda 函数的代码具备幂等性,并且可以多次处理相同的消息。

8.    识别并解决您的 Lambda 函数返回的任何错误

有关更多信息,请参阅如何排查 Lambda 函数的故障?

9.    如果您仍然无法解决问题,请向 AWS Support 提交案例。在案例中提供以下信息:

  • Lambda 函数 ARN。
  • 包含所有服务的 Lambda 函数设置的工作流程。
  • 有关问题是间歇性还是持续性的详细信息。
  • 从问题发生时起,以 .txt 格式填写的 CloudWatch 日志。这些 CloudWatch 日志用于识别 Lambda 函数错误,包括超时问题、init 持续时间和权限问题。
  • 问题的确切时间戳,时区或时间戳采用 UTC 时间。

注意:出于安全和隐私原因,AWS Support 代表无权访问客户 CloudWatch 日志。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?