AWS ECS: мониторинг статуса обновления сервиса

Я пытаюсь перенести набор микросервисов из 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>

Наконец, я попытался смоделировать случай, когда вновь созданное изображение содержит плохой код. Таким образом, новые задачи не смогут быть развернуты. Я был свидетелем того, что Fargate будет продолжать попытки (без остановки) развернуть новые задачи. Более того, помимо журналов событий, команда describe-services не содержит релевантной информации, кроме того, что делает Fargate (например, регистрация / отмена регистрации задач). Я удивлен, что мне не удалось найти ни одного механизма, который инструктирует Fargate или службу останавливать развертывание и откат к уже существующему.

Я нашел эту статью (https://aws.amazon.com/blogs/compute/automating-rollback-of-failed-amazon-ecs-deployments/), который предоставляет решение. Однако это довольно сложный вариант, предполагающий, что каждое новое развертывание запускается новым определением задачи, чего я не хочу.

Поэтому, учитывая то, что я описал выше, надеюсь, вы сможете ответить на следующие вопросы:

1) Использование команд интерфейса командной строки (в целях автоматизации) Есть ли способ указать Fargate автоматически остановить текущее развертывание после неудачного развертывания новых задач после нескольких попыток?

2) Есть ли способ отслеживать текущее состояние развертывания с помощью команд интерфейса командной строки? Например, при выполнении обновления службы в Docker Swarm терминал создает журналы в реальном времени для процесса обновления.

3) Есть ли способ для Fargate сигнализировать код ошибки, флаг или сообщение после неудачного развертывания?


person Nicolas El Khoury    schedule 10.01.2019    source источник
comment
1) Не знаю. 2) Я отслеживаю Fargate с помощью журналов CloudWatch. 3) При неудачном развертывании AWS HealthCheck не сработает, не так ли? И это будет отображаться в журналах CloudWatch.   -  person Niklas R.    schedule 25.01.2019


Ответы (1)


На данный момент ECS не предлагает напрямую статус развертывания. После запуска развертывания невозможно определить его статус, кроме постоянного опроса обновлений до тех пор, пока у вас не будет достаточно информации, чтобы на ее основе сделать вывод. Плюс unexpected container exits нигде не логируются. Вы должны искать через неудавшиеся задачи. Я получаю их с помощью правила cloudwatch, которое запускает лямбду при изменении состояния задачи.

Я рекомендую вам прочитать: https://medium.com/@aaron.kaz.music/monitoring-the-health-of-ecs-service-deployments-baeea41ae737

person cognizant-connoisseur    schedule 04.10.2019