【发布时间】:2018-02-18 23:50:15
【问题描述】:
我在 AWS Lambda 上有一个 nodejs 函数,它在 Async Parallel 中运行多个 setTimeouts。有些是即时的,有些可能会在 30 分钟内完成。我遇到的问题是它永远不会达到 30 分钟超时,因为它会闲置然后死掉。在等待触发其他超时函数时,是否有办法让 lambda 函数保持活动状态。
【问题讨论】:
标签: node.js amazon-web-services aws-lambda
我在 AWS Lambda 上有一个 nodejs 函数,它在 Async Parallel 中运行多个 setTimeouts。有些是即时的,有些可能会在 30 分钟内完成。我遇到的问题是它永远不会达到 30 分钟超时,因为它会闲置然后死掉。在等待触发其他超时函数时,是否有办法让 lambda 函数保持活动状态。
【问题讨论】:
标签: node.js amazon-web-services aws-lambda
Lambda 的生命周期最长为 300 秒。
无法将其增加超过 300 秒。引入 Lambda 时,最长执行时间为 60 秒。后来增加到 300 秒。
您需要重新审视您的设计并检查 Lambda 是否是正确的解决方案。运行符合 Lambda 规范的按需 EC2 实例可能是一种解决方案。或者说出您的问题,我们可以提出解决方案。
【讨论】:
除了您不能这样做之外,请参阅 hellov 的回答,我会说无论如何这是一个不正确的设计选择。如果您需要长期服务,直接使用 ec2 实例将是更好的选择。
如果您只需要在 30 分钟后执行一次操作,那么我会看到当时在 lambda 代码本身之外生成 AWS Lambda 事件。换句话说,Lambda 是为了纯粹的计算,等待里面的任何东西似乎是错误的方法。
【讨论】:
正如其他人所提到的,Lambda 函数的最大执行时间有 300 秒的硬性限制。根据您对问题的快速概述,我认为 Lambda 不是正确的解决方案。
如果您需要处理这些长时间运行的异步任务,则需要在这些不同任务之间添加某种类型的“连接器”。一种可能的解决方案是使用SQS Queues。
组件 A --> SQS 1 --> 组件 B
【讨论】:
您的 Lambda 函数会执行一些并行任务。在 Lambda 中执行此操作的最佳方法是将每个任务拆分为一个单独的 Lambda,然后以对您的应用程序最有意义的方式协调这些任务。
这可以通过几种不同的方式完成(最佳方式取决于您的应用程序):
【讨论】: