我正在运行一个每天运行的cron,该cron连接到数据库(x),然后将数据从x数据库导出到y数据库,然后从x数据库中删除该数据。整个执行过程需要5分钟以上的时间。
我正在考虑将lambda与cloudwatch事件一起使用,但是lambda的执行限制为5分钟。我曾考虑过批量运行查询并多次运行lambda,但是我不知道lambda应该运行多少次。我可以使用lambda来完成此任务吗?还是有其他解决方案?
答案 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函数,然后重新上传它才能停止无限循环!