Как настроить автоматическое масштабирование Amazon EC2 для создания экземпляров программным способом на основе события базы данных?
У меня есть приложение, которое ежемесячно обрабатывает несколько десятков больших файлов (по 100 МБ каждый). В настоящее время один раз в месяц я вручную создаю экземпляр для каждого файла, а затем запускаю сценарий оболочки, чтобы запустить задачу обработки для каждого экземпляра и убить экземпляры после завершения всей обработки.
Я хочу автоматизировать это, настроив группу автоматического масштабирования EC2 для запуска нового экземпляра при создании новой записи в базе данных, означающей, что новый файл готов к обработке. Этот экземпляр будет заполнен кодом, который автоматически подключится к базе данных, найдет новый файл, пометит его как «в процессе» и начнет его обработку.
Я контролирую, когда файлы добавляются в систему, поэтому мне не нужно беспокоиться о том, что какой-то пользователь добавит 1000 файлов и превысит мою квоту EC2. Однако я не вижу очевидного способа настроить автоматическое масштабирование таким образом. Кажется, это только запускает создание экземпляра на основе использования ЦП или ELB.
Ваши наблюдения верны - вы не сможете использовать собственные элементы управления автоматическим масштабированием Amazon для этого типа событий. Однако вы можете создать сценарий с помощью инструментов командной строки Amazon.
Вы можете запросить файл любым количеством способов (например, inotify / incron, периодический SQL-запрос к базе данных или даже ls
в папке) и сделайте запрос Amazon API, чтобы увеличить емкость вашей группы AutoScaling, изменив желаемую емкость при срабатывании события.
После завершения задания вы можете заставить экземпляр автоматически завершать работу - либо путем получения идентификатора экземпляра из URL-адреса метаданных и передачи его непосредственно в интерфейс командной строки Amazon, либо путем установки экземпляра для завершения работы при завершении работы и выдачи shutdown -h now
как только ваша работа по обработке будет завершена.
Я не знаю деталей вашей реализации, так что YMMV здесь дико.