Como soluciono problemas relacionados a implantações azul/verde no Amazon ECS?

Data da última atualização: 13/04/2022

Desejo solucionar problemas relacionados a implantações azul/verde para serviços hospedados no Amazon Elastic Container Service (Amazon ECS).

Breve descrição

Os problemas mais comuns relacionados a implantações azul/verde para serviços hospedados no Amazon ECS são os seguintes:

Problemas relacionados ao AWS Identity and Access Management (IAM):

  • Você não consegue criar seu serviço do ECS porque está recebendo este erro: Crie sua função de serviço para CodeDeploy
  • Você está recebendo este erro: o serviço falhou ao iniciar uma tarefa com o seguinte erro (O ECS não pôde assumir a função fornecida para essa tarefa. Verifique se a função que está sendo passada tem o relacionamento de confiança e as permissões adequadas e se o usuário do IAM tem permissões para passar essa função)

Problemas relacionados ao balanceador de carga/ECS:

  • Seu serviço ECS não está estabilizando devido a falhas na verificação de integridade.
  • Você está recebendo este erro: O ELB não pôde ser atualizado porque o grupo de destino do conjunto de tarefas principal deve estar atrás do listener
  • O tráfego ainda é roteado ao grupo de destino azul após a implantação bem-sucedida.
  • Suas tarefas do ECS em execução no Serviço ECS estão falhando nas verificações de integridade do Application Load Balancer somente durante uma nova implantação VERDE.
  • Suas tarefas do ECS estão falhando de forma inconsistente nas verificações de integridade do Application Load Balancer.
  • O Serviço ECS não consegue colocar uma tarefa porque nenhuma instância de contêiner atende a todos os requisitos. A instância de contêiner correspondente mais próxima tem unidades de CPU insuficientes disponíveis.

Problemas relacionados ao AWS CloudFormation (se você estiver executando uma implantação azul/verde por meio do CloudFormation):

  • Ao criar um conjunto de alterações que aciona uma implantação azul/verde, a pilha do CloudFormation falha com um erro de falha interna.
  • Você está recebendo um erro ao criar um conjunto de alterações para acionar a implantação azul/verde 'CodeDeployBlueGreenHook' of type AWS::CodeDeploy::BlueGreen falhou com a mensagem: O ID lógico TaskDefinition [ ] é o mesmo entre o modelo inicial e final, o CodeDeploy não pode executar a atualização do estilo BlueGreen corretamente

Resolução

Não é possível criar o Serviço ECS porque você recebe o erro: Crie sua função de serviço para CodeDeploy:

Você recebe esse erro porque o AWS CodeDeploy não tem as permissões do IAM necessárias para executar a estratégia de implantação azul/verde. Você deve conceder permissões ao serviço CodeDeploy para atualizar seu serviço Amazon ECS em seu nome.

Para solucionar esse erro, verifique se a função do IAM do CodeDeploy foi criada corretamente e tem as permissões necessárias.

Para criar uma função do IAM para o CodeDeploy, faça o seguinte:

  1. Abra o console do IAM.
  2. No painel de navegação, escolha Roles (Funções).
  3. Selecione Create role (Criar função)
  4. Na seção Select type of trusted entity (Selecionar tipo de entidade confiável), escolha AWS service (Serviço da AWS) e, em seguida, escolha CodeDeploy.
  5. Na seção Select your use case (Selecione seu caso de uso), escolha CodeDeploy - ECS e depois escolha Next:Permissions (Próximo: Permissões).
    Observação: mantenha a política padrão AWSCodeDeployforECS. Essa política inclui as permissões que o CodeDeploy exige para interagir corretamente com o Amazon ECS e outros serviços.
  6. Escolha Next: Tags (Próximo: Etiquetas).
  7. (Opcional) Insira um nome de etiqueta e escolha Next: Review (Próximo: Revisão).
  8. Em Role name (Nome da função), insira ecsCodeDeployRole.
  9. Selecione Create role (Criar função).

Você está recebendo o erro: O serviço falhou ao iniciar uma tarefa com o erro (O ECS não pôde assumir a função fornecida para essa tarefa: verifique se a função do IAM que está sendo passada tem o relacionamento de confiança e as permissões adequadas e se o usuário do IAM tem permissões para passar essa função):

Verifique a função do IAM retornada pela mensagem de erro para garantir que a instância do Amazon Elastic Compute Cloud (Amazon EC2) tenha um relacionamento confiável para o serviço de tarefas do ECS ecs-tasks.amazonaws.com. O relacionamento de confiança para sua função deve ser semelhante ao seguinte:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ec2.amazonaws.com",
          "ecs-tasks.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  • Seu serviço ECS está falhando ao estabilizar devido a falhas de verificação de integridade: Certifique-se de que os mapeamentos de portas de suas definições de tarefa estejam correspondendo às portas dos seus grupos de destino. Para obter mais informações, consulte Como fazer com que minhas tarefas do Amazon ECS sejam executadas usando o tipo de execução do Amazon EC2 para passar na verificação de integridade do Application Load Balancer no Amazon ECS?
  • Você está recebendo a mensagem de erro de que o ELB não pôde ser atualizado porque o grupo de destino do conjunto de tarefas principal deve estar atrás do listener. Você recebe esse erro quando seus listeners ou grupos de destino do Elastic Load Balancing estão configurados incorretamente. Certifique-se de que o listener primário e o listener de teste do ELB estejam apontando para o grupo de destino principal que está servindo suas workloads no momento.
  • O tráfego ainda é roteado ao grupo de destino azul após a implantação bem-sucedida: o CodeDeploy atualiza automaticamente o Listener primário do balanceador de carga para apontar para o grupo de destino verde após a conclusão da implantação. No entanto, o CodeDeploy atualiza somente o listener de produção especificado. Se o CodeDeploy falhar ao alternar o tráfego após a implantação, seus listener do ELB podem estar configurados com o tipo de tráfego errado. Certifique-se de que você tenha especificou o protocolo e a porta corretos para o ouvinte primário do ELB.
  • Suas tarefas do ECS em execução no Serviço ECS estão falhando nas verificações de integridade do Application Load Balancer somente durante uma nova implantação verde: Verifique se algum outro serviço ECS está tentando registrar suas tarefas no mesmo grupo de destino verde, causando discrepância. Atualize a configuração do balanceador de carga para garantir que apenas um serviço ou porta do ECS esteja registrado em um grupo de destino.
  • Suas tarefas do ECS estão falhando de forma inconsistente nas verificações de integridade do Application Load Balancer: Esse problema pode acontecer quando seus contêineres estão demorando mais do que o tempo esperado para iniciar. Verifique o código da aplicação do contêiner para encontrar a causa do atraso. Para resolver esse problema, otimize o código da aplicação. Se você ainda não conseguir resolver o problema, inclua um período de carência de verificação de integridade no serviço ECS para que os contêineres tenham tempo suficiente para iniciar.
  • O Serviço ECS não consegue colocar uma tarefa porque nenhuma instância de contêiner atende a todos os seus requisitos. A instância de contêiner correspondente mais próxima tem unidades de CPU insuficientes disponíveis: Certifique-se de ter recursos de instância de contêiner suficientes antes de executar uma implantação azul/verde.

Observação: essas etapas de solução de problemas serão aplicáveis somente se você estiver usando o CloudFormation para sua implantação azul/verde

  • Ao criar um conjunto de alterações que aciona uma implantação azul/verde, a pilha do CloudFormation falha com um erro de falha interna: Para atenuar esse problema, use uma função de serviço do CloudFormation e anexe essa função à sua pilha do CloudFormation. Certifique-se de que a função de serviço tenha as permissões necessárias para executar todas as operações de pilha. Observe que você não pode remover a função de serviço da pilha depois que a pilha é criada.
  • Você está recebendo um erro ao criar um conjunto de alterações para acionar a implantação azul/verde: 'CodeDeployBlueGreenHook' do tipo AWS::CodeDeploy::BlueGreen falhou com a mensagem: O ID lógico TaskDefinition [ ] é o mesmo entre o modelo inicial e final, o CodeDeploy não pode executar a atualização do estilo BlueGreen corretamente: Quando você especificar um ouvinte de teste que já está apontando para o grupo de destino verde, o gancho CodeDeploy falha com esse erro. Certifique-se de que o listener de teste ainda não esteja apontando para o grupo de destino verde antes de executar a implantação azul/verde.

Importante: não use a API UpdateService para cancelar e reverter a implantação azul/verde. Em vez disso, use a API CreateDeployment. Para reverter uma implantação, use a API de implantação StopDeployment.