Por que minhas instâncias de contêiner do Amazon ECS com AMIs do Amazon Linux 1 estão desconectadas?

5 minuto de leitura
0

Minhas instâncias de contêiner do Amazon Elastic Container Service (Amazon ECS) estão desconectadas.

Breve descrição

Seu agente de contêiner do Amazon ECS pode se conectar e se reconectar várias vezes por hora. Esses eventos de mudança são normais e não são motivo de preocupação.

No entanto, se seu agente de contêiner permanecer em um estado desconectado, a instância de contêiner não poderá operar como parte do seu cluster do ECS. Seu agente está desconectado quando agentConnected retorna false. O problema pode ser causado pelo seguinte:

  • Problemas de rede impedem a comunicação entre a instância e o Amazon ECS.
  • O agente de contêiner não tem as permissões necessárias do AWS Identity and Access Management (IAM) para se comunicar com os endpoints do Amazon ECS.
  • Há problemas com o host ou o serviço Docker dentro da instância de contêiner.

Para identificar a causa da desconexão, conclua as etapas a seguir.

Resolução

Observação: A resolução a seguir se aplica às AMIs do Amazon Linux 1 otimizadas para o Amazon ECS. Para obter uma resolução que se aplica às AMIs do Amazon Linux 2 otimizadas para o Amazon ECS, consulte Como soluciono problemas de um agente desconectado do Amazon ECS?

Verificar se o serviço Docker está sendo executado na instância de contêiner

1.    Para verificar se o serviço Docker está sendo executado na instância de contêiner afetada, execute o seguinte comando:

sudo service docker status

A saída do comando é semelhante à seguinte:

docker (pid 23013) is running...

Se o serviço Docker não estiver em execução ou se você precisar reiniciá-lo, execute o seguinte comando:

sudo service docker restart

Observação: Não insira esse comando enquanto o serviço já estiver em execução. Primeiro, certifique-se de configurar a instância de contêiner para o estado draining. Em seguida, reinicie o serviço Docker para que as tarefas existentes sejam agendadas em outra instância de contêiner.

A saída do comando deve incluir as seguintes linhas:

Stopping docker: [  OK  ]
Starting docker: [  OK  ]

Observação: Para verificar se o serviço Docker está sendo executado após o comando de reinicialização, execute o comando sudo service docker status.

2.    Para iniciar o agente do ECS, execute o seguinte comando:

sudo start ecs

Verifique se o agente de contêiner está sendo executado na instância de contêiner

Para verificar se o agente de contêiner está sendo executado na instância de contêiner afetada, execute o seguinte comando:

sudo status ecs

Se o agente de contêiner não estiver em execução em sua instância de contêiner, execute o seguinte comando para iniciar o agente:

sudo start ecs

A saída do comando é semelhante à seguinte:

ecs start/running, process 23403

Revisar os arquivos de log do agente de contêiner e do Docker

Se suas instâncias de contêiner ainda estiverem desconectadas, revise os arquivos de log no host do contêiner para o agente de contêiner e o Docker.

Para gerar 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

Observação: Para coletar informações de log da instância de contêiner, execute o coletor de logs do Amazon ECS.

Verificar se o perfil de instância do IAM tem as permissões necessárias

Se o agente de contêiner ainda estiver desconectado, verifique se o perfil de instância do IAM associado à instância de contêiner tem as permissões do IAM necessárias.

1.    Conecte-se à instância usando SSH.

2.    Para visualizar os metadados da instância no perfil de instância associado à instância, execute o seguinte comando:

curl http://169.254.169.254/latest/meta-data/iam/info

A saída do comando é semelhante à seguinte:

{
  "Code" : "Success",
  "LastUpdated" : "2019-06-29T15:47:03Z",
  "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",
  "InstanceProfileId" : "AIPAJ5WF3LZVY7PLUHV72"
}

3.    Verifique se o perfil do IAM contém as permissões corretas para suas instâncias de contêiner.

4.    Para verificar erros de credenciais específicos com o agente de contêiner, execute o seguinte comando para verificar o log do agente de contêiner para obter uma lista de logs do ECS:

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

Observação: O log do agente de contêiner é rotacionado a cada hora, e o sufixo muda automaticamente para refletir a data e a hora atuais. Atualize o comando para incluir o intervalo de datas e o ID de log de quando o problema ocorreu.

Se o agente de contêiner não tiver as credenciais necessárias, você receberá um erro semelhante ao seguinte nos logs:

2019-06-29T16:10:09Z [ERROR] Unable to register as a container instance with ECS: 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: 0b73e260-5088-4688-a425-6f35f1ef440f
2019-06-29T16:10:09Z [ERROR] Error re-registering: 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: 0b73e260-5088-4688-a425-6f35f1ef440f

Ajuda adicional

Se você não conseguir identificar o problema com sua instância de contêiner do ECS a partir dessa resolução, entre em contato com o Suporte premium para obter ajuda. Primeiro, use o coletor de logs do Amazon ECS para criar um arquivo dos logs da sua instância. Em seguida, anexe os logs a um tíquete de suporte para ajudar o engenheiro a solucionar o problema.


Informações relacionadas

Solução de problemas do Amazon ECS

Agente de contêiner do Amazon ECS

Perfil do IAM da instância de contêiner do Amazon ECS

Localizações dos arquivos de log do Amazon ECS

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos