

# Recursos do Network Load Balancer para implantações azul/verde, lineares e canário do Amazon ECS
<a name="nlb-resources-for-blue-green"></a>

Para usar um Network Load Balancer 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. Esta seção explica os componentes necessários e suas configurações.

Quando sua configuração inclui um Network Load Balancer, o Amazon ECS adiciona um atraso de dez minutos aos seguintes estágios do ciclo de vida:
+ TEST\$1TRAFFIC\$1SHIFT
+ PRODUCTION\$1TRAFFIC\$1SHIFT

Esse atraso é responsável por problemas de tempo do Network Load Balancer que podem causar uma incompatibilidade entre os pesos de tráfego configurados e o roteamento real do tráfego no plano de dados. 

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

Para implantações azul/verde com um Network Load Balancer, 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 revisão do serviç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: `TCP` (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

  Para verificações de integridade do TCP, o Network Load Balancer estabelece uma conexão TCP com o destino. Se a conexão for bem-sucedida, o destino será considerado íntegro.

  Para verificações de integridade de HTTP/HTTPS, o Network Load Balancer envia uma solicitação HTTP/HTTPS ao destino e verifica a resposta.

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 Criação de grupos de destino para o Network Load Balancer**  
Os seguintes comandos da AWS CLI criam dois grupos de destino para uso com um Network Load Balancer em uma implantação azul/verde:  

```
aws elbv2 create-target-group \
    --name blue-target-group \
    --protocol TCP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-protocol TCP

aws elbv2 create-target-group \
    --name green-target-group \
    --protocol TCP \
    --port 80 \
    --vpc-id vpc-abcd1234 \
    --target-type ip \
    --health-check-protocol TCP
```

## Network Load Balancer
<a name="nlb-load-balancer"></a>

É necessário criar um Network 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

Diferentemente dos Application Load Balancers, os Network Load Balancers operam na camada de transporte (camada 4) e não usam grupos de segurança. Em vez disso, você precisa garantir que os grupos de segurança associados às tarefas do Amazon ECS permitam o tráfego do Network Load Balancer nas portas do receptor.

**Example Criar um Network Load Balancer**  
O seguinte comando da AWS CLI cria um Network Load Balancer para ser usado em uma implantação azul/verde:  

```
aws elbv2 create-load-balancer \
    --name my-network-load-balancer \
    --type network \
    --subnets subnet-12345678 subnet-87654321
```

## Considerações sobre o uso do NLB com implantações azul/verde
<a name="nlb-considerations"></a>

Ao usar um Network Load Balancer para implantações azul/verde, considere o seguinte:
+ **Operação da camada 4**: os Network Load Balancers operam na camada de transporte (camada 4) e não inspecionam o conteúdo da camada da aplicação (camada 7). Isso significa que você não pode usar cabeçalhos ou caminhos HTTP para decisões de roteamento.
+ **Verificações de integridade**: as verificações de integridade do Network Load Balancer estão limitadas aos protocolos TCP, HTTP ou HTTPS. Para verificações de integridade do TCP, o Network Load Balancer apenas verifica se a conexão pode ser estabelecida.
+ **Preservação da conexão**: os Network Load Balancers preservam o endereço IP de origem do cliente, o que pode ser útil para fins de segurança e registro em log.
+ **Endereços IP estáticos**: os Network Load Balancers fornecem endereços IP estáticos para cada sub-rede, o que pode ser útil para listas de permissões ou quando os clientes precisam se conectar a um endereço IP fixo.
+ **Tráfego de teste**: como os Network Load Balancers não são compatíveis com o roteamento baseado em conteúdo, o tráfego de teste deve ser enviado para outra porta do tráfego de produção.

## Receptores e regras
<a name="nlb-listeners"></a>

Para implantações azul/verde com um Network Load Balancer, você precisa configurar receptores:
+ 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

Diferentemente dos Application Load Balancers, os Network Load Balancers não são compatíveis com regras de roteamento baseadas em conteúdo. Em vez disso, o tráfego é roteado com base na porta e no protocolo do receptor.

Os seguintes comandos da AWS CLI criam receptores de produção e teste para um Network Load Balancer:

Substitua os valores das *user-input* pelos seus.

```
aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \
    --protocol TCP \
    --port 80 \
    --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456

aws elbv2 create-listener \
    --load-balancer-arn arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/net/my-network-lb/1234567890123456 \
    --protocol TCP \
    --port 8080 \
    --default-actions Type=forward, TargetGroupArn=arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456
```

## Configuração de serviço
<a name="nlb-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 um Network Load Balancer, você precisa especificar a seguinte configuração:

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 do receptor para tráfego de produção
+ `testListenerRule`: (opcional) o ARN do receptor para tráfego de teste
+ `roleArn`: o ARN do perfil que permite ao Amazon ECS gerenciar recursos do Network Load Balancer
+ `strategy`: defina como `BLUE_GREEN` para habilitar implantações em 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

```
{
    "loadBalancers": [
        {
            "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/blue-target-group/1234567890123456",
            "containerName": "container-name",
            "containerPort": 80,
            "advancedConfiguration": {
                "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/green-target-group/1234567890123456",
                "productionListenerRule": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/1234567890123456",
                "testListenerRule": "arn:aws:elasticloadbalancing:region:123456789012:listener/net/my-network-lb/1234567890123456/2345678901234567",
                "roleArn": "arn:aws:iam::123456789012:role/ecs-nlb-role"
            }
        }
    ],
    "deploymentConfiguration": {
        "strategy": "BLUE_GREEN",
        "maximumPercent": 200,
        "minimumHealthyPercent": 100,
        "bakeTimeInMinutes": 5
    }
}
```

## Fluxo de tráfego durante a implantação
<a name="nlb-traffic-flow"></a>

Durante uma implantação azul/verde com um Network Load Balancer, 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 o 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).