我通过API网关触发lambda函数,一切都很完美,只有一个例外,那就是我第一次触发它时,它就失败了。
奇怪的是,lambda函数日志没有显示任何错误。我得到了我通常的START日志语句,然后是触发器的请求和上下文,然后在5s之后,它意外地结束了。
当我查看API网关日志时,这是它返回的错误:
由于客户功能错误: 2018-12-10T11:00:31.208Z cc233168-fc9n-11fc-a05a-577bb4sd2b2ccc任务在5.01秒后超时,Lambda执行失败。
有没有人遇到过类似的问题?什么是客户功能错误,我如何解决这个问题?
发布于 2018-12-10 11:24:47
在不知道你使用的背景代码的情况下,我认为这是一个冷开始。冷启动发生在您的函数很长时间没有被调用的第一个请求。如果您注意到错误消息:“5.01秒后超时。这是默认设置。您可以增加超时时间。
或者,您可以考虑通过缩短冷启动参考文献的长度来减少冷启动的影响:
您还可以通过Cloud在每个特定的时间间隔之后通过PING调用您的API来探索cron作业。
发布于 2022-05-13 16:00:10
补充Yash的答案:
我只在API 执行日志中看到过,不过万一它可以以其他方式显示:确保为端点启用了执行日志记录。如果您还没有启用它,则需要等待问题再次出现。
您可以验证这是一个冷启动问题,如下所示:
@logStream值和时间戳;它将是像a4f8115980dc83a511eeedc493a78741这样的长字符串字母数字There are older events to load. Load more.。在我的例子中,connection reset by peer说,这个错误导致我认为它的行为就像一个虚拟机已经进入睡眠状态,然后醒来,因为它相信它以前打开的TCP连接仍然有效。
在短期内,我们将采用的解决方案是实施重试策略。
除了冷启动问题之外,这个问题还有另一个潜在的方面: API网关访问日志格式。
做以下工作:
502API网关访问日志中的502 s通常(总是?)指示Lambda使用格式错误的JSON进行响应。
返回格式错误的JSON最明显的原因是代码中有一个bug。其中一个不太明显的原因是:访问日志格式出现错误。
如果您怀疑是这样的,请查找以下内容:
$context.error.messageString )insights查询像这样工作:| filter @status >= 500。尽管这样很方便,但是如果字段不能保证生成一个数值结果,那么JSON响应就会出现错误。对于许多上下文变量,这是文件需要记住一件事:可用的上下文变量在不同的API端点类型(lambda、websocket等)之间有所不同。
https://stackoverflow.com/questions/53704414
复制相似问题