我已经设置了一个 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,看看重复调用是否:
有关更多信息,请参阅如何防止重复的 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 目标