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

1 分钟阅读
0

我已经设置了一个 AWS Lambda 函数来异步调用,但目标没有启动。如何解决此问题? 当我通过 Lambda 控制台调用 Lambda 函数时,它是同步调用还是异步调用? -或者- 如何解决重复的 Lambda 函数调用?

解决方法

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

  • Lambda 无权执行代码中包含的操作。
  • 调用 Lambda 函数的 AWS 服务没有足够的权限。
  • Lambda 函数是同步调用的。
  • 在 Lambda 函数的异步调用配置中,重试次数设置为 0。

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

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

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

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

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

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

4.    查看 Lambda 函数的 Amazon CloudWatch Logs,看看重复调用是否:

  • 具有相同的请求 ID。
  • 返回错误或超时。

有关更多信息,请参阅如何防止重复的 Lambda 函数调用?

5.    如果重复调用具有相同的请求 ID 并返回错误或超时,请为异步调用配置错误处理。使用此配置,您可以控制 Lambda 服务在出现故障时可以执行的重试次数。

有关更多信息,请参阅 AWS Lambda 中的错误处理和自动重试

注意:具有相同请求 ID 的重复调用返回错误或超时表示 Lambda 重试了该函数。

6.    如果重复调用没有返回错误也没有超时,请执行以下操作:

  • 确保 Lambda 函数的代码具备幂等性,并且可以多次处理相同的消息。
  • 确保 Lambda 函数的并发限制设置得足够高,可以处理它收到的调用请求数。
  • 识别并解决Lambda 函数返回的任何错误。

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

注意:如果重复调用来自客户端,则请求 ID 会有所不同。

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

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

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


相关信息

比较 Lambda 调用模式

调用 Lambda 函数

介绍 AWS Lambda 目标

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