Ir para o conteúdo

Como soluciono problemas de um atendente do Amazon ECS desconectado?

8 minuto de leitura
0

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

Breve descrição

É esperado que seu atendente de contêiner do Amazon ECS se desconecte e se reconecte várias vezes em uma hora como parte da operação normal. Eventos de alteração que duram apenas alguns minutos podem não indicar problemas com o atendente de contêiner ou com sua instância de contêiner.

No entanto, se o atendente de contêiner permanecer em estado desconectado por mais tempo, a instância de contêiner não poderá operar como parte do seu cluster do Amazon ECS. Esse problema pode ser causado por um dos seguintes motivos:

  • Problemas de rede impedem a comunicação entre a instância e o Amazon ECS.
  • O atendente 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 daemon do Docker dentro da instância de contêiner.
  • Há contenção de recursos no host subjacente.

É uma prática recomendada usar a versão mais recente do atendente de contêiner do Amazon ECS.

Resolução

Observação: a resolução a seguir se aplica às AMIs do Amazon Linux 2023 otimizadas para o Amazon ECS.

É possível usar chaves SSH para se conectar às suas instâncias do Amazon EC2. Se você não tiver as chaves SSH geradas, poderá usar o Gerenciador de Sessões, um recurso do AWS Systems Manager, para se conectar à sua instância. Por padrão, o Systems Manager Agent é instalado nas AMIs do Amazon Linux 2023 e na AMI base otimizada para ECS do Amazon Linux 2023.

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

Para verificar o status e a conectividade do atendente de contêiner do Amazon ECS, execute um dos seguintes comandos em sua instância de contêiner:

sudo systemctl status ecs
sudo docker ps -f name=ecs-agent

A saída especifica ativo e é semelhante à seguinte:

ecs.service - Amazon Elastic Container Service - container agent
        Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; preset: disabled)
        Active: active (running) since Thu 2026-02-19 08:42:39 UTC; 1min 17s ago
          Docs: https://aws.amazon.com/documentation/ecs/
     Main PID: 2578 (amazon-ecs-init)
        Tasks: 5 (limit: 9497)
       Memory: 136.5M
          CPU: 214ms
       CGroup: /system.slice/ecs.service
               └─2578 /usr/libexec/amazon-ecs-init start
CONTAINER ID  IMAGE                           COMMAND   CREATED         STATUS
8ab4e7c372d7  amazon/amazon-ecs-agent:latest  "/agent"  2 minutes ago   Up 2 minutes (healthy)

Se o problema for causado por um atendente desconectado, execute o seguinte comando para reiniciar o atendente ECS:

sudo systemctl restart ecs

Observação: Não há saída retornada após a execução dos comandos anteriores.

Para verificar se o atendente está em execução, execute o seguinte comando:

sudo systemctl status ecs

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

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

sudo systemctl status docker

A saída especifica ativo e é semelhante à seguinte:

docker.service - Docker Application Container Engine
        Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: disabled)
        Active: active (running) since Thu 2026-02-19 08:42:37 UTC; 3min 46s ago
   TriggeredBy: docker.socket
          Docs: https://docs.docker.com
     Main PID: 2314 (dockerd)
        Tasks: 13
       Memory: 485.3M
          CPU: 4.846s
       CGroup: /system.slice/docker.service
               └─2314 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536

Se o serviço do Docker estiver inativo, execute o seguinte comando para reiniciá-lo:

sudo systemctl restart docker

Observação: Não há saída retornada após a execução dos comandos anteriores.

Para verificar se o serviço do Docker foi reiniciado, execute o seguinte comando:

sudo systemctl status docker

Revise os arquivos de log do atendente de contêiner e do Docker

Se sua instância de contêiner ainda estiver desconectada, revise os arquivos de log no host do contêiner para o atendente de contêiner e para o Docker.

Verifique os seguintes arquivos de log para saber se há palavras-chave, como “erro”, “aviso” ou “estado de transição do agente”:

  • Veja os logs mais recentes do atendente de contêiner do Amazon ECS em /var/log/ecs/ecs-agent.log. É possível visualizar o log girado filtrando como /var/log/ecs/ecs-agent-log.timestamp
  • Veja o log de inicialização do Amazon ECS em /var/log/ecs/ecs-init.log
  • Veja os logs de execução de dados do usuário em /var/log/cloud-init.log
  • Visualize os logs do Daemon do Docker com o comando sudo journalctl -u docker

Se você usa Linux, também pode analisar os códigos de saída para obter mais informações sobre o atendente de contêiner interrompido.

Para obter o código de saída, execute o seguinte comando:

docker inspect <your container ID>

Observação: Substitua seu ID de contêiner pelo ID do contêiner interrompido.

É possível usar o coletor de logs do Amazon ECS para coletar logs gerais do sistema operacional, logs do Docker e logs do atendente de contêiner do Amazon ECS.

Verifique 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. Use SSH ou o Gerenciador de Sessões para se conectar à instância.

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

    TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
    curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/info

    A saída é semelhante ao seguinte:

    {
       "Code" : "Success",
       "LastUpdated" : "2026-02-19T08:42:14Z",
       "InstanceProfileArn" : "arn:aws:iam::1122334455:instance-profile/ecsInstanceRole",
       "InstanceProfileId" : "AIPA4VIZXOFF55F72XIZN"
    }
  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, execute o seguinte comando para verificar o log do agente de contêiner:

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

    Observação: Substitua AAAA-MM-DD-## pelo carimbo de data/hora relevante.

    O log do atendente de contêiner é alternado a cada hora. O sufixo muda automaticamente para refletir a data e a hora atuais. Atualize o comando para incluir o intervalo de data e o ID de log de quando o problema ocorreu.

Verifique se sua instância de contêiner tem recursos suficientes para executar o atendente do ECS

Se suas tarefas tiverem uma alta utilização de memória ou de CPU, sua instância de contêiner pode não ter recursos suficientes para executar o atendente do ECS.

O atendente de contêiner do Amazon ECS usa a função ReadMemInfo() do Docker para consultar a quantidade de memória disponível para o sistema operacional.

Execute o comando a seguir em sua instância de contêiner para ver a memória total reconhecida pelo sistema operacional:

free -b

Exemplo de saída para uma instância t2.large executando a AMI do Amazon Linux 2023 otimizada para Amazon ECS:

               total        used        free      shared  buff/cache   available
Mem:     8327938048   337494016  6402355200      557056  1588088832  7745118208
Swap:             0           0           0

É possível reservar memória para o atendente de contêiner do Amazon ECS e outros processos críticos do sistema em suas instâncias de contêiner. Reservar essa memória ajuda a garantir que os contêineres da sua tarefa não disputem pela mesma memória. Para obter mais informações, consulte Reserva de memória da instância de contêiner do Linux do Amazon ECS.

Verifique se a variável de ambiente ECS_CLUSTER tem o nome de cluster correto

Se o parâmetro de configuração do atendente de contêinerECS_CLUSTER do Amazon ECS tiver o nome de cluster incorreto, a instância de contêiner não poderá se juntar ao cluster. Para verificar o conteúdo do arquivo /etc/ecs/ecs.config e verificar esse parâmetro, execute o seguinte comando:

cat /etc/ecs/ecs.config

Verifique se o atendente do ECS pode se comunicar com os endpoints do ECS

Para se conectar aos endpoints do ECS, as listas de controle de acesso da rede e o grupo de segurança da instância de contêiner devem permitir conexões de saída na porta 443 (HTTPS).

Se sua instância de contêiner estiver em uma sub-rede pública, verifique se a instância tem um endereço IP público e se a tabela de rotas da sub-rede tem uma rota para um gateway da Internet.

Se sua instância de contêiner estiver em uma sub-rede privada, verifique se a tabela de rotas da sub-rede tem uma rota para um gateway NAT ou se você configurou endpoints da VPC para o Amazon ECS.

Para verificar as conexões de saída com os endpoints do ECS (ACS/TCS), execute um dos seguintes comandos em sua instância de contêiner:

sudo yum install telnet -y
telnet ecs.REGION.amazonaws.com 443

ou

curl https://ecs.REGION.amazonaws.com

Observação: substitua REGION pela sua região da AWS.

Revise as seguintes práticas recomendadas:

  • A menos que seu aplicativo exija um sistema operacional específico ou uma versão do Docker que não esteja disponível na AMI otimizada para Amazon ECS, use as AMIs Linux otimizadas para Amazon ECS para executar suas workloads do ECS.
  • Use a versão mais recente do atendente de contêiner do Amazon ECS. A versão mais recente inclui atributos aprimorados e fornece atualizações importantes.
  • Configure tarefas com limites de CPU e memória.

Informações relacionadas

Solução de problemas do Amazon ECS

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

Visualização de logs de atendente de contêiner do Amazon ECS

AWS OFICIALAtualizada há 7 meses