Я знаю, что это старая ветка, но решение гораздо проще, чем большинство ответов здесь.
Как обновить работающий контейнер в два этапа:
Ниже предполагается, что у вас есть служба, выполняющая задачу, которая ссылается на контейнер с тегом latest
(или любой другой статический тег, который не изменяется при обновлении контейнера).
- Загрузите свой новый контейнер в хранилище
- Вручную убить ваши задачи
Если цель состоит в том, чтобы мы получили новую сборку в дикой природе, нам на самом деле не нужно полагаться на наш сервис для этого (и я бы сказал, мы не должны полагаться на это). Если вы убьете свою задачу, служба обнаружит, что у нее нет Desired Count
запущенных задач, и просто раскрутит новую. Это вызовет повторное извлечение вашего контейнера на основе того же тега.
Службы ECS являются сетью безопасности HA, а не заменой вашего конвейера CD / CI.
Бонус: если цель состоит в том, чтобы служба распознала, что новый контейнер выдвинут (независимо от тегов), мы должны рассмотреть последствия этого. Мы действительно хотим, чтобы базовый сервис контролировал наш конвейер развертывания для нас? Скорее всего нет. В идеале вы будете загружать свои контейнеры разными тегами (в зависимости от версии выпуска или чего-то еще). В этом случае препятствием для развертывания является то, что сервис должен быть уведомлен о чем-то новом - опять же, это защитная сеть для сервиса, и ничего более.
Как развернуть новые теги в три этапа:
- Загрузить свой новый
container:tag
в хранилище
- Создайте новое определение задачи, ссылаясь на новое
tag
- Обновите свой сервис, чтобы ссылаться на новое определение задачи
- Осторожно здесь! Если вы
minimum healthy
выбрали, 0%
как предлагают некоторые другие ответы, вы предоставляете AWS полномочия полностью уничтожить весь сервис для развертывания нового определения задачи. Если вы предпочитаете постепенное / постепенное развертывание, установите минимум на что-то >0%
.
- В качестве альтернативы, установите для вас
minimum healthy
значение, 100%
а для вашего maximum healthy
- что-нибудь, >100%
чтобы позволить вашему сервису развертывать новые задачи, прежде чем убивать старые (сводя к минимуму воздействие на ваших пользователей).
С этого момента ваша служба автоматически распознает, что вы указали новую задачу, и начнет ее развертывание на основе настроенных вами пороговых значений minimum
/ maximum
healthy.