Развертывание AWS Blue / Green с ECS для переключения целевой группы с одного ELB

У меня есть кластер ECS (example-ecs-cluster) с типом запуска ECS Service EC2 (example-ecs-service). Я пытаюсь создать тип развертывания Blue / Green с переключением целевой группы из CodeDeploy, что означает, что новая версия кода должна сначала обслуживаться с тестового порта, а затем должна быть заменена на порт prod. Я создал ELB и прикрепил двух слушателей, связанных с двумя разными целевыми группами. Одна целевая группа (example-target-group) для продукта с портом 80 и одна целевая группа (example-target-group2) для теста с портом 8080. Существует только одно определение задачи. Я могу убедиться, что при запуске развертывания создаются две разные версии задач. Итак, я ожидаю увидеть, что новая ревизия должна быть доступна через тестовый порт 8080, и как только CodeDeploy перенаправит трафик из исходной задачи, установленной в задачу замены, он должен быть доступен через порт 80. Однако, когда новое развертывание запускает оба Тестовый порт и порт prod служат для новой ревизии одновременно, чего не должно происходить.

ELB
 - Listener 80 --> example-target-group
 - Listener 8080 --> example-target-group2

Я создал службу ECS только с example-target-group, потому что службы типа контроллера развертывания CODE_DEPLOY не поддерживают несколько целевых групп.

aws ecs create-service --cluster example-ecs-cluster --service-name example-ecs-service --task-definition nodejs-hello-world-task-def --desired-count 1 --deployment-controller type = CODE_DEPLOY --launch-type EC2 --load-balancers targetGroupArn = arn: aws: elasticloadbalancing: us-east-1: 548754742764: targetgroup / example-target-group / 0f9efaeceb63ac61, containerName = nodejs-hello-world, containerPort = 8080

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

Каков предпочтительный способ обработки этого сценария с использованием замены целевой группы? Спасибо!


person quartaela    schedule 05.12.2019    source источник
comment
Вы можете указать 2 целевые группы, можете ли вы посмотреть этот блог: aws.amazon.com/blogs/devops/   -  person shariqmaws    schedule 05.12.2019
comment
@shariqmaws благодарит, но в этой документации используется контейнер ECS типа FARGATE вместо EC2. Думаю, я смогу преодолеть это, включив динамическое сопоставление портов   -  person quartaela    schedule 05.12.2019


Ответы (1)


Я сделал это с помощью динамического сопоставления портов, объяснение здесь. При таком подходе к моему кластеру ECS подключены один экземпляр EC2 и одна служба ECS. При каждом развертывании ELB переключает целевую группу.

person quartaela    schedule 05.12.2019
comment
вы можете упростить его, используя терраформ. попробуйте это: ecs-with-codepipeline-example-by-terraform - person GNOKOHEAT; 22.01.2020