GGv2: 固定(长期)的Node.js Lambda超时

0

【以下的问题经过翻译处理】 我基于这里的示例(https://github.com/aws-samples/aws-greengrass-lambda-functions)创建了一个基于Node.js的Lambda函数,并将其导入为Greengrass V2组件。另外,我将Lambda函数组件配置为'pinned'或'long-lived'函数(即,它应该在后台持续运行)。同时,Lambda函数被配置为不在Greengrass容器中运行(即 NoContainer)。

最初,在部署Lambda函数时,它根本不会运行。然后,将 timeoutInSeconds 值从3增加到60后,我能够看到函数启动并运行,但约60秒后就会通过 SIGTERM 被终止。将 timeoutInSeconds 值增加到允许的最大值(2147483647)似乎也不改变这个情况(这也不是一个好的解决方案)。

由于'pinned'函数应该能够无限期地运行,我认为 timeoutInSeconds 值对函数的执行不会有影响(即,Greengrass不应该将其杀死)?

我看到其他用户的一些较旧的评论/注释(https://www.repost.aws/questions/QUJcrxYJosQHe_jTAyaAzYOw/issues-node-js-hello-world-running-core-1-9-2)表示,当Lambda的处理程序函数中未调用 callback() 函数时,就可能会出现此问题。但我尝试过这种方法,它似乎并没有解决我的问题。我还尝试使用异步(async)处理程序,但这没有产生任何不同的行为。

在Greengrass V2中是否有其他必须正确配置的设置?Lambda组件?Lambda函数本身?我需要以特定方式构建Lambda处理程序吗?是否有比上面链接中更好的Lambda函数示例适用于Greengrass?

谢谢!

profile picture
专家
已提问 5 个月前17 查看次数
1 回答
0

【以下的回答经过翻译处理】 正如你所猜测的那样,超时时间被转换为毫秒。 我在树莓派3b上复制了这种行为,通过禁用除一个核心外的所有核心并将其限制为600mhz。根据您使用的设备,您在这里可能会遇到由于单核性能导致的一些问题。

部署配置以将超时时间设置为90秒确实可以缓解这个问题,因为它给予了更多的等待时间:

{
  "reset": [],
  "merge": {
    "statusTimeoutInSeconds": 90
  }
}

与此同时,我可以向团队提出请求,调查是否可以使用其他方法来跟踪lambda函数进程是否正常运行。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则