【问题标题】:AWS Lambda Function Keep It AliveAWS Lambda 函数保持活力
【发布时间】:2018-02-18 23:50:15
【问题描述】:

我在 AWS Lambda 上有一个 nodejs 函数,它在 Async Parallel 中运行多个 setTimeouts。有些是即时的,有些可能会在 30 分钟内完成。我遇到的问题是它永远不会达到 30 分钟超时,因为它会闲置然后死掉。在等待触发其他超时函数时,是否有办法让 lambda 函数保持活动状态。

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda


    【解决方案1】:

    Lambda 的生命周期最长为 300 秒。

    见:AWS Lambda Limits

    无法将其增加超过 300 秒。引入 Lambda 时,最长执行时间为 60 秒。后来增加到 300 秒。

    您需要重新审视您的设计并检查 Lambda 是否是正确的解决方案。运行符合 Lambda 规范的按需 EC2 实例可能是一种解决方案。或者说出您的问题,我们可以提出解决方案。

    【讨论】:

    • 我完全改变了路线。我制作了一个 express nodejs 应用程序,它只监听 post 请求并在后台运行 setTimeouts。那样没有时间限制。
    【解决方案2】:

    除了您不能这样做之外,请参阅 hellov 的回答,我会说无论如何这是一个不正确的设计选择。如果您需要长期服务,直接使用 ec2 实例将是更好的选择。

    如果您只需要在 30 分钟后执行一次操作,那么我会看到当时在 lambda 代码本身之外生成 AWS Lambda 事件。换句话说,Lambda 是为了纯粹的计算,等待里面的任何东西似乎是错误的方法。

    【讨论】:

      【解决方案3】:

      正如其他人所提到的,Lambda 函数的最大执行时间有 300 秒的硬性限制。根据您对问题的快速概述,我认为 Lambda 不是正确的解决方案。

      如果您需要处理这些长时间运行的异步任务,则需要在这些不同任务之间添加某种类型的“连接器”。一种可能的解决方案是使用SQS Queues

      组件 A --> SQS 1 --> 组件 B

      【讨论】:

        【解决方案4】:

        您的 Lambda 函数会执行一些并行任务。在 Lambda 中执行此操作的最佳方法是将每个任务拆分为一个单独的 Lambda,然后以对您的应用程序最有意义的方式协调这些任务。

        这可以通过几种不同的方式完成(最佳方式取决于您的应用程序):

        1. Step Functions
        2. AWS Lambda + SNS
        3. AWS Lambda + SNS/SQS
        4. AWS Lambda + Kinesis
        5. AWS Lambda + DynamoDB 流

        【讨论】:

        • 如果您描述了这些并行任务是什么,我们可以更好地推荐哪种方法更适合您的用例。
        猜你喜欢
        • 2021-08-19
        • 2016-04-27
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 2011-05-07
        • 1970-01-01
        相关资源
        最近更新 更多