Я рассматриваю возможность использования AWS CodeDeploy для плавных развертываний зеленого, синего цвета.Однако на одной из первых страниц документации в статье «Интеграция продуктов и услуг / Amazon EC2 Autoscaling» я столкнулся с фундаментальной проблемой - крайне нежелательно делиться ASG между приложениями AWS CodeDeploy / группами развертывания.
Язапуск десятков служб ECS (app_one
, app_two
, app_xxx
) в одном кластере ECS (backend
).Они работают с общими экземплярами EC2, управляемыми одной AutoScalingGroup.Каждый app
имеет свою собственную TargetGroup, но все они используют один и тот же ElasticLoadBalancer и добавляют правила к своему слушателю (/api/app_one
переходит в TargetGroup, используемую app_one
, /api/app_two
переходит к app_two
и т. Д.).
Я хочу продолжать использовать общие экземпляры EC2 в моем кластере ECS, но зеленый / синий развертывают мои приложения, иногда выполняя развертывание нескольких приложений одновременно.
Мои вопросы:
я должен отказаться от CodeDeploy все вместе?В конце концов, что мне нужно, это вопиющий разрыв фундаментальных понятий.Мои приложения работают на не очень маленьких экземплярах, но обычно используют только 10-30 процентов из них.Для меня нет ничего необычного в том, чтобы одновременно запускать 5 или 6 задач на одном компьютере из нескольких служб ECS.Я не могу создать разные ASG для каждого app
, так как это резко увеличит количество моих экземпляров и счет AWS.
, если ответ выше - да, каковы мои альтернативы AWS?Шаговые функции AWS, выполняющие масштабирование ASG, запуск задачи ECS, настройки ELB и так далее для меня?
Возможно ли вообще выполнять скоординированное развертывание между двумя или более группами развертывания CodeDeploy?Допустим, я хочу обновить две службы ECS до новых версий одновременно: app_one
и app_two
.В идеале я ожидал бы, что CodeDeploy будет запускать новые контейнеры в общей инфраструктуре, добавляя новые экземпляры EC2, если необходимо, меняя TargetGroupArn сразу в нескольких правилах ELB, а затем уничтожая старые контейнеры.
Я быНе называйте мой вариант использования экзотическим или редким - я хочу, чтобы мое приложение делило ресурсы, когда это возможно, и иногда мне нужно развернуть несколько служб одновременноЧестно говоря, я ошеломлен тем, что, возможно, даже невозможно сделать это чисто, без написания тонны AWS Step Functions и Lambdas.
Возможно, что-то не так с моей архитектурой все вместе?Спасибо за любые идеи и предложения.