Подробности: у меня есть веб-приложение на Elastic Beanstalk (веб-сервер), и мне нужно несколько cronjobs для выполнения на PHP. Эти cronjobs должны подключаться к AWS RDS. Для этого я создал Elastic Beanstalk Worker, но я должен заплатить за то, чтобы экземпляр worker был доступен весь день, когда каждому cronjobs требуется максимум 20 минут.
Вы можете использовать пакетную обработку для более длительных заданий или Lambda для более коротких заданий (менее 5 минут). Пакетная и Lambda являются действительными целевыми объектами событий CloudWatch, поэтому вам не нужно использовать их обе для запуска задания cron.
В консоли CloudWatch Events настройте запланированную задачу (cron), а для цели настройте пакетное задание. CloudWatch выполнит вызов API SubmitJob от вашего имени. https://docs.aws.amazon.com/batch/latest/userguide/batch-cwe-target.html
В консоли CloudWatch Events настройте запланированную задачу (cron), а для цели укажите вашу лямбда-функцию. CloudWatch автоматически активирует функцию Lambda. https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html
Краткий ответ: CloudWatchEvent -> Lambda fn -> AWS Batch Job
Длинный ответ: создайте запланированное событие облачных часов, которое запускается в определенное время. настроить лямбда-функцию для запуска по этому событию. Эта лямбда-функция ставит задание в очередь с помощью AWS Batch (предварительно настраивая очередь заданий и связанные элементы). В этом задании необходимо указать задание cron, которое вы хотите запустить.
Cloudwatch, lambda и AWS Batch в этом случае практически бесплатны, поэтому единственные затраты - это запуск вашего экземпляра ec2 на время выполнения вашей работы. Надеюсь это поможет!