【问题标题】:Run scheduled task in AWS lambda在 AWS lambda 中运行计划任务
【发布时间】:2021-06-11 19:21:46
【问题描述】:

我们正在使用 AWS Lambda 服务运行 C# asp.net 核心应用程序。

为了运行一些计算,我们曾经调用我们应用程序的 API 方法。但是,现在我们需要自动完成。这意味着我们需要每分钟运行一个计划任务(或未来几个单独的任务)。有一个强制性条件,即只能同时运行任务的一个实例。 对于标准服务或容器,我们可以使用第三方库,例如 Hangfire 或 Quartz。但是,在 Lambda 的情况下,它们可以稳定运行,原因有两个:

  1. 多个 Lambda 可以同时启动同一个任务。
  2. 当我们需要运行任务时,Lambda 可以处于睡眠模式。

有什么方法可以解决我的 AWS 服务问题?

也许我们可以安排一个作业,该作业将调用我们将运行任务的方法之一(但在这种情况下,我们如何防止从我们的基础架构中调用此方法?)

或者我们可以在我们的代码中以某种方式配置 LambdaEntryPoint 来解决它吗?

【问题讨论】:

    标签: c# asp.net-core aws-lambda


    【解决方案1】:

    如果我理解你的任务,你需要两件事。

    1. 安排每分钟运行一次 Lambda:我们可以在 cloudwatch event rule 中安排这个

    2. 避免同时运行 1 个以上的 Lambda 实例。我们可以将 concurrency limit 设置为 1,而不是预置并发,而是 Lambda 上的保留并发。

    【讨论】:

    • Lambda 的数量可以甚至必须大于 1。AWS 可以决定它需要多少个 lambda。我需要的是只运行我的计划任务的一个实例(这是我的应用程序的一小部分)
    • 感谢您的链接。我会看看然后回复你
    • 是的.. 理想情况下,如果 lambda 超时时间小于 60 秒,并且如果您每分钟安排一次,我们不应该遇到同时运行相同 lambda 的情况。然而,设置保留并发是我们可以限制同时运行同一个 lambda 的最好方法,即使是偶然的。
    • 感谢您的评论。但经过我所做的所有研究,它仍然不是处理后台任务的最佳方式。有兴趣请看我的回答。
    【解决方案2】:

    经过大量研究,我找到了一个解决方案,可以在单独的稳定服务器(在我的例子中是 EC2)中运行计划任务。 Lambda 的目的不同:它应该用作一些外部事件的触发器,处理这个事件,然后再次进入休眠状态。 后台任务不在此区域内

    【讨论】:

      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 2018-07-14
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多