Migrar implantações azul/verde do CodeDeploy para implantações azul/verde do Amazon ECS
As implantações azul/verde do CodeDeploy e do Amazon ECS oferecem funcionalidades semelhantes, mas diferem na forma como você as configura e gerencia.
Visão geral da implantação azul/verde do CodeDeploy
Ao criar um serviço do Amazon ECS usando o CodeDeploy, você:
-
Crie um balanceador de carga com um receptor de produção e (opcionalmente) um receptor de teste. Cada receptor é configurado com uma única regra (padrão) que roteia todo o tráfego para um único grupo de destino (o grupo de destino principal).
-
Crie um serviço do Amazon ECS, configurado para usar o receptor e o grupo de destino, com o tipo
deploymentController
definido comoCODE_DEPLOY
. A criação do serviço resulta na criação de um conjunto de tarefas (azul) registrado com o grupo de destino especificado. -
Crie um grupo de implantação do CodeDeploy (como parte de uma aplicação do CodeDeploy) e configure-o com detalhes do cluster do Amazon ECS, nome do serviço, receptores do balanceador de carga, dois grupos de destino (o grupo de destino principal usado na regra de receptor de produção e um grupo de destino secundário a ser usado para tarefas de substituição), um perfil de serviço (para conceder permissões ao CodeDeploy para manipular o Amazon ECS e recursos do Elastic Load Balancing) e vários parâmetros que controlam o comportamento da implantação.
Com o CodeDeploy, novas versões de um serviço são implantadas usando CreateDeployment()
, especificando o nome da aplicação do CodeDeploy, o nome do grupo de implantação e um arquivo AppSpec que fornece detalhes da nova revisão e dos ganchos opcionais do ciclo de vida. A implantação do CodeDeploy cria um conjunto de tarefas de substituição (verde) e registra suas tarefas no grupo de destino secundário. Quando isso se torna íntegro, está disponível para teste (opcional) e para produção. Em ambos os casos, o redirecionamento é obtido alterando a respectiva regra do receptor para apontar para o grupo de destino secundário associado ao conjunto de tarefas verde. A reversão é obtida alterando a regra do receptor de produção de volta para o grupo de destino principal.
Visão geral da implantação azul/verde do Amazon ECS
Com implantações azul/verde do Amazon ECS, a configuração de implantação é parte do próprio serviço do Amazon ECS:
-
Você deve pré-configurar o receptor de produção do balanceador de carga com uma regra que inclua dois grupos de destino com pesos de 1 e 0.
-
Você precisa especificar os seguintes recursos, ou atualizar os recursos do serviço:
-
O ARN dessa regra de receptor
-
Os dois grupos de destino
-
Um perfil do IAM para conceder permissão ao Amazon ECS para chamar as APIs do Elastic Load Balancing
-
Um perfil opcional do IAM para executar funções do Lambda
-
Defina o tipo
deploymentController
comoECS
edeploymentConfiguration.strategy
paraBLUE_GREEN
. Isso resulta na criação de uma implantação de serviço (azul) cujas tarefas são registradas no grupo de destino principal.
-
Com o Amazon ECS azul/verde, uma nova revisão de serviço é criada chamando UpdateService()
do Amazon ECS, passando os detalhes da nova revisão. A implantação do serviço cria novas tarefas de revisão do serviço (verde) e as registra no grupo de destino secundário. O Amazon ECS processa as operações de redirecionamento e reversão mudando os pesos na regra do receptor.
Principais diferenças de implementação
Embora ambas as abordagens resultem na criação de um conjunto inicial de tarefas, a implementação subjacente difere:
-
O CodeDeploy usa um conjunto de tarefas, enquanto o Amazon ECS usa uma revisão de serviço. Os conjuntos de tarefas do Amazon ECS são uma construção mais antiga que foi substituída pelas revisões e implantações de serviços do Amazon ECS. Esse último oferece maior visibilidade do processo de implantação, bem como do histórico de implantação e revisão do serviço.
-
Com o CodeDeploy, os ganchos do ciclo de vida são especificados como parte do arquivo AppSpec fornecido a
CreateDeployment()
. Isso significa que os ganchos podem ser alterados de uma implantação para outra. Com o Amazon ECS azul/verde, os ganchos são especificados como parte da configuração do serviço, e qualquer atualização exigiria uma chamadaUpdateService()
. -
Tanto o CodeDeploy quanto o Amazon ECS azul/verde usam o Lambda para implementação de ganchos, mas as entradas e saídas esperadas são diferentes.
Com o CodeDeploy, a função deve chamar
PutLifecycleEventHookExecutionStatus()
para retornar o status do gancho, que pode serSUCCEEDED
ouFAILED
. Com o Amazon ECS, a resposta do Lambda é usada para indicar o status do gancho. -
O CodeDeploy invoca cada gancho como uma chamada única, e espera que o status final da execução seja retornado em até uma hora. Os ganchos do Amazon ECS são mais flexíveis, pois podem retornar um indicador
IN_PROGRESS
, o que sinaliza que o gancho deve ser invocado de novo repetidamente até que resulte emSUCCEEDED
ouFAILED
. Para obter mais informações, consulte Ganchos do ciclo de vida para implantações de serviços do Amazon ECS.
Abordagens de migração
Há três abordagens principais para migrar das implantações azul/verde do CodeDeploy para as implantações azul/verde do Amazon ECS. Cada abordagem tem características diferentes em termos de complexidade, risco, capacidade de reversão e possível tempo de inatividade.
Reutilizar os mesmos recursos do Elastic Load Balancing usados para o CodeDeploy
Você atualiza o serviço existente do Amazon ECS para usar o controlador de implantação do Amazon ECS com a estratégia de implantação azul/verde em vez do controlador de implantação do CodeDeploy. Ao usar essa abordagem, considere o seguinte:
-
O procedimento de migração é mais simples porque você está atualizando o controlador de implantação de serviços e a estratégia de implantação existentes do Amazon ECS.
-
Não há tempo de inatividade quando configurado e migrado corretamente.
-
Uma reversão exige que você reverta a revisão do serviço.
-
O risco é alto porque não há uma configuração azul/verde paralela.
Você usa o mesmo receptor de balanceador de carga e grupos de destino usados para o CodeDeploy. Se você estiver usando AWS CloudFormation, consulte Migração de um modelo de implantação azul/verde do CodeDeploy para AWS CloudFormation para um modelo azul/verde do Amazon ECS para AWS CloudFormation.
-
Modifique a regra padrão dos receptores de produção/teste para incluir o grupo de destino alternativo, e defina o peso do grupo de destino principal como 1 e o do grupo de destino alternativo como 0.
Para o CodeDeploy, os receptores do balanceador de carga anexado ao serviço são configurados com uma única regra (padrão) que roteia todo o tráfego para um único grupo de destino. Para o Amazon ECS azul/verde, os receptores do balanceador de carga devem ser pré-configurados com uma regra que inclua os dois grupos de destino com pesos.
-
Atualize o serviço existente do Amazon ECS chamando a API
UpdateService
e definindo o parâmetrodeploymentController
comoECS
e o parâmetrodeploymentStrategy
comoBLUE_GREEN
. Especifique os ARNs do grupo de destino, do grupo de destino alternativo, do receptor de produção e de um receptor de teste opcional. -
Verifique se o serviço funciona conforme o esperado.
-
Exclua a configuração do CodeDeploy para esse serviço do Amazon ECS, pois agora você está usando o Amazon ECS azul/verde.
Novo serviço com um balanceador de carga existente
Essa abordagem usa a estratégia azul/verde para a migração.
Ao usar essa abordagem, considere o seguinte:
-
A interrupção é mínima. Ela ocorre somente durante a troca de portas do Elastic Load Balancing.
-
Uma reversão exige que você reverta a troca de portas do Elastic Load Balancing.
-
O risco é baixo porque há configurações paralelas. Portanto, você pode testar antes da mudança de tráfego.
-
Deixe os receptores, os grupos de destino e o serviço do Amazon ECS para a configuração do CodeDeploy intactos para que você possa facilmente reverter para essa configuração, se necessário.
-
Crie novos grupos de destino e novos receptores (com portas diferentes dos receptores originais) no balanceador de carga existente. Em seguida, crie um novo serviço do Amazon ECS que corresponda ao serviço existente do Amazon ECS, exceto que você usa o
ECS
como controlador de implantação,BLUE_GREEN
como estratégia de implantação e passa os ARNs para os novos grupos de destino e as novas regras de receptores. -
Verifique a nova configuração enviando manualmente o tráfego HTTP para o serviço. Se tudo correr bem, troque as portas dos receptores originais e dos novos receptores para rotear o tráfego para a nova configuração.
-
Verifique a nova configuração e, se tudo continuar funcionando conforme o esperado, exclua a configuração do CodeDeploy.
Novo serviço com um balanceador de carga
Como na abordagem anterior, essa abordagem usa a estratégia azul/verde para a migração. A principal diferença é que a mudança da configuração do CodeDeploy para a configuração azul/verde do Amazon ECS ocorre em uma camada de proxy reverso acima do balanceador de carga. Exemplos de implementações para a camada de proxy reverso são o Route 53 e o CloudFront.
Essa abordagem é adequada para clientes que já têm essa camada de proxy reverso e se toda a comunicação com o serviço estiver acontecendo por meio dela (por exemplo, nenhuma comunicação direta no nível do balanceador de carga).
Ao usar essa abordagem, considere o seguinte:
-
Isso requer uma camada de proxy reverso.
-
O procedimento de migração é mais complexo porque você precisa atualizar o controlador de implantação de serviços e a estratégia de implantação existentes do Amazon ECS.
-
A interrupção é mínima. Ela ocorre somente durante a troca de portas do Elastic Load Balancing.
-
Uma reversão exige que você reverta as alterações na configuração do proxy.
-
O risco é baixo porque há configurações paralelas. Portanto, você pode testar antes da mudança de tráfego.
-
Não modifique a configuração existente do CodeDeploy intacta (balanceador de carga, receptores, grupos de destino, serviço do Amazon ECS e grupo de implantação do CodeDeploy).
-
Crie um novo balanceador de carga, grupos de destino e receptores configurados para implantações azul/verde do Amazon ECS.
Configure os recursos apropriados.
-
Application Load Balancer: para obter mais informações, consulte Recursos do Application Load Balancer para implantações azul/verde.
-
Network Load Balancer: para obter mais informações, consulte Recursos do Network Load Balancer para implantações azul/verde do Amazon ECS.
-
-
Crie um novo serviço com o
ECS
como controlador de implantação eBLUE_GREEN
como estratégia de implantação, apontando para os novos recursos do balanceador de carga. -
Verifique a nova configuração testando-a por meio do novo balanceador de carga.
-
Atualize a configuração do proxy reverso para rotear o tráfego para o novo balanceador de carga.
-
Observe a nova revisão do serviço e, se tudo continuar funcionando conforme o esperado, exclua a configuração do CodeDeploy.
Próximas etapas
Depois de migrar para implantações azul/verde do Amazon ECS:
-
Atualize seus scripts de implantação e pipelines de CI/CD para usar a API
UpdateService
do Amazon ECS em vez da APICreateDeployment
do CodeDeploy. -
Atualize seu monitoramento e alertas para rastrear as implantações do serviço do Amazon ECS em vez das implantações do CodeDeploy.
-
Considere implementar testes automatizados do seu novo processo de implantação para garantir que ele funcione conforme o esperado.