Criação de implantações azul/verde do Amazon ECS - Amazon Elastic Container Service

Criação de implantações azul/verde do Amazon ECS

Ao usar implantações azul/verde do Amazon ECS, você pode fazer e testar alterações no serviço antes de implementá-las em um ambiente de produção.

Pré-requisitos

Execute as operações a seguir antes de iniciar uma implantação azul/verde.

  1. Configurar as permissões apropriadas.

  2. As implantações azul/verde do Amazon ECS exigem que seu serviço use um dos recursos a seguir. Configure os recursos apropriados.

  3. Crie uma regra para rotear o tráfego para a revisão do serviço verde. Para obter mais informações, consulte Listener rules no Guia do usuário do Network Load Balancer.

  4. Crie um grupo de destino para a revisão do serviço verde. Quando você usa o modo de rede awsvpc para suas tarefas, o tipo de destino deve ser ip. Para obter informações sobre grupos de destino, consulte Target groups no Guia do usuário do Network Load Balancer.

  5. Decida se deseja executar as funções do Lambda para os eventos do ciclo de vida.

    • Antes de aumentar a escala verticalmente

    • Depois de aumentar a escala verticalmente

    • Mudança do tráfego de teste

    • Depois da mudança do tráfego de teste

    • Mudança do tráfego de produção

    • Depois da mudança do tráfego de produção

    Crie funções do Lambda para cada evento do ciclo de vida. Para obter mais informações, consulte Criar uma função do Lambda com o console no Guia do desenvolvedor do AWS Lambda.

Procedimento

Você pode usar o console ou a AWS CLI para criar um serviço azul/verde do Amazon ECS.

Console
  1. Abra o console em https://console.aws.amazon.com/ecs/v2.

  2. Determine o recurso no qual você inicia o serviço.

    Para iniciar um serviço em Etapas

    Clusters

    1. Na página Clusters, selecione o cluster no qual o serviço será criado.

      A página de detalhes do cluster é exibida.

    2. Na guia Services (Serviços), escolha Create (Criar).

    Definição de tarefa
    1. Na página Definições de tarefa, selecione a definição de tarefa.

    2. No menu Implantar, escolha Criar serviço.

    A página Criar serviço é exibida.

  3. 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.

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

  4. 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

  5. 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.

    Opção de computação Etapas

    Estratégia de provedor de capacidade

    1. Em Opções de computação, escolha Estratégia do provedor de capacidade.

    2. Escolha uma estratégia:

      • Para usar a estratégia de provedor de capacidade padrão do cluster, escolha Use cluster default (Usar padrão de cluster).

      • Se o seu cluster não tiver uma estratégia de provedor de capacidade padrão ou, para usar uma estratégia personalizada, escolha Usar personalizada, Adicionar estratégia de provedor de capacidade e, em seguida, defina sua estratégia de provedor de capacidade personalizada especificando uma Base, um Provedor de capacidade e um Peso.

    nota

    Para usar um provedor de capacidade em uma estratégia, o provedor de capacidade deve estar associado ao cluster.

    Tipo de inicialização
    1. Na seção Compute options (Opções de computação), selecione Launch type (Tipo de inicialização).

    2. Em Launch type (Tipo de inicialização), escolha um tipo de inicialização.

    3. (Opcional) Quando o tipo de inicialização do Fargate for especificado, em Platform version (Versão da plataforma), especifique a versão de plataforma a ser usada. Se não for especificada uma versão da plataforma, a versão da plataforma LATEST será usada.

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

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

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

    3. 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.

    4. 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 Tempo de incorporação, insira o número de minutos em que as revisões do serviço azul e do verde serão executadas simultaneamente antes que a revisão azul seja encerrada. Isso possibilita um tempo para a verificação e testes.

    2. (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.

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

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

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

  7. 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.

    2. 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.

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

    1. Selecione Ativar o Service Connect.

    2. 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).

    3. Para usar um namespace que não seja o namespace padrão do cluster, em Namespace, escolha o namespace do serviço.

    4. (Opcional) Configure regras de cabeçalho de tráfego de teste para implantações em azul/verde. 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.

      2. 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.

      3. 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.

    5. (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.

      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.

  9. (Opcional) Configure o balanceamento de carga para implantação azul/verde.

    Tipo do Elastic Load Balancing Etapas

    Application Load Balancer

    1. Em Tipo de balanceador de carga, escolha Application Load Balancer.

    2. Escolha Create a new load balancer (Criar um novo balanceador de carga) para criar um novo Application Load Balancer ou Use an existing load balancer (Usar um balanceador de carga existente) para selecionar um Application Load Balancer existente.

    3. Em Contêiner, escolha o contêiner que hospeda o serviço.

    4. Em Load balancer (Balanceador de carga), insira um nome exclusivo.

    5. Em Listener (Receptor), insira uma porta e um protocolo para que o Application Load Balancer receba solicitações de conexão. Por padrão, o balanceador de carga será configurado para usar a porta 80 e HTTP.

      • Em Regra de produção, insira a Ordem de avaliação e o Padrão de caminho para a regra.

        Essa regra é para seu tráfego de revisão do serviço de produção (azul).

      • Em Regra de teste, insira a Ordem de avaliação e o Padrão de caminho para a regra.

        Essa regra é para o tráfego de revisão do serviço de teste (verde).

    6. Em Grupo de destino, configure o seguinte:

      • Em Target group name (Nome do grupo de destino), insira um nome e um protocolo para o grupo de destino ao qual o Application Load Balancer encaminhará as solicitações.

      • Em Protocolo, escolha o protocolo para o grupo de destino ao qual o Application Load Balancer encaminhará as solicitações. Por padrão, o grupo de destino encaminha solicitações ao primeiro contêiner especificado na definição de tarefa.

      • Em Atraso no cancelamento de registro, insira o número de segundos para que o balanceador de carga altere o estado de destino para UNUSED. O padrão é trezentos segundos.

      • Em Health check path (Caminho da verificação de integridade), insira um caminho existente no contêiner para o qual o Application Load Balancer enviará periodicamente solicitações para verificar a integridade da conexão entre o Application Load Balancer e o contêiner. O padrão é o diretório raiz (/).

      • Em Nome do grupo alternativo, insira o nome do grupo de destino para a revisão do serviço de teste (verde).

    Network Load Balancer
    1. Em Load balancer type (Tipo de balanceador de carga), selecione Network Load Balancer.

    2. Em Load Balancer (Balanceador de carga), escolha um Network Load Balancer existente.

    3. Em Choose container to load balance (Escolher contêiner para balancear a carga), escolha o contêiner que hospeda o serviço.

    4. Em Receptor de produção, escolha a Porta do receptor de produção e o Protocolo do receptor de produção.

      Este é o receptor do tráfego de revisão do serviço de produção (azul).

    5. Em Receptor de teste, escolha a Porta do receptor de teste e o Protocolo do receptor de teste.

      Este é o receptor do tráfego de revisão do serviço de teste (verde).

    6. Em Grupo de destino, configure o seguinte:

      • Em Target group name (Nome do grupo de destino), insira um nome e um protocolo para o grupo de destino ao qual o Network Load Balancer encaminhará solicitações.

      • Em Protocolo, escolha o protocolo para o grupo de destino ao qual o Network Load Balancer encaminhará as solicitações. Por padrão, o grupo de destino encaminha solicitações ao primeiro contêiner especificado na definição de tarefa.

      • Em Atraso no cancelamento de registro, insira o número de segundos para que o balanceador de carga altere o estado de destino para UNUSED. O padrão é trezentos segundos.

      • Em Health check path (Caminho da verificação de integridade), insira um caminho existente no contêiner para o qual o Application Load Balancer enviará periodicamente solicitações para verificar a integridade da conexão entre o Application Load Balancer e o contêiner. O padrão é o diretório raiz (/).

      • Em Nome do grupo alternativo, insira o nome do grupo de destino para a revisão do serviço de teste (verde).

  10. (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).

  11. Escolha Criar.

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

    Substitua os valores das user-input pelos seus.

    { "serviceName": "myBlueGreenService", "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": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 2, "alarms": { "alarmNames": [ "myAlarm" ], "rollback": true, "enable": true }, "lifecycleHooks": [ { "hookTargetArn": "arn:aws:lambda:us-west-2:7123456789012:function:checkExample", "roleArn": "arn:aws:iam::123456789012:role/ECSLifecycleHookInvoke", "lifecycleStages": [ "PRE_SCALE_UP" ] } ] }, "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-blue-green-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911", "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS" } } ] }
  2. Executar create-service.

    Substitua os valores das user-input pelos seus.

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

    Como alternativa, você pode usar o exemplo a seguir, que cria um serviço de implantação azul/verde com uma configuração de balanceador de carga:

    aws ecs create-service \ --cluster "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster" \ --service-name "blue-green-example-service" \ --task-definition "nginxServer:1" \ --launch-type "FARGATE" \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12345,subnet-67890,subnet-abcdef,subnet-fedcba],securityGroups=[sg-12345],assignPublicIp=ENABLED}" \ --desired-count 3 \ --deployment-controller "type=ECS" \ --deployment-configuration "strategy=BLUE_GREEN,maximumPercent=200,minimumHealthyPercent=100,bakeTimeInMinutes=0" \ --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg1/abcdef1234567890,containerName=nginx,containerPort=80,advancedConfiguration={alternateTargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg2/0987654321fedcba,productionListenerRule=arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/MyLB/1234567890abcdef/1234567890abcdef,roleArn=arn:aws:iam::123456789012:role/ELBManagementRole}"

Próximas etapas

  • Atualize o serviço para iniciar a implantação. Para obter mais informações, consulte Atualizar um serviço do Amazon ECS.

  • Monitore o processo de implantação para garantir que ele siga o padrão azul/verde:

    • A revisão do serviço verde é criada e tem a escala aumentada verticalmente

    • O tráfego de teste é roteado para a revisão verde (se configurado)

    • O tráfego de produção é mudado para a revisão verde

    • Após o tempo de incorporação, a revisão azul é encerrada