

# Implantações azul/verde do CodeDeploy para o Amazon ECS
<a name="deployment-type-bluegreen"></a>

Recomendamos que você use a implantação azul/verde do Amazon ECS. Para obter mais informações, consulte [Criação de implantações azul/verde do Amazon ECS](deploy-blue-green-service.md).

O tipo de implantação *azul/verde* usa o modelo de implantação azul/verde controlado pelo CodeDeploy. Use este tipo de implantação para verificar uma nova implantação de um serviço antes de enviar tráfego de produção para ele. Para obter mais informações, consulte [O que é o CodeDeploy?](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) no *Guia do usuário do AWS CodeDeploy*. Valide o estado de um serviço do Amazon ECS antes da implantação

Existem três maneiras pelas quais o tráfego pode mudar durante uma implantação azul/verde:
+ **Canário**: o tráfego é deslocado em dois incrementos. É possível escolher entre opções de canary predefinidas que especificam a porcentagem de tráfego deslocada para a definição da tarefa atualizada no primeiro incremento e o intervalo, em minutos, antes que o tráfego restante seja deslocado no segundo incremento.
+ **Linear**: o tráfego é deslocado em incrementos iguais com um número igual de minutos entre cada incremento. É possível escolher entre opções lineares predefinidas que especificam a porcentagem de tráfego deslocado em cada incremento e o número de minutos entre cada incremento.
+ **Tudo de uma vez**: todo o tráfego é deslocado do conjunto de tarefas original para o conjunto de tarefas atualizado de uma só vez.

Veja a seguir os componentes do CodeDeploy que o Amazon ECS usa quando um serviço utiliza o tipo de implantação azul/verde:

**Aplicação CodeDeploy**  
Uma coleção de recursos do CodeDeploy. Isso consiste em um ou mais grupos de implantação.

**Grupo de implantação do CodeDeploy**  
As configurações de implantação. Isso consiste no seguinte:  
+ Cluster e serviço do Amazon ECS
+ Informações sobre o grupo de destino e o receptor do balanceador de carga
+ Estratégia de reversão de implantação
+ Configurações de reencaminhamento de tráfego
+ Configurações de encerramento da revisão original
+ Configuração de implantação
+ Configuração de alarmes do CloudWatch que pode ser definida para interromper implantações
+ Configurações do SNS ou do CloudWatch Events para notificações
Para obter mais informações, consulte [Trabalhar com grupos de implantação](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-groups.html) no *Guia do usuário do AWS CodeDeploy*.

**Configuração de implantação do CodeDeploy**  
Especifica como o CodeDeploy roteia o tráfego de produção para o conjunto de tarefas de substituição durante uma implantação. As configurações de implantação linear e de canary predefinidas a seguir estão disponíveis. Também é possível criar implantações personalizadas lineares e de canary. Para obter mais informações, consulte [Trabalhar com configurações de implantação](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) no *Guia do usuário do AWS CodeDeploy*.  
+ **CodeDeployDefault.ECSAllAtOnce**: desloca todo o tráfego para o contêiner atualizado do Amazon ECS de uma só vez
+ **CodeDeployDefault.ECSLinear10PercentEvery1Minutes**: desloca 10% do tráfego a cada minuto até que todo o tráfego seja deslocado.
+ **CodeDeployDefault.ECSLinear10PercentEvery3Minutes**: desloca 10% do tráfego a cada 3 minutos até que todo o tráfego seja deslocado.
+ **CodeDeployDefault.ECSCanary10Percent5Minutes**: desloca 10% do tráfego no primeiro incremento. Os 90 por cento restantes serão implantados cinco minutos depois.
+ **CodeDeployDefault.ECSCanary10Percent15Minutes**: desloca 10% do tráfego no primeiro incremento. Os 90 por cento restantes são implantados 15 minutos depois.

**Revisão**  
Uma revisão é o arquivo de especificação de aplicação do CodeDeploy (arquivo AppSpec). No arquivo AppSpec, você especifica o ARN completo da definição da tarefa e o contêiner e a porta do conjunto de tarefas de substituição em que o tráfego deve ser roteado quando uma nova implantação é criada. O nome do contêiner deve ser um dos nomes de contêineres referenciados em sua definição de tarefa. Se a configuração de rede ou a versão da plataforma tiver sido atualizada na definição de serviço, você também deverá especificar esses detalhes no arquivo AppSpec. Também é possível especificar as funções do Lambda a serem executadas durante os eventos do ciclo de vida da implantação. As funções do Lambda permitem que você execute testes e retorne métricas durante a implantação. Para obter mais informações, consulte [Referência do arquivo AppSpec](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html) no *Guia do usuário do AWS CodeDeploy*.

## Considerações
<a name="deployment-type-bluegreen-considerations"></a>

Considere o seguinte ao usar o tipo de implantação azul/verde:
+ Quando um serviço do Amazon ECS que usa o tipo de implantação azul/verde é criado inicialmente, é criado um conjunto de tarefas do Amazon ECS.
+ Você deve configurar o serviço para usar um Application Load Balancer ou um Network Load Balancer. A seguir estão os requisitos do load balancer.
  + Você deve adicionar um listener de produção ao load balancer, que é usado para rotear o tráfego de produção.
  + Um listener de teste opcional pode ser adicionado ao load balancer, que é usado para rotear o tráfego de teste. Se você especificar um listener de teste, o CodeDeploy encaminhará o tráfego de teste para o conjunto de tarefas de substituição durante uma implantação.
  + Os listeners de produção e teste devem pertencer ao mesmo load balancer.
  + É necessário definir um grupo de destino para o load balancer. O grupo de destino roteia o tráfego para o conjunto de tarefas original em um serviço por meio do listener de produção.
  + Quando um Network Load Balancer é usado, somente a configuração de implantação `CodeDeployDefault.ECSAllAtOnce` é permitida.
+ Para serviços configurados para usar autoescalabilidade de serviço e o tipo de implantação azul/verde, a autoescalabilidade não é bloqueada durante uma implantação, mas a implantação pode apresentar falha em algumas circunstâncias. Veja a seguir a descrição desse comportamento, com mais detalhes.
  + Se um serviço estiver sendo dimensionado e uma implantação for iniciada, será criado o conjunto de tarefas verde e o CodeDeploy aguardará por até uma hora até que o conjunto de tarefas verde atinja o estado estacionário e não mude qualquer tráfego até que isso aconteça.
  + Se um serviço estiver no processo de implantação azul/verde e ocorrer um evento de escalabilidade, o tráfego continuará a mudar por 5 minutos. Se o serviço não atingir o estado estacionário em até 5 minutos, o CodeDeploy interromperá a implantação e a marcará como falha.
+ As tarefas que usam os tipos de controlador de implantação do Fargate ou `CODE_DEPLOY` não são compatíveis com a estratégia de programação `DAEMON`.
+ Ao criar inicialmente uma aplicação e um grupo de implantação do CodeDeploy, é necessário especificar o seguinte:
  + É necessário definir dois grupos de destino para o load balancer. Um grupo de destino deverá ser o grupo de destino inicial definido para o balanceador de carga quando o serviço do Amazon ECS for criado. O único requisito do segundo grupo de destino é que ele não pode ser associado a um load balancer diferente do que é usado pelo serviço.
+ Quando você cria uma implantação do CodeDeploy para um serviço do Amazon ECS, o CodeDeploy cria um *conjunto de tarefas de substituição* (ou *conjunto de tarefas verde*) na implantação. Se você tiver adicionado um listener de teste ao balanceador de carga, o CodeDeploy encaminhará o tráfego de teste para o conjunto de tarefas de substituição. É nesse momento que você pode executar quaisquer testes de validação. O CodeDeploy redireciona o tráfego de produção do conjunto de tarefas original para o conjunto de tarefas de substituição, de acordo com as configurações de redirecionamento de tráfego do grupo de implantação.

## Permissões obrigatórias do IAM
<a name="deployment-type-bluegreen-IAM"></a>

As implantações azul/verde podem ser realizadas usando uma combinação das APIs do Amazon ECS e do CodeDeploy. Os usuários devem ter as permissões apropriadas para esses serviços antes de poderem usar as implantações azuis/verdes do Amazon ECS no Console de gerenciamento da AWS ou com a AWS CLI ou os SDKs. 

Além das permissões padrão do IAM para criar e atualizar serviços, o Amazon ECS exige as permissões a seguir. Essas permissões foram adicionadas à política `AmazonECS_FullAccess` do IAM. Para obter mais informações, consulte [AmazonECS\$1FullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECS_FullAccess).
+ `codedeploy:CreateApplication`
+ `codedeploy:CreateDeployment`
+ `codedeploy:CreateDeploymentGroup`
+ `codedeploy:GetApplication`
+ `codedeploy:GetDeployment`
+ `codedeploy:GetDeploymentGroup`
+ `codedeploy:ListApplications`
+ `codedeploy:ListDeploymentGroups`
+ `codedeploy:ListDeployments`
+ `codedeploy:StopDeployment`
+ `codedeploy:GetDeploymentTarget`
+ `codedeploy:ListDeploymentTargets`
+ `codedeploy:GetDeploymentConfig`
+ `codedeploy:GetApplicationRevision`
+ `codedeploy:RegisterApplicationRevision`
+ `codedeploy:BatchGetApplicationRevisions`
+ `codedeploy:BatchGetDeploymentGroups`
+ `codedeploy:BatchGetDeployments`
+ `codedeploy:BatchGetApplications`
+ `codedeploy:ListApplicationRevisions`
+ `codedeploy:ListDeploymentConfigs`
+ `codedeploy:ContinueDeployment`
+ `sns:ListTopics`
+ `cloudwatch:DescribeAlarms`
+ `lambda:ListFunctions`

**nota**  
Além das permissões padrão do Amazon ECS necessárias para executar tarefas e serviços, os usuários do IAM também precisam de permissões `iam:PassRole` para usar perfis do IAM para tarefas.

O CodeDeploy precisa de permissões para chamar APIs do Amazon ECS, modificar o Elastic Load Balancing, invocar funções do Lambda e descrever alarmes do CloudWatch, além de permissões para modificar a contagem desejada do serviço para você. Antes de criar um serviço do Amazon ECS que use o tipo de implantação azul/verde, você deve criar uma função do IAM (`ecsCodeDeployRole`). Para obter mais informações, consulte [Função do IAM para CodeDeploy do Amazon ECS](codedeploy_IAM_role.md).