

# Recursos do Application Load Balancer para implantações azul/verde, linear e canário
<a name="alb-resources-for-blue-green"></a>

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. 

## Grupos de destino
<a name="alb-target-groups"></a>

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.

**Example 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
<a name="alb-load-balancer"></a>

É 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.

**Example 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
<a name="alb-listeners"></a>

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.

**Example 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
```

**Example 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
```

**Example 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
```

**Example 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
<a name="alb-service-configuration"></a>

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](AmazonECSInfrastructureRolePolicyForLoadBalancers.md). 

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
<a name="alb-traffic-flow"></a>

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).

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

1. *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.

1. *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).

1. *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.

1. *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).