详细信息:我在 Elastic Beanstalk(Web 服务器)上有一个 Web 应用程序,我需要用 PHP 执行几个 cronjob。这些 cronjob 必须连接到 AWS RDS。为此,我创建了一个 Elastic Beanstalk Worker,但我必须付费才能让该 Worker 实例全天可用,而每个 cronjob 最多只需要 20 分钟。
答案1
您可以使用 Batch 执行运行时间较长的作业,或使用 Lambda 执行运行时间较短的作业(少于 5 分钟)。Batch 和 Lambda 都是有效的 CloudWatch 事件目标,因此您不需要同时使用两者来触发 cron 作业。
对于批处理(长期运行):
在 CloudWatch Events 控制台中,设置计划任务 (cron),并为目标配置批处理作业。CloudWatch 将代表您进行 SubmitJob API 调用。 https://docs.aws.amazon.com/batch/latest/userguide/batch-cwe-target.html
对于 Lambda(短期运行):
在 CloudWatch Events 控制台中,设置计划任务 (cron),并为目标指定您的 Lambda 函数。CloudWatch 将自动触发 Lambda 函数。 https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html
答案2
简短回答:CloudWatchEvent -> Lambda fn -> AWS Batch Job
长答案:创建一个计划的 cloudwatch 事件,该事件在特定时间触发。配置一个 lambda 函数以触发此事件。此 lambda 函数将使用 AWS Batch 对作业进行排队(预先配置作业队列和相关项目)。此作业需要指定您要运行的 cron-job。
在这种情况下,Cloudwatch、lambda 和 AWS Batch 实际上是免费的,因此唯一涉及的成本是在作业期间运行您的 ec2 实例。希望这对您有所帮助!