Implantações azuis/verdes com o CodeDeploy - Amazon Elastic Container Service

Implantações azuis/verdes com o CodeDeploy

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 What Is CodeDeploy no Guia do usuário do AWS CodeDeploy.

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 listener do load balancer

  • Estratégia de reversão de implantação

  • Configurações de reencaminhamento de tráfego

  • Configurações de finalização de 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 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 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 sã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 no Guia do usuário do AWS CodeDeploy.

Considerações sobre implantação azul/verde

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.

    • Se um serviço estiver no processo de implantação azul/verde e ocorrer um evento de escalabilidade, a contagem de tarefas desejada poderá ser definida como um valor inesperado. Isso é causado pela autoescalabilidade considerando a contagem de tarefas em execução como capacidade atual, que é o dobro do número apropriado de tarefas que estão sendo usadas no cálculo da contagem de tarefas desejada.

  • As tarefas que usam o tipo de inicialização do Fargate ou os tipos de controlador de implantação 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 do IAM exigidas para implantações azuis/verdes

As implantações azuis/verdes do Amazon ECS são viabilizadas por uma combinação de 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 AWS Management Console 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 ter mais informações, consulte AmazonECS_FullAccess.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "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" ], "Resource": ["*"] } ] }
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 ter mais informações, consulte Função do IAM para CodeDeploy do Amazon ECS.

Os exemplos de política Exemplo de criação de serviço e Exemplo de atualização de serviço do IAM mostram as permissões que são necessárias para os usuários usarem implantações azuis/verdes do Amazon ECS no AWS Management Console.