首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有当我第一次使用“客户函数错误”运行时,AWS lambda执行才会失败

只有当我第一次使用“客户函数错误”运行时,AWS lambda执行才会失败
EN

Stack Overflow用户
提问于 2018-12-10 11:10:05
回答 2查看 5.1K关注 0票数 2

我通过API网关触发lambda函数,一切都很完美,只有一个例外,那就是我第一次触发它时,它就失败了。

奇怪的是,lambda函数日志没有显示任何错误。我得到了我通常的START日志语句,然后是触发器的请求和上下文,然后在5s之后,它意外地结束了。

当我查看API网关日志时,这是它返回的错误:

由于客户功能错误: 2018-12-10T11:00:31.208Z cc233168-fc9n-11fc-a05a-577bb4sd2b2ccc任务在5.01秒后超时,Lambda执行失败。

有没有人遇到过类似的问题?什么是客户功能错误,我如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 11:24:47

在不知道你使用的背景代码的情况下,我认为这是一个冷开始。冷启动发生在您的函数很长时间没有被调用的第一个请求。如果您注意到错误消息:“5.01秒后超时。这是默认设置。您可以增加超时时间。

或者,您可以考虑通过缩短冷启动参考文献的长度来减少冷启动的影响:

  1. 通过使用一种不会引起高冷启动时间的语言(如Node.js、Python或Go )编写Lambda函数
  2. 为处理用户请求的关键路径上的函数选择更高的内存设置(即用户必须等待响应的任何内容,包括中间API)
  3. 优化函数的依赖项和包大小

您还可以通过Cloud在每个特定的时间间隔之后通过PING调用您的API来探索cron作业。

票数 3
EN

Stack Overflow用户

发布于 2022-05-13 16:00:10

补充Yash的答案:

我只在API 执行日志中看到过,不过万一它可以以其他方式显示:确保为端点启用了执行日志记录。如果您还没有启用它,则需要等待问题再次出现。

您可以验证这是一个冷启动问题,如下所示:

  • 在带有错误的日志条目中,获取事件的@logStream值和时间戳;它将是像a4f8115980dc83a511eeedc493a78741这样的长字符串字母数字
  • 打开端点的执行日志->的日志组,查找带有刚才捕获的标识符的日志流
  • 将日期/时间范围缩小到事件发生时间附近的窗口
  • 如果您选择了一个狭小的窗口,如果这是一个冷开始问题:我希望这个冒犯的请求是列表中的第一个。单击列表顶部的There are older events to load. Load more.
  • 现在,您应该会看到上一次收到的请求与违规的请求之间的时间间隔。

在我的例子中,connection reset by peer说,这个错误导致我认为它的行为就像一个虚拟机已经进入睡眠状态,然后醒来,因为它相信它以前打开的TCP连接仍然有效。

在短期内,我们将采用的解决方案是实施重试策略。

除了冷启动问题之外,这个问题还有另一个潜在的方面: API网关访问日志格式。

做以下工作:

  • 执行日志中查找对应于违规请求的access日志条目。
  • HTTP == 502

API网关访问日志中的502 s通常(总是?)指示Lambda使用格式错误的JSON进行响应。

返回格式错误的JSON最明显的原因是代码中有一个bug。其中一个不太明显的原因是:访问日志格式出现错误。

如果您怀疑是这样的,请查找以下内容:

  • 不应该引用的字段(如$context.error.messageString )
  • 应该被引用的字段。一个常见的成语是不引用数字字段,因为它使insights查询像这样工作:| filter @status >= 500。尽管这样很方便,但是如果字段不能保证生成一个数值结果,那么JSON响应就会出现错误。
  • {}体中的后缀逗号

对于许多上下文变量,这是文件需要记住一件事:可用的上下文变量在不同的API端点类型(lambda、websocket等)之间有所不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53704414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档