Допустим, у меня запущена служба ECS. Он настроен на выполнение не менее 2 задач, желаемое количество равно 2, а максимальное количество задач равно 10. Минимальный процент исправности установлен на 100, максимальный процент установлен на 150.
Служба ECS управляется с помощью шаблона CloudFormation.
Если я обновлю свой шаблон CloudFormation службы ECS, изменив тег образа докера, который я хочу использовать, и применим эти изменения к стеку - начнется новое развертывание.
Предположим, что перед развертыванием приложение находилось под высокой нагрузкой, и число задач было увеличено до максимум 10 запущенных задач за счет автоматического масштабирования.
Что я ожидаю от развертывания службы ECS в таких условиях, так это:
- 10 старых задач выполняются.
- 5 новых задач.
- 5 старых задач переведены в состояние слива.
- 5 старых задач остановлено.
- 5 новых задач.
- Оставшиеся 5 старых заданий переведены в состояние слива.
- 5 старых задач остановлено.
Что я получаю:
- 8 старых задач переведены в режим слива.
- Требуемое количество новых развертываний, установленное на 10 путем автоматического масштабирования.
- 5 новых задач.
- 8 старых задач остановлено.
- 5 новых задач.
- 2 старых задания переведены в состояние слива.
- 2 старые задачи остановлены.
Проблема в том, что ECS не учитывает количество старых задач, запущенных перед развертыванием. Он пытается выполнить развертывание с желаемым счетчиком 2, который изначально установлен в шаблоне CloudFormation. Это приводит к неожиданному завершению 8 задач, прежде чем начнется автоматическое масштабирование.
Есть ли способ достичь чего-то вроде «ожидаемого» сценария во время развертывания новой версии, если служба обновляется через CloudFormation? Я знаю, что мог вручную изменить желаемое количество в шаблоне перед развертыванием на количество задач, которые в данный момент выполняются. Может быть, есть лучший способ?