【问题标题】:How to run long running task with aws lamba with cloudwatch event如何使用带有 cloudwatch 事件的 aws lambda 运行长时间运行的任务
【发布时间】:2019-01-19 12:05:34
【问题描述】:

我正在运行一个每天运行的 cron,它连接到数据库(x),并将数据从 x 数据库导出到 y 数据库,然后从 x 数据库中删除该数据。整个执行时间超过 5 分钟。

我正在考虑将 lambda 与 cloudwatch 事件一起使用,但 lambda 的执行限制为 5 分钟。我曾想过批量运行查询并多次运行 lambda,但是我不知道 lambda 应该运行多少次。有什么方法可以用 lambda 完成这项任务,还是有其他解决方案?

【问题讨论】:

    标签: cron aws-lambda amazon-cloudwatch


    【解决方案1】:

    我建议使用一些 AWS 容器服务(ECS/EKS/Fargate)来执行“导出容器”:例如 ECS 也支持计划执行:

    “您可以使用 CloudWatch Events 规则和目标按类似 cron 的计划运行 Amazon ECS 任务。”见:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/scheduled_tasks.html

    使用它,您不会达到 lambda 中的 5 分钟限制,并且仍然只需为容器运行的时间付费(如果设置正确)。

    【讨论】:

      【解决方案2】:

      您是否考虑过使用 StepFunctions 实现您的 cronjob? 您的问题的一个可能解决方案是小批量处理您的工作。并在您的批次之间检查当前的执行时间。如果执行时间高于特定阈值,您将终止您的 lambda,并且您的 step 函数会启动另一个函数,直到您的整个数据被导出。

      【讨论】:

        【解决方案3】:

        您可以访问上下文中的剩余时间,称为getRemainingTimeInMillis()。密切关注它,并在剩余时间变短时使用标记递归调用相同的 lambda。冲洗并重复。

        危险:您很容易自己不正确地执行 DoS。如果您这样做了,请不要惊慌,但您可能必须删除 AWS Lambda 函数并重新上传它以停止无限循环!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-06
          • 2021-06-28
          • 2017-10-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多