Node.js NodeJS Lambda似乎失败,但报告成功

Node.js NodeJS Lambda似乎失败,但报告成功,node.js,aws-lambda,Node.js,Aws Lambda,我看到的是我不完全理解的NodeJS Lambda的行为。首先,我假设我们的代码中至少有一个bug,但我们很难理解的问题是,它如何影响同一个Lambda实例上的子序列调用 我所能理解的最大问题是,在初始失败后,我的下一次调用也将失败,我看到一个错误,似乎表明nodejs已经终止。然后我看到它重新初始化并再次成功地开始处理请求 有几个问题: 好的,我们似乎有一个bug,我想我们可以找到它并在某个时候修复它 后续调用中的NodeJ终止,但调用被视为成功(当然不是) 因为第二次调用被认为是成功的,所以

我看到的是我不完全理解的NodeJS Lambda的行为。首先,我假设我们的代码中至少有一个bug,但我们很难理解的问题是,它如何影响同一个Lambda实例上的子序列调用

我所能理解的最大问题是,在初始失败后,我的下一次调用也将失败,我看到一个错误,似乎表明nodejs已经终止。然后我看到它重新初始化并再次成功地开始处理请求

有几个问题:

  • 好的,我们似乎有一个bug,我想我们可以找到它并在某个时候修复它
  • 后续调用中的NodeJ终止,但调用被视为成功(当然不是)
  • 因为第二次调用被认为是成功的,所以不会重试

  • 让我试着展示一些细节。首先,这是第二次调用,它确实失败了,NodeJS似乎要终止:

    START RequestId: a71447b0-19f8-456c-b163-47e0408bf3a1 Version: $LATEST
    2019-10-17T00:26:12.295Z    a71447b0-19f8-456c-b163-47e0408bf3a1    INFO    Assuming lambda role: { ... }lambda',
    END RequestId: a71447b0-19f8-456c-b163-47e0408bf3a1
    REPORT RequestId: a71447b0-19f8-456c-b163-47e0408bf3a1    Duration: 228.19 ms    Billed Duration: 300 ms    Memory Size: 256 MBMax Memory Used: 158 MB
    RequestId: a71447b0-19f8-456c-b163-47e0408bf3a1 Error: Runtime exited with error: exit status 129
    
    也许我误解了最后一行,但在我看来,NodeJS肯定要终止了(用SIGHUP??)。在此之后,下一次调用将显示X射线日志,就像我们在第一次调用此实例时看到的:

    2019-10-17T00:55:30.531Z       undefined       INFO    AWS_XRAY_DAEMON_ADDRESS is set. Configured daemon address to 169.xxx.xxx.xxx.
    2019-10-17T00:55:30.536Z       undefined       INFO    AWS_XRAY_CONTEXT_MISSING is set. Configured context missing strategy to LOG_ERROR.
    2019-10-17T00:55:30.554Z       undefined       INFO    Subsegment streaming threshold set to: 0
    
    所以它在我的lambda实例上重新启动了NodeJs?这是我们应该看到的吗

    如果我在X光等中查找此项,则显示错误,但状态为200:

    我认为还值得展示之前的调用,它似乎触发了这一点。这也是成功的,它确实返回了正确的值等,但完成后,我在日志中看到:

    2019-10-17T00:55:29.169Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.326Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.328Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.329Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.329Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.330Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.368Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.388Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.408Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.428Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.467Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.468Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.469Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.567Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    2019-10-17T00:55:29.568Z    3bf23bda-e7fa-4fd7-b373-2258baff2bb8    ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"premature close","stack":["Error: premature close","    at Duplexify.onclose (/var/task/node_modules/end-of-stream/index.js:47:67)","    at Duplexify.emit (events.js:198:13)","    at Duplexify.EventEmitter.emit (domain.js:448:20)","    at Duplexify._destroy (/var/task/node_modules/duplexify/index.js:199:8)","    at /var/task/node_modules/duplexify/index.js:182:10","    at /var/task/node_modules/async-listener/glue.js:188:31","    at process._tickCallback (internal/process/next_tick.js:61:11)"]}
    
    毫无疑问,这是我们代码中的一个bug。我不清楚这可能是什么,因为这些库不是我们的代码使用的库。事实上,这些似乎被AWS X射线所使用。那么,是不是X射线出现了故障,导致了一些调用失败

    我试图理解:

    • nodejs是否出现故障并正在重新启动
    • 是否有一种方法可以捕获此进程终止,并至少将其视为失败的调用
    • 简言之:这里发生了什么?它似乎与我们通常期望在lambda中看到的不匹配

    以下是我们将要尝试的一些我们尝试过但没有帮助的事情:

    • 升级了aws sdk和X射线软件包:无更改
    • 我们已经添加了异常处理和日志记录,但没有学到任何新的东西,现在我们将继续这条路

    更新:在“正常”情况下,包括记录了多个错误的情况下,我们会执行相同的操作。我们订阅一个物联网主题,发布一条消息,并等待长达5秒钟的响应。这些执行都没有在等待响应时超时(我们最多等待5秒,如果没有收到响应,则返回错误),并且Lambda执行都没有超时。在上述情况下(日志中的请求id a71447b0-19f8-456c-b163-47e0408bf3a1),我们不这样做,因为据我所知,我们的代码没有运行-没有日志表明它运行


    这种情况并不经常发生。在过去的几天里,我看到大约每25人中就有1人被处决。这并没有看到太多的负载,所以我们只进行了大约190次调用(到目前为止有8次调用失败)。

    几个月后,我们回来报告这到底是什么,以及如何解决它

    不明显的是(但事后看来,可能应该是这样的),其根源是在lambda中使用MQTT.js(作为AWS IOT SDK的一部分)。特别是当lambda未激活时,它有时会断开连接-这是合理的预期。这里发生的是,MQTT.js在断开连接时触发一个事件,该事件可能在不可预知的时间运行

    它的长与短是我们需要处理
    错误
    关闭
    事件。如果它们没有被处理,那么我们有一个未处理的异常,正如我上面所描述的。解决这个问题非常简单-我们只需处理这些事件并创建一个新的客户端等

    我认为我们应该比以前简单得多地解决这个问题——我们并不清楚它与MQTT有关(但一旦我们意识到这是一个问题,解决起来就相对比较快)



    作为补充说明,可能值得指出的是,最新的AWS IoT SDK在底层并不使用MQTTjs。我不知道这样做的动机到底是什么,但我不知道这个问题/答案在未来会有多大用处。你使用的是哪个版本?NodeJs是v10.3如果你的回答是200,但没有定义,我们没有正确地从代码返回。据我所知,我们的代码甚至没有在这个调用上运行我知道。那么你的lambda函数里有什么?