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

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. Esse tipo de implantação permite que você verifique 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? no Guia do usuário do AWS CodeDeploy.

Existem três maneiras pelas quais o tráfego pode ser deslocado durante uma implantação verde/azul:

  • Canary: o tráfego é deslocado em dois incrementos. Você pode 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. Você pode 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.

Configuração de implantação

Descrição

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 três minutos até que todo o tráfego seja deslocado.

CodeDeployDefault.ECSCanary10percent5Minutes

Muda 10% do tráfego no primeiro incremento. Os 90% restantes são implantados cinco minutos depois.

CodeDeployDefault.ECSCanary10percent15Minutes

Muda 10% do tráfego no primeiro incremento. Os 90 por cento restantes são implantados 15 minutos depois.

CodeDeployDefault.ECSAllAtOnce

Muda todo o tráfego para o contêiner atualizado do Amazon ECS de uma só vez.

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. Você também pode 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. Não há suporte a classic load balancers. 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.

Experiência do console do Amazon ECS

Os fluxos de trabalho de criação de serviços e de atualização de serviços no console do Amazon ECS são compatíveis com implantações azuis/verdes.

Para criar um serviço do Amazon ECS que use o tipo de implantação azul/verde, consulte Criar um serviço do Amazon ECS.

Para atualizar um serviço existente do Amazon ECS que esteja usando o tipo de implantação azul/verde, consulte Atualizar um serviço.

Quando você usa o console do Amazon ECS para criar um serviço do Amazon ECS que use o tipo de implantação azul/verde, um conjunto de tarefas do Amazon ECS e os recursos do CodeDeploy a seguir são criados automaticamente com as configurações padrão a seguir.

Recurso

Configuração padrão

Application name

AppECS-<cluster[:47]>-<service[:47]>

Nome do grupo de implantação

DgpECS-<cluster[:47]>-<service[:47]>

Informações sobre o load balancer do grupo de implantação

O listener de produção do load balancer, o listener de teste opcional e os grupos de destino especificados são adicionados à configuração do grupo de implantação.

Configurações de reencaminhamento de tráfego

Redirecionamento de tráfego: a configuração padrão é Redirecionar o tráfego imediatamente. Você pode alterá-la no console do CodeDeploy ou atualizando a TrafficRoutingConfig. Para obter mais informações, consulte CreateDeploymentConfig na Referência da API do AWS CodeDeploy.

Configurações de finalização de revisão original

As configurações de finalização da revisão original são configuradas para aguardar 1 hora após o tráfego ter sido reencaminhado antes de finalizar o conjunto de tarefas azul.

Configuração de implantação

A configuração de implantação é definida como CodeDeployDefault.ECSAllAtOnce, por padrão, o que roteia todo o tráfego de uma vez do conjunto de tarefas azul para o conjunto de tarefas verde. A configuração de implantação pode ser alterada no console do AWS CodeDeploy após a criação do serviço.

Configuração de reversão automática

Se uma implantação falhar, as configurações de reversão automática serão configuradas para revertê-la.

Para visualizar detalhes de um serviço do Amazon ECS usando o tipo de implantação azul/verde, use a guia Deployments (Implantações) no console do Amazon ECS.

Para visualizar os detalhes de um grupo de implantação do CodeDeploy no console do CodeDeploy, consulte Visualizar detalhes do grupo de implantação com o CodeDeploy no Guia do usuário do AWS CodeDeploy.

Para modificar as configurações de um grupo de implantação do CodeDeploy no console do CodeDeploy, consulte Alterar configurações do grupo de implantação com o CodeDeploy no Guia do usuário do AWS CodeDeploy.

Adicionado suporte para executar uma implantação azul/verde para AWS CloudFormation. Para obter mais informações, consulte Executar implantações azuis/verdes do Amazon ECS por meio do CodeDeploy usando o AWS CloudFormation no Guia do usuário do AWS CloudFormation.

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 do IAM 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 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 funções 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 mais informações, consulte Função do IAM para CodeDeploy do Amazon ECS.

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