Так у меня есть функциональность в приложении Django Elastic Beanstalk, который работает следующим образом:Запуск хрон в Elastic Beanstalk
- Скачать файл
- Разобрать файл, запустить программу несколько вызовов API, с данными из файла
- обновления базы данных экземпляра EB с новыми данными
В случаях тестирования, где я просто настроить локальные хроны. Я только что вызвал wget
по определенному URL-адресу моего приложения Django, и он запустит эту команду.
Моя проблема заключается в том, как справиться с этим в многоуровневом приложении Elastic Beanstalk. Эта команда должна выполнять только один экземпляр моего приложения EB. Я хочу избежать условий гонки в базе данных и избыточных вызовов внешних API из нескольких экземпляров. то есть только один экземпляр должен записывать в базу данных.
Однако, поиск в Google, показывающий, что создание рабочих мест cron неудобно, особенно если вы новичок в EB, как я. Наиболее перспективным методом звучания является метод cron.yaml
, но, похоже, не существует примера создания рабочей среды cron в любой точке Интернета из того, что я вижу.
Мое понимание:
- Вы включать cron.yaml файл в корневом каталоге вашего проекта EB.
- Разверните проект
- Задачи cron автоматически настраиваются в рабочей среде (?).
- Определенная вами команда запускается в указанное время (и).
Мой вопрос: как вы убедитесь, что только один экземпляр выполнит эту команду? У меня есть правильная идея о том, как работает cron.yaml
или есть что-то, что мне не хватает
В конце концов, выяснилось, что после долгих проб и ошибок, его приятно получить окончательный ответ, изложенный для этого для других людей с этой проблемой. – GreenGodot