Recursos do Application Load Balancer para implantações azul/verde - Amazon Elastic Container Service

Recursos do Application Load Balancer para implantações azul/verde

Para usar Application Load Balancers com implantações azul/verde do Amazon ECS, você precisa configurar recursos específicos que permitam o roteamento de tráfego entre as revisões de serviço azul e verde.

Limitações

As seguintes limitações se aplicam atualmente às implantações azul/verde com Application Load Balancers:

  • Não há suporte para implantações azul/verde ao usar receptores do Application Load Balancer que têm vários tipos de ação configurados com ações sem roteamento. Se as regras do receptor do Application Load Balancer contiverem uma combinação de ações com roteamento e sem roteamento (como redirecionamento, resposta fixa ou autenticação), a implantação falhará.

Grupos de destino

Para implantações azul/verde com o Elastic Load Balancing, você precisa criar dois grupos de destino:

  • Um grupo de destino principal para a revisão do serviço azul (tráfego de produção atual)

  • Um grupo de destino alternativo para a revisão do serviço verde (nova versão)

Ambos os grupos de destino devem ser configurados com as seguintes configurações:

  • Tipo de destino: IP (para Fargate ou EC2 com modo de rede awsvpc)

  • Protocolo: HTTP (ou o protocolo que sua aplicação usa)

  • Porta: a porta que sua aplicação escuta (normalmente 80 para HTTP)

  • VPC: a mesma VPC das suas tarefas do Amazon ECS

  • Configurações de verificação de integridade: configuradas para verificar adequadamente a integridade da sua aplicação

Durante uma implantação azul/verde, o Amazon ECS registra automaticamente as tarefas com o grupo de destino apropriado com base no estágio de implantação.

exemplo Criar grupos de destino para um Application Load Balancer

Os seguintes comandos da CLI criam dois grupos de destino para uso com um Application Load Balancer em uma implantação azul/verde:

aws elbv2 create-target-group \ --name blue-target-group \ --protocol HTTP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-path / \ --health-check-protocol HTTP \ --health-check-interval-seconds 30 \ --health-check-timeout-seconds 5 \ --healthy-threshold-count 2 \ --unhealthy-threshold-count 2 aws elbv2 create-target-group \ --name green-target-group \ --protocol HTTP \ --port 80 \ --vpc-id vpc-abcd1234 \ --target-type ip \ --health-check-path / \ --health-check-protocol HTTP \ --health-check-interval-seconds 30 \ --health-check-timeout-seconds 5 \ --healthy-threshold-count 2 \ --unhealthy-threshold-count 2

Application Load Balancer

É necessário criar um Application Load Balancer com a seguinte configuração:

  • Esquema: voltado para a internet ou interno, dependendo de suas necessidades

  • Tipo de endereço IP: IPv4

  • VPC: a mesma VPC das suas tarefas do Amazon ECS

  • Sub-redes: pelo menos duas sub-redes em diferentes zonas de disponibilidade

  • Grupos de segurança: um grupo de segurança que permite tráfego nas portas do receptor

O grupo de segurança anexado ao Application Load Balancer deve ter uma regra de saída que permita o tráfego para o grupo de segurança anexado às suas tarefas do Amazon ECS.

exemplo Criar um Application Load Balancer

O seguinte comando da CLI cria um Application Load Balancer para ser usado em uma implantação azul/verde:

aws elbv2 create-load-balancer \ --name my-application-load-balancer \ --type application \ --security-groups sg-abcd1234 \ --subnets subnet-12345678 subnet-87654321

Receptores e regras

Para implantações azul/verde, você precisa configurar receptores em seu Application Load Balancer:

  • Receptor de produção: processa o tráfego de produção (normalmente na porta 80 ou 443)

    • Inicialmente encaminha o tráfego para o grupo de destino principal (revisão de serviço azul)

    • Após a implantação, encaminha o tráfego para o grupo de destino alternativo (revisão de serviço verde)

  • Receptor de teste (opcional): processa o tráfego de teste para validar a revisão do serviço verde antes de mudar o tráfego de produção

    • Pode ser configurado em outra porta (por exemplo, 8080 ou 8443)

    • Encaminha o tráfego para o grupo de destino alternativo (revisão de serviço verde) durante o teste

Durante uma implantação azul/verde, o Amazon ECS atualiza automaticamente as regras do receptor para direcionar o tráfego para o grupo de destino apropriado com base no estágio da implantação.

exemplo Criação de um receptor de produção

O seguinte comando da CLI cria um receptor de produção na porta 80 que encaminha o tráfego para o grupo de destino primário (azul):

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \ --protocol HTTP \ --port 80 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/abcdef123456
exemplo Criação de um receptor de teste

O seguinte comando da CLI cria um receptor de teste na porta 8080 que encaminha o tráfego para o grupo de destino alternativo (verde):

aws elbv2 create-listener \ --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/app/my-application-load-balancer/abcdef123456 \ --protocol HTTP \ --port 8080 \ --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
exemplo Criação de uma regra de receptor para roteamento baseado em caminho

O seguinte comando da CLI cria uma regra que encaminha o tráfego de um caminho específico para o grupo de destino verde para teste:

aws elbv2 create-rule \ --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \ --priority 10 \ --conditions Field=path-pattern,Values='/test/*' \ --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012
exemplo Criação de uma regra de receptor para roteamento baseado em cabeçalho

O seguinte comando da CLI cria uma regra que encaminha o tráfego com um cabeçalho específico para o grupo de destino verde para teste:

aws elbv2 create-rule \ --listener-arn arn:aws:elasticloadbalancing:region:123456789012:listener/app/my-application-load-balancer/abcdef123456/ghijkl789012 \ --priority 20 \ --conditions Field=http-header,HttpHeaderConfig='{Name=X-Environment,Values=[test]}' \ --actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/ghijkl789012

Configuração de serviço

Você deve ter permissões para permitir que o Amazon ECS gerencie recursos do balanceador de carga nos clusters em seu nome. Para obter mais informações, consulte Perfil do IAM da infraestrutura do Amazon ECS para balanceadores de carga.

Ao criar ou atualizar um serviço do Amazon ECS para implantações azul/verde com o Elastic Load Balancing, você precisa especificar a configuração a seguir.

Substitua os valores das user-input pelos seus.

Os principais componentes dessa configuração são:

  • targetGroupArn: o ARN do grupo de destino principal (revisão de serviço azul).

  • alternateTargetGroupArn: o ARN do grupo de destino alternativo (revisão de serviço verde).

  • productionListenerRule: o ARN da regra do receptor para tráfego de produção.

  • roleArn: o ARN do perfil que permite ao Amazon ECS gerenciar recursos do Elastic Load Balancing.

  • strategy: defina como BLUE_GREEN para habilitar implantações azul/verde.

  • bakeTimeInMinutes: a duração em que as revisões de serviço azul e verde são executadas simultaneamente após a mudança do tráfego de produção.

  • TestListenerRule: o ARN da regra do receptor para tráfego de teste. Esse parâmetro é opcional.

{ "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/primary-target-group/abcdef123456", "containerName": "container-name", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:account-id:targetgroup/alternate-target-group/ghijkl789012", "productionListenerRule": "arn:aws:elasticloadbalancing:region:account-id:listener-rule/app/load-balancer-name/abcdef123456/listener/ghijkl789012/rule/mnopqr345678", "roleArn": "arn:aws:iam::123456789012:role/ecs-elb-role" } } ], "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 5 } }

Fluxo de tráfego durante a implantação

Durante uma implantação azul/verde com o Elastic Load Balancing, o tráfego flui pelo sistema da seguinte forma:

  1. Estado inicial: todo o tráfego de produção é roteado para o grupo de destino principal (revisão de serviço azul).

  2. Implantação de revisão de serviço verde: o Amazon ECS implanta as novas tarefas e as registra no grupo de destino alternativo.

  3. Tráfego de teste: se um receptor de teste estiver configurado, o tráfego de teste será roteado para o grupo de destino alternativo para validar a revisão do serviço verde.

  4. Mudança de tráfego de produção: o Amazon ECS atualiza a regra de receptor de produção para rotear o tráfego para o grupo de destino alternativo (revisão de serviço verde).

  5. Tempo de incorporação: a duração em que as revisões de serviço azul e verde são executadas simultaneamente após a mudança do tráfego de produção.

  6. Conclusão: após uma implantação bem-sucedida, a revisão do serviço azul é encerrada.

Se forem detectados problemas durante a implantação, o Amazon ECS pode reverter automaticamente roteando o tráfego de volta para o grupo de destino principal (revisão de serviço azul).