У меня есть кластер AWS ECS, единственная цель которого - запускать запланированную задачу каждые 12 часов. В настоящее время я оставляю кластер масштабированным до 1 экземпляра, чтобы задачу было где запустить. Вместо этого я хотел бы оставить кластер на 0 экземпляров и настроить его на автоматическое масштабирование до 1 экземпляра при запуске запланированной задачи, а затем обратно до 0 после завершения задачи.
Мои исследования показывают, что автоматическое масштабирование ECS обычно используется для масштабирования экземпляров в соответствии с такими показателями, как использование ресурсов, поэтому то, что я хочу, может оказаться невозможным. Ближайшее решение, которое я нашел, - это создание запланированного действия для группы автоматического масштабирования, как описано. Вот; Я мог бы запланировать масштабирование кластера каждые 12 часов, непосредственно перед запуском запланированной задачи, хотя я не уверен, как я могу гарантировать, что кластер снова масштабируется только после завершения задачи. (По сути, это решение, предложенное этот ответ, но ему уже больше двух лет, и я надеюсь, что ситуация изменилась, и я могу позволить себе то, что я хочу.)
Поэтому в идеале кластер должен масштабироваться в соответствии с самой запланированной задачей. Это возможно?
Можете ли вы запустить задачу в Контейнер Fargate?
С Fargate вам не нужно запускать какие-либо инстансы EC2 и управлять ими, просто запланируйте запуск задания в Fargate и сделайте это. Он запускает стандартные образы докеров, такие же, как в кластере ECS на базе EC2. Единственное ограничение - он не может привилегированные операции например, монтирование сетевых файловых систем или создание дочерних контейнеров. Но если вам это не нужно, вы должны серьезно подумать об этом.
Надеюсь, это поможет :)
Поскольку вы говорите, что вам нужно 500 ГБ хранилища, вы можете подумать об их оркестровке с помощью AWS Step Function. Вызвать Шаг Функция каждые 12 часов и каждый раз:
Создайте AWS Batch задание, указав тип экземпляра и необходимое дисковое пространство. Вы даже можете использовать Спотовые экземпляры снизить стоимость.
Подождите, пока работа не будет завершена.
Сообщите об успехе / повторите попытку.
В консоли Step Functions есть образец проекта. Управление пакетным заданием это делает именно это.
В качестве альтернативы вы можете сделать то же самое без AWS Batch, если хотите, и создать настраиваемую функцию Lambda для раскрутки экземпляра, ожидания успеха, запуска задачи, ожидания успеха, снятия экземпляра, ожидания успеха. Но вы можете использовать Batch, чтобы сделать все это за вас.
Надеюсь, это поможет :)