Por que minha instância do Amazon ECS ou do Amazon EC2 não consegue ingressar no cluster?

Última atualização: 18/8/2022

Não consigo registrar minha instância do Amazon Elastic Compute Cloud (Amazon EC2) com um cluster do Amazon Elastic Container Service (Amazon ECS).

Breve descrição

Sua instância do Amazon EC2 não pode se registrar ou ingressar em um cluster do ECS devido a um ou mais dos seguintes motivos:

  • O endpoint do ECS não pode acessar o nome de host DNS da instância publicamente.
  • Suas configurações de sub-rede pública estão incorretas.
  • Suas configurações de sub-rede privada estão incorretas.
  • Seus endpoints de VPC estão configurados incorretamente.
  • Seus grupos de segurança não permitem tráfego de rede.
  • A instância do EC2 não tem as permissões necessárias do AWS Identity and Access Management (IAM). Ou a chamada de API ecs:RegisterContainerInstance é negada.
  • Os dados do usuário da instância para o contêiner do ECS não estão configurados corretamente.
  • O agente do ECS está parado ou não está sendo executado na instância.
  • A configuração de execução do grupo do Auto Scaling não está correta (se a instância fizer parte de um grupo do Auto Scaling).
  • A imagem de máquina da Amazon (AMI) usada para sua instância não atende aos pré-requisitos.

Resolução

Importante: use o runbook do AWS Systems Manager AWSSupport-TroubleshootECSContainerInstance para solucionar problemas comuns listados na seção anterior. Se a saída do runbook não fornecer recomendações, use as abordagens manuais de solução de problemas explicadas nas seções subsequentes.

Use o runbook do Systems Manager Automation

Com o runbook AWSSupport-TroubleshootECSContainerInstance, você pode solucionar problemas da instância do EC2 que falhar ao se registrar no cluster do ECS. Essa automação analisa o seguinte:

  • Os dados do usuário da instância contêm as informações corretas do cluster?
  • O perfil da instância contém as permissões necessárias?
  • Há algum problema de configuração de rede?

Importante: use o runbook AWSSupport-TroubleshootECSContainerInstance na mesma região da AWS em que o cluster do ECS e a instância do EC2 estão localizados.

  1. Abra o console do AWS Systems Manager.
  2. No painel de navegação, em Change Management (Gerenciamento de alterações), escolha Automation (Automação).
  3. Escolha Execute automation (Executar automação).
  4. Escolha a guia Owned by Amazon (Propriedade da Amazon).
  5. Em Automation document (Documento de automação), procure por TroubleshootECSContainerInstance.
  6. Selecione o cartão AWSSupport-TroubleshootECSContainerInstance.
    Observação: selecione o botão de opção, e não o nome de automação com hiperlink.
  7. Escolha Next (Próximo).
  8. Em Execution automation document (Documento de automação de execução), certifique-se de que a opção Simple execution (Execução simples) esteja selecionada.
  9. Na seção Input parameters (Parâmetros de entrada), em AutomationAssumeRole, insira o nome do recurso da Amazon (ARN) da função que permite que o Systems Manager Automation execute ações.
    Observação: se você não especificar uma função do IAM, o Systems Manager Automation usará as permissões da função do usuário do IAM que executa o runbook. Para obter mais informações sobre como criar a função de admissão para o Systems Manager Automation, consulte Tarefa 1: Crie uma função de serviço para automação.
    Importante: certifique-se de que a AutomationAssumeRole ou o usuário/função do IAM tenha permissões para as ações a seguir: ec2:DescribeIamInstanceProfileAssociations, ec2:DescribeInstanceAttribute, ec2:DescribeInstances, ec2:DescribeNetworkAcls, ec2:DescribeRouteTables, ec2:DescribeSecurityGroups, ec2:DescribeSubnets, ec2:DescribeVpcs, ec2:DescribeVpcEndpoints, iam:GetInstanceProfile, iam:GetRole, iam:SimulateCustomPolicy e iam:SimulatePrincipalPolicy.
  10. Em ClusterName, insira o nome do cluster em que a instância do EC2 falhou ao se registrar.
  11. Em InstanceId, insira o ID da instância do EC2 que falhou ao se registrar.
  12. Escolha Execute (Executar).

A saída do runbook fornece etapas de solução de problemas e recomendações para resolver o problema que fez com que sua instância do EC2 não se registrasse no cluster.

Verifique o status do agente do Amazon ECS na instância do Amazon Linux 2

Verifique se o agente do ECS na instância está sendo executado executando o seguinte comando:

sudo status ecs

Se o agente de contêiner não estiver sendo executado na instância do contêiner, execute o seguinte comando para iniciar o agente:

sudo start ecs

A saída do comando deve ser semelhante à seguinte:

ecs start/running, process 23403

Verifique as configurações de execução

Se a instância for executada como parte de um grupo do Auto Scaling, verifique se a configuração de execução do grupo Auto Scaling está correta. Para obter mais informações, consulte a Etapa 5 em Atualizar um cluster de instância de contêiner do Amazon ECS com uma nova AMI.

Verifique a AMI da sua instância

Se a AMI usada para a instância do EC2 for uma AMI copiada ou uma AMI personalizada, certifique-se de que a instância tenha os seguintes componentes:

As AMIs otimizadas para Amazon ECS são pré-configuradas com esses requisitos. Portanto, é uma prática recomendada usá-los para instâncias de contêiner, a menos que sua aplicação exija um sistema operacional específico ou uma versão do Docker que ainda não esteja disponível nessa AMI.

Verifique os logs

Se o problema ainda persistir, colete os logs usando o Coletor de logs do Amazon ECS e os revise para encontrar a causa. Você também pode verificar os arquivos de log no host do contêiner para o agente de contêiner e o Docker.

Para exibir os arquivos de log do agente de contêiner e do Docker, execute os seguintes comandos:

sudo cat /var/log/ecs/ecs-agent.log.YYYY-MM-DD-**
sudo cat /var/log/docker

Erros comuns

Erro: ao iniciar uma nova instância do EC2. Motivo do status: Esta conta está bloqueada no momento e não é reconhecida como uma conta válida. Entre em contato com aws-verification@amazon.com se tiver dúvidas. Falha ao executar a instância do EC2.

Entre em contato com aws-verification@amazon.com, conforme indicado no motivo do status, e mencione que você deve desbloquear sua conta.

Error: re-registering: ClientException: Container instance 12345678910xxxxxxxxxxxx is inactive.\n\tstatus code: 400, request id: 012345678a-012345b-012ab-0a1-9f645f4s5c12" module=agent.go (Erro: registrando novamente: ClientException: a instância de contêiner 12345678910xxxxxxxxxxxx está inativa código de \n\tstatus: 400, id da solicitação: 012345678a-012345b-012ab-0a1-9f645f4s5c12" módulo = agent.go)

Você recebe esse erro quando o agente do ECS não consegue registrar a instância de contêiner do EC2 com o cluster do ECS porque a instância do EC2 está inativa agora. Esse erro está relacionado à aplicação em execução na instância. Para entender a causa do erro, verifique a plocaçao. Se o erro persistir, verifique os logs do agente do ECS.

Erro: poucas instâncias conseguem ingressar no cluster, mas com as mesmas configurações, outras instâncias não conseguem ingressar no cluster.

Esse erro pode ser causado devido a ThrottlingException que ocorre quando o limite de taxa para uma chamada de API específica é excedido. Para resolver esse erro, aumente o limite de taxa no nível da conta. Certifique-se de verificar se há APIs, como RegisterTargets e RegisterContainerInstance.

Erro: depois de alterar o tipo de instância, as novas instâncias não conseguem ingressar no cluster.

Esse erro é causado quando o agente do ECS está preso no estado pendente e não pode alterar o tipo de instância. Ao contrário de outras instâncias do EC2, você não pode parar a instância do ECS, alterar o tipo de instância e iniciá-la novamente. Para alterar o tipo de instância no ECS, você deve encerrar a instância de contêiner e, em seguida, executar uma nova instância de contêiner com o tamanho de instância desejado usando a mais recente AMI do Amazon Linux 2 otimizada para o Amazon ECS para o cluster desejado. Você também pode criar uma nova configuração de execução e, em seguida, atualizar essa configuração de execução no grupo do Auto Scaling.

Erro: Não foi possível registrar como uma instância de contêiner com ECS: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-00aa11bb22cc33def is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster . status code: 400, request id: 0a123456-7899-10101-a987-6543210deff

2019-06-29T16:10:09Z [ERROR] Erro ao registrar novamente: AccessDeniedException: User: arn:aws:sts::1122334455:assumed-role/ecsInstanceRole/i-0052b2e858b1891ef is not authorized to perform: ecs:RegisterContainerInstance on resource: arn:aws:ecs:us-east-1:1122334455:cluster/exampleCluster status code: 400, request id: 0a123456-7899-10101-a987-123456pqrs

Esses erros são causados devido à falta de permissões do IAM. Para resolver esses erros, consulte as instruções em Verificar o perfil do IAM da instância de contêiner do Amazon ECS.

Além disso, execute o runbook AWSSupport-TroubleshootECSContainerInstance para ver quais permissões estão faltando no perfil da instância de contêiner.