Запуск crontab в группе автоматического масштабирования AWS

Запуск crontab в группе автоматического масштабирования AWS

У меня следующая настройка: 1 сервер с приложением X, которое запускает crontab раз в час. Crontab подключается к базе данных, выполняет некоторые сложные вычисления, экспортирует данные в специальный файл данных и перезапускает приложение. Экспорт может длиться от 10 до 40 минут.

Я хочу:

  • Переместите этот сервер в AWS и используйте группу автоматического масштабирования.

  • Crontab должен работать только на одном сервере, выполнять вычисления, экспортировать данные и каким-то образом синхронизировать их со всеми остальными работающими серверами.

  • Все серверы должны автоматически обнаруживать новые данные и безопасно перезапускаться (например, не во время синхронизации).

  • Новые серверы, запускаемые из групп автоматического масштабирования, автоматически извлекают файлы данных при запуске перед запуском самого приложения.

У меня нет «простой» идеи, как это сделать, или какого-либо специфического решения AWS.

Вот моя идея:

  • Запустите один сервер вне группы автомасштабирования. Выполняйте crontab только на этом сервере. Все файлы данных будут загружены в S3.

  • Все серверы автомасштабирования будут иметь crontab, который будет запускаться каждую минуту и ​​проверять наличие уникального файла «please_download_me_TIMESTAMP»

  • После загрузки файлов скрипт перезапустит службу.

  • Если запущен новый сервер, при запуске он автоматически извлечет все файлы из S3.

Как вы думаете, это сработает?

решение1

Это распространенная проблема в AWS EC2, и она была решена. Смотретьhttps://gist.github.com/kixorz/5209217для примера с реализацией.

решение2

Признаю, что это старый вопрос, заданный Джо еще в 2015 году, поэтому я, пожалуй, отвечу на него.

Если работа выполняется раз в час и занимает 10-40 минут, вы в любом случае платите за целый час. Нет смысла запускать и выключать серверы, просто оставьте сервер работающим.

Если бы это было реже, вы могли бы иметь синхронизированное событие, которое помещает сообщение в очередь SQS - это может быть сделано с помощью t2.nano или, может быть, есть более дешевый способ сделать это с помощью сервисов Amazon - Lambda? Автоматическое масштабирование на основе размера очереди. Когда есть данные для обработки, сервер создается, обрабатывает данные, перемещает их туда, куда нужно, а затем отключается.

Другим способом сделать это было бы масштабирование по времени, но опять же, только если бы оно происходило реже, чем раз в час.

Связанный контент