У нас есть задача, которая загружает некоторые файлы конфигурации из внешнего источника данных. После загрузки настроек мы хотели бы иметь возможность перезапустить все задачи в службе, чтобы настройки распространялись на все экземпляры.
Каков наилучший способ перезапустить все службы?
У нас есть «обходной путь», который включает установку «количества задач» на 0, а затем резервное копирование, но это определенно не то, что должно быть сделано и имеет время простоя.
amazon-web-services
docker
amazon-ecs
Dennkster
источник
источник
Ответы:
Использование инструмента AWS CLI:
источник
То, что вы хотите сделать, по сути то же самое, что и повторное использование Сервиса.
Для повторного развертывания службы без простоя:
Это должно запустить новые задачи для нового определения задачи, а затем убить старые задачи для старого определения задачи, эффективно перезапуская задачи без простоя.
Смотрите: UpdateService
источник
это сработало для меня:
затем задачи воссоздают в тех же экземплярах.
если вам нужны новые экземпляры, используйте это:
источник
Задача как строительный блок ECS может быть остановлена вызовом StopTask . Сервис состоит из базовых задач, которые могут быть остановлены одним и тем же вызовом API. Единственная недостающая часть здесь - это foreach вокруг результатов вызова ListTasks с определенным параметром семейства . Я написал простую лямбда-функцию, которая может помочь вам в этом.
источник
Я расширяю ответ @ user326608 выше (спасибо за понимание!).
Это перезапустит ВСЕ ЗАДАЧИ ДЛЯ ВСЕХ УСЛУГ ДЛЯ КЛАСТЕРА , остановив все его задачи. Каждый сервис будет автоматически запускать
X
количество новых задач, гдеX
находится сервисdesired task count
.источник
Исходя из документации Amazon, кажется, что вы должны быть в состоянии написать сценарий для рассматриваемых операций, используя вызовы API UpdateService . Есть несколько примеров кода, доступных по предыдущей ссылке, возможно, вы сможете адаптироваться. Похоже, что написание сценария для перезагрузки служб с использованием соответствующего определения задачи после обновления конфигураций задачи было бы наиболее элегантным решением проблемы.
Существует больше документации по использованию AWS CLI с ECS, которая, кажется, будет самым простым способом справиться с пакетным сценарием при перезапуске сервисов.
источник
Отлично работает https://github.com/fdfk/ecsServiceRestart
источник
Я работал над этим. Было бы очень полезно иметь возможность перезапускать одну задачу одновременно. Сценарий ниже - это то, что я сейчас использую. Это довольно осторожно. Требуется, чтобы вы нажали «Return» за каждую задачу. Существует команда для ожидания стабильности службы, но это не означает, что задача работоспособна. И я мог бы поставить задержку. Но в конце концов, если дела пойдут плохо, скрипт просто медленно убьет приложение. Так...
источник
У меня есть скрипт Python Boto3, который делает FF:
ecs_client.list_tasks(cluster=mycluster,serviceName=myservice,desiredStatus='RUNNING')
ecs_client.stop_task(cluster=mycluster,task=mytask)
ecs_client.describe_services(cluster=mycluster,services=[myservice])
while myservice['services'][0]['runningCount'] < myservice['services'][0]['desiredCount']:
Если цикл while больше не является истинным - это означает, что и количество выполняемых, и желаемых счетчиков равны, остановите следующую задачу в списке.
Это фактический поток, и я не могу показать реальный код, так как я все еще работаю на своей текущей работе, и весь мой код принадлежит им :)
источник