

# Criar uma implantação canário do Amazon ECS
<a name="deploy-canary-service"></a>

Ao usar as implantações canário do Amazon ECS, você pode transferir uma pequena porcentagem do tráfego para sua nova revisão de serviço (a “canário”). Valide a implantação e, em seguida, transfira o tráfego restante de uma só vez após um intervalo especificado. Essa abordagem permite testar novas funcionalidades com risco mínimo antes da implantação completa.

## Pré-requisitos
<a name="deploy-canary-service-prerequisites"></a>

Execute as operações a seguir antes de iniciar uma implantação canário.

1. Configurar as permissões apropriadas.
   + Para obter informações sobre as permissões do Elastic Load Balancing, consulte [Perfil do IAM da infraestrutura do Amazon ECS para balanceadores de carga](AmazonECSInfrastructureRolePolicyForLoadBalancers.md).
   + Para obter informações sobre as permissões do Lambda, consulte [Permissões necessárias para funções do Lambda em implantações azul/verde do Amazon ECS](blue-green-permissions.md).

1. As implantações canário do Amazon ECS exigem que o serviço use um dos recursos a seguir. Configure os recursos apropriados.
   + Application Load Balancer: para obter mais informações, consulte [Recursos do Application Load Balancer para implantações azul/verde, linear e canário](alb-resources-for-blue-green.md).
   + Network Load Balancer: para obter mais informações, consulte [Recursos do Network Load Balancer para implantações azul/verde, lineares e canário do Amazon ECS](nlb-resources-for-blue-green.md).
   + Service Connect: para obter mais informações, consulte [Recursos do Service Connect para implantações azul/verde, linear e canário do Amazon ECS](service-connect-blue-green.md).

## Procedimento
<a name="deploy-canary-service-procedure"></a>

Você pode usar o console ou a AWS CLI para criar um serviço de implantação canário do Amazon ECS.

------
#### [ Console ]

1. Abra o console em [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2).

1. Determine o recurso no qual você inicia o serviço.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/deploy-canary-service.html)

   A página **Criar serviço** é exibida.

1. Em **Detalhes do serviço**, faça o seguinte:

   1. Em **Família de definições de tarefas**, escolha a definição de tarefa a ser usada. Em seguida, em **Revisão da definição de tarefa**, insira a revisão a ser usada.

   1. Em **Service name** (Nome do serviço), insira um nome para o serviço.

1. Para executar o serviço em um cluster existente, em **Cluster existente**, escolha o cluster. Para executar o serviço em um novo cluster, escolha **Criar cluster** 

1. Escolha como suas tarefas serão distribuídas em toda a infraestrutura do cluster. Expanda **Configuração de computação** e escolha sua opção.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/deploy-canary-service.html)

1. Em **Configuração de implantação**, faça o seguinte:

   1. Em **Tipo de serviço**, escolha **Réplica**.

   1. Em **Desired tasks** (Tarefas desejadas), insira o número de tarefas que serão iniciadas e mantidas no serviço.

   1. Para que o Amazon ECS monitore a distribuição de tarefas entre as zonas de disponibilidade e as redistribua quando houver um desequilíbrio, em **Rebalanceamento do serviço em zonas de disponibilidade**, selecione **Rebalanceamento do serviço em zonas de disponibilidade**.

   1. Em **Período de carência da verificação de integridade**, insira quanto tempo (em segundos) após o início de uma tarefa o agendador do serviço ignorará as verificações de integridade que forem não íntegras para o Elastic Load Balancing, o VPC Lattice e o contêiner. Se você não especificar um valor de período de tolerância de verificação de integridade, o valor padrão 0 será usado.

1. Em **Configuração da implantação**, defina as configurações de implantação canário:

   1. Em **Estratégia de implantação**, escolha **Canário**.

   1. Em **Porcentagem canário**, informe a porcentagem de tráfego a ser transferida para a revisão de serviço verde no primeiro estágio (por exemplo, 10% para o tráfego canário inicial).

   1. Em **Tempo de incorporação canário**, informe o tempo de espera em minutos antes de transferir o tráfego restante para a revisão de serviço verde.

   1. Em **Tempo de incorporação**, informe o tempo em minutos em que as revisões de serviço azul e verde serão executadas simultaneamente após a mudança de tráfego final antes do encerramento da revisão azul.

   1. (Opcional) Execute as funções do Lambda para serem executadas em estágios específicos da implantação. Em **Ganchos do ciclo de vida de implantação**, selecione os estágios para executar os ganchos do ciclo de vida.

      Para adicionar um gancho do ciclo de vida:

      1. Escolha **Adicionar**.

      1. Em **Função do Lambda**, insira o nome da função ou o ARN.

      1. Em **Perfil** selecione o perfil do IAM que tem permissão para invocar a função do Lambda.

      1. Em **Estágios do ciclo de vida**, selecione os estágios em que a função do Lambda deve ser executada.

1. Para configurar como o Amazon ECS detectará e lidará com falhas de implantação, expanda **Deployment failure detection**(Detecção de falhas de implantação) e escolha suas opções. 

   1. Para interromper uma implantação quando as tarefas não podem ser iniciadas, selecione **Use the Amazon ECS deployment circuit breaker)** (Usar o disjuntor de implantação do Amazon ECS.

      Para que o software reverta automaticamente a implantação para o último estado de implantação concluído quando o disjuntor de implantação definir a implantação para um estado de falha, selecione **Reverter em caso de falha**.

   1. Para interromper uma implantação com base nas métricas da aplicação, selecione **Usar alarmes do CloudWatch**. Em seguida, em **Nomes de alarmes do CloudWatch**, escolha os alarmes. Para criar um alarme, acesse o console do CloudWatch.

      Para que o software reverta automaticamente a implantação para o último estado de implantação concluído quando um alarme do CloudWatch definir a implantação para um estado de falha, selecione **Reverter em caso de falha**.

1. (Opcional) Para interconectar o serviço usando o Service Connect, expanda **Service Connect** e especifique o seguinte:

   1.  Selecione **Ativar o Service Connect**.

   1. Em **Service Connect configuration** (Configuração do Service Connect), especifique o modo cliente.
      + Se seu serviço executa uma aplicação cliente de rede que só precisa se conectar a outros serviços no namespace, escolha **Somente no lado do cliente**.
      + Se seu serviço executa uma aplicação de rede ou de serviço Web e precisa fornecer endpoints para esse serviço e se conectar a outros serviços no namespace, escolha **Client and server** (Cliente e servidor).

   1. Para usar um namespace que não seja o namespace padrão do cluster, em **Namespace**, escolha o namespace do serviço. Isso pode ser um namespace criado separadamente na mesma Região da AWS em sua Conta da AWS ou um namespace na mesma região compartilhada com sua conta usando o AWS Resource Access Manager (AWS RAM). Para obter mais informações sobre namespaces compartilhados do AWS Cloud Map, consulte [Compartilhamento de namespaces do AWS Cloud Map entre contas](https://docs.aws.amazon.com/cloud-map/latest/dg/sharing-namespaces.html) no *Guia do desenvolvedor do AWS Cloud Map*.

   1. (Opcional) Configure regras de cabeçalho de tráfego de teste para implantações canário. Em **Testar roteamento de tráfego**, especifique o seguinte:

      1. Selecione **Habilitar regras de cabeçalho de tráfego de teste** para rotear solicitações específicas para a revisão do serviço verde durante o teste.

      1. Em **Regras de correspondência de cabeçalhos**, configure os critérios para rotear o tráfego de teste:
         + **Nome do cabeçalho**: insira o nome do cabeçalho HTTP correspondente (por exemplo, `X-Test-Version` ou `User-Agent`).
         + **Tipo de correspondência**: escolha os critérios de correspondência:
           + **Correspondência exata**: roteie solicitações em que o valor do cabeçalho corresponda exatamente ao valor especificado
           + **Cabeçalho presente**: roteie solicitações que contenham o cabeçalho especificado, independentemente do valor
           + **Correspondência de padrões**: roteie solicitações em que o valor do cabeçalho corresponda a um padrão especificado
         + **Valor do cabeçalho** (se estiver usando correspondência exata ou correspondência de padrão): insira o valor ou padrão com o qual corresponder.

         Você pode adicionar várias regras de correspondência de cabeçalhos para criar uma lógica de roteamento complexa. As solicitações que correspondam a qualquer uma das regras configuradas serão encaminhadas para a revisão do serviço verde para testes.

      1. Escolha **Adicionar regra de cabeçalho** para configurar condições adicionais de correspondência de cabeçalho.
**nota**  
As regras de cabeçalho de tráfego de teste permitem que você valide a nova funcionalidade com tráfego controlado antes de concluir a implantação completa. Isso permite que você teste a revisão do serviço verde com solicitações específicas (como as de ferramentas de teste internas ou usuários beta) enquanto mantém o fluxo de tráfego normal para a revisão do serviço azul.

   1. (Opcional) Especifique uma configuração de log. Selecione **Usar conjunto de logs**. A opção padrão envia os logs do contêiner ao CloudWatch Logs. As outras opções de driver de log são configuradas usando o AWS FireLens. Para obter mais informações, consulte [Envio de logs do Amazon ECS para um serviço da AWS ou para uma AWS Partner](using_firelens.md).

      Veja a seguir a descrição de cada destino de log de contêiner mais detalhadamente.
      + **Amazon CloudWatch**: configura a tarefa para enviar logs de contêiner ao CloudWatch Logs. São fornecidas as opções de driver de log padrão, que criam um grupo de logs do CloudWatch em seu nome. Para especificar um nome de grupo de logs diferente, altere os valores da opção de driver.
      + **Amazon Data Firehose**: configura a tarefa para enviar logs de contêiner ao Firehose. São fornecidas as opções de driver de log padrão, que enviam logs para um fluxo de entrega do Firehose. Para especificar um nome de fluxo de entrega diferente, altere os valores da opção de driver.
      + **Amazon Kinesis Data Streams**: configura a tarefa para enviar logs de contêiner ao Kinesis Data Streams. São fornecidas as opções de driver de log padrão, que enviam logs a um fluxo do Kinesis Data Streams. Para especificar um nome de transmissão diferente, altere os valores da opção de driver.
      + **Amazon OpenSearch Service**: configura a tarefa para enviar logs de contêiner a um domínio do OpenSearch Service. As opções de driver de log devem ser fornecidas. 
      + **Amazon S3**: configura a tarefa para enviar logs de contêiner a um bucket do Amazon S3. As opções de driver de log padrão são fornecidas, mas você deve especificar um nome de bucket válido do Amazon S3.

1. (Opcional) Configure o **balanceamento de carga** para implantação canário.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/deploy-canary-service.html)

1. (Opcional) Para ajudar a identificar seu serviço e tarefas, expanda a seção **Tags** (Etiquetas) e configure suas etiquetas.

   Para que o Amazon ECS atribua tags automaticamente a todas as tarefas recém-iniciadas com o nome do cluster e as tags de definição de tarefa, selecione **Ativar tags gerenciadas pelo Amazon ECS** e, para **Propagar tags de**, escolha **Definições de tarefas**.

   Para que o Amazon ECS atribua tags automaticamente a todas as tarefas recém-iniciadas com o nome do cluster e as tags de serviços, selecione **Ativar tags gerenciadas pelo Amazon ECS** e, para **Propagar tags de**, escolha **Serviço**.

   Adicione ou remova uma tag.
   + [Adicionar uma etiqueta] Escolha **Add tag** (Adicionar etiqueta) e faça o seguinte:
     + Em **Chave**, insira o nome da chave.
     + Em **Valor** insira o valor da chave.
   + [Remover uma tag] Ao lado da tag, escolha **Remove tag (Remover tag)**.

1. Escolha **Criar**.

------
#### [ AWS CLI ]

1. Crie um arquivo chamado `canary-service-definition.json` com o conteúdo a seguir.

   Substitua os valores das {{user-input}} pelos seus.

   ```
   {
     "serviceName": "myCanaryService",
     "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster",
     "taskDefinition": "sample-fargate:1",
     "desiredCount": 5,
     "launchType": "FARGATE",
     "networkConfiguration": {
       "awsvpcConfiguration": {
         "subnets": [
           "subnet-09ce6e74c116a2299",
           "subnet-00bb3bd7a73526788",
           "subnet-0048a611aaec65477"
         ],
         "securityGroups": [
           "sg-09d45005497daa123"
         ],
         "assignPublicIp": "ENABLED"
       }
     },
     "deploymentController": {
       "type": "ECS"
     },
     "deploymentConfiguration": {
       "strategy": "CANARY",
       "maximumPercent": 200,
       "minimumHealthyPercent": 100,
       "canaryConfiguration" : {
           "canaryPercent" : 5.0,
           "canaryBakeTime" : 10
       },
       "bakeTimeInMinutes": 10,
       "alarms": {
         "alarmNames": [
           "myAlarm"
         ],
         "rollback": true,
         "enable": true
       }
     },
     "loadBalancers": [
       {
         "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197",
         "containerName": "fargate-app",
         "containerPort": 80,
         "advancedConfiguration": {
           "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199",
           "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-canary-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911",
           "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS"
         }
       }
     ]
   }
   ```

1. Executar `create-service`.

   ```
   aws ecs create-service --cli-input-json file://canary-service-definition.json
   ```

------

## Próximas etapas
<a name="deploy-canary-service-next-steps"></a>

Depois de configurar sua implantação canário, conclua estas etapas:
+ Atualize o serviço para iniciar a implantação. Para obter mais informações, consulte [Atualizar um serviço do Amazon ECS](update-service-console-v2.md).
+ Monitore o processo de implantação para garantir que ele siga o padrão canário:
  + A revisão do serviço verde é criada e tem a escala aumentada verticalmente
  + Uma pequena porcentagem do tráfego (canário) é transferida para a revisão verde
  + O sistema aguarda o intervalo canário especificado
  + O tráfego restante é transferido de uma vez para a revisão verde
  + Após o tempo de incorporação, a revisão azul é encerrada