Я пытаюсь перенести набор микросервисов из Docker Swarm в AWS ECS с помощью Fargate.
Я создал кластер ECS. Более того, я инициализировал репозитории с использованием ECR, каждый из которых содержит изображение микросервиса.
Я успешно разработал способ создания новых изображений и вставил их в ECR. Фактически, с каждым изменением в коде создается новое изображение докера, помечается и отправляется.
Кроме того, я создал определение задачи, которое связано со службой. Это определение задачи содержит один контейнер и всю необходимую информацию. Более того, его служба определяет, что задача будет выполняться в VPC, связана с балансировщиком нагрузки и имеет целевую группу. Я предполагаю, что при каждом новом развертывании используется образ с тегом «последний».
Пока что с тем, что я объяснил, все ясно и работает хорошо.
Ниже часть, которая смущает меня. После каждой новой сборки я хотел бы обновлять сервис для развертывания новых задач с образом обновления. Я использую cli, чтобы сделать это с помощью следующей команды:
aws ecs update-service --cluster <cluster-name> --service <service-name>
Обычно после выполнения команды я отслеживаю журналы развертывания на вкладке событий и проверяю состояние службы с помощью следующей команды:
aws ecs describe-services --cluster <cluster-name> --service <service-name>
Наконец, я попытался смоделировать случай, когда вновь созданное изображение содержит неверный код. Таким образом, новые задачи не смогут быть развернуты. Что я засвидетельствовал, так это то, что Фаргейт будет продолжать (без остановки) развертывать новые задачи. Кроме того, кроме журналов событий, команда describe-services
не содержит релевантной информации, кроме того, что делает Fargate (например, регистрация / отмена регистрации задач). Я удивлен, что мне не удалось найти какой-либо механизм, который инструктирует Fargate или службу остановить развертывание и выполнить откат к уже существующему.
Я нашел эту статью (https://aws.amazon.com/blogs/compute/automating-rollback-of-failed-amazon-ecs-deployments/), которая предоставляет решение. Однако он довольно сложный и предполагает, что каждое новое развертывание запускается новым определением задачи, а это не то, что мне нужно.
Поэтому, учитывая то, что я описал выше, я надеюсь, что вы можете ответить на следующие вопросы:
1) Использование команд консоли (для целей автоматизации) Есть ли способ дать Fargate команду автоматически останавливать текущее развертывание после неудачного развертывания новых задач после нескольких попыток?
2) С помощью команд консоли можно ли отслеживать текущее состояние развертывания? Например, при выполнении обновления службы для службы в Docker Swarm терминал генерирует прямые журналы процесса обновления
3) Есть ли способ у Fargate после неудачного развертывания сигнализировать об ошибке, флаге или сообщении?