如何使用CloudWatch Event使用AWS Lamba运行长时间运行的任务

时间:2018-08-12 16:40:32

标签: cron aws-lambda amazon-cloudwatch

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

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

3 个答案:

答案 0 :(得分:0)

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

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

使用此方法,您不会达到lambda的5分钟限制,而只会支付容器运行的时间(如果设置正确)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以访问上下文中的剩余时间,称为getRemainingTimeInMillis()。请留意它,并在剩余时间变少时用标记递归调用同一lambda。冲洗并重复。

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