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
EXPERTE
gefragt vor 6 Monaten19 Aufrufe
1 Antwort
0

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

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

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

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

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen