AWS ECS: принудительное повторное развертывание на новом последнем образе в ECR - PullRequest
1 голос
/ 20 февраля 2020

Я знаю, что в этом направлении уже существует бесчисленное множество вопросов, но, к сожалению, я пока не смог найти правильный ответ. Если сообщение уже существует, просто поделитесь ссылкой здесь.

У меня есть несколько конвейеров gitlab CI / CD. Первый конвейер использует Terraform для создания полной инфраструктуры для кластера ECS на основе Fargate. Второй / третий конвейер создает ночные сборки фронтэнда и бэкенда и помещает Docker изображение с тегом «последний» в ECR (промежуточной) учетной записи AWS.

Что я хочу сейчас для этого необходимо перераспределить соответствующие задачи ECS, чтобы использовать самые последние образы Docker. Я действительно думал, что есть способ сделать это через CloudWatch Events или что-то еще, но я не нашел здесь действительно хорошей отправной точки. Обходной путь должен был бы установить AWS CLI в конвейере CI / CD и затем выполнить обновление службы с «принудительным новым развертыванием». Но это не кажется мне очень элегантным. Есть ли лучший способ здесь?

Условия:

  • Решение должно быть полностью автоматизировано (либо в AWS, либо в Gitlab CI / CD)
  • Переключение AWS CodePipeline не обсуждается
  • В идеале, максимально приближенный к AWS стандартам. Я хотел бы избежать обширных лямбда-функций, которые выполняют многочисленные действия из-за их удобства обслуживания.

Большое спасибо!

Ответы [ 3 ]

1 голос
/ 21 февраля 2020

В качестве общего комментария не рекомендуется всегда указывать один и тот же тег контейнера sh, поскольку откат к предыдущей версии в случае сбоя становится действительно трудным.

Один подходящий вариант - использовать теги git. Допустим, вы развертываете версию v0.0.1. Вы можете создать файл app-version.tf, который будет содержать переменную backend-version = v0.0.1, на которую можно ссылаться в определении задачи службы ecs. То же самое можно сделать для создания контейнера, используя git describe.

Итак, вы получите новое определение задачи для каждого тега git и возможность отката, просто изменив значение в конфигурации terraform.

0 голосов
/ 07 марта 2020

Хорошо, для всех, кто заинтересован в ответе. Я решил это следующим образом: я выполняю следующую команду AWS CLI в конвейере CICD

aws ecs update-service --cluster <<cluster-name>> --service <<service-name>> --force-new-deployment --region <<region>>

Не то решение, которое я искал, но оно работает.

0 голосов
/ 21 февраля 2020

Полезно ссылаться на изображения, используя либо дайджесты, либо уникальные неизменяемые теги . После того, как конвейер выдвинет образ, он может:

  1. Получить дайджест изображения / уникальный тег
  2. Создать новую версию определения задачи
  3. Инициировать развертывание ECS с новым определением задачи.

Как упоминает sgramo93, большим преимуществом является то, что откат вашего приложения может быть осуществлен путем развертывания более старой версии определения задачи.

...