Por que minha tarefa do Amazon ECS parou?

7 minuto de leitura
0

Minha tarefa do Amazon Elastic Container Service (Amazon ECS) parou. Como soluciono problemas que interrompem minha tarefa do Amazon ECS?

Descrição breve

Suas tarefas do Amazon ECS podem parar por vários motivos. Os motivos mais comuns são:

  • Contêiner essencial fechado
  • Falha nas verificações de integridade do Elastic Load Balancing (ELB)
  • Falha nas verificações de integridade do contêiner
  • Instância de contêiner não íntegra
  • Manutenção da infraestrutura subjacente
  • Acionamento de evento de escalonamento de serviço
  • ResourceInitializationError
  • CannotPullContainerError
  • Tarefa interrompida pelo usuário

Compreender a correlação entre uma tarefa interrompida e o motivo da interrupção pode ajudar a reduzir o esforço necessário para a solução de problemas.

Resolução

Você pode exibir os detalhes de uma tarefa interrompida usando a API DescribeTasks. No entanto, os detalhes da tarefa interrompida aparecem apenas por 1 hora nos resultados retornados. Para exibir por mais tempo os detalhes da tarefa interrompida, você pode usar este modelo do AWS CloudFormation para armazenar o Amazon CloudWatch Logs de um evento do EventBridge que seja acionado quando uma tarefa for interrompida.

Motivos da interrupção

Contêiner essencial na tarefa fechada

Todas as tarefas devem ter pelo menos um contêiner essencial. Se o parâmetro essencial de um contêiner for marcado como verdadeiro e esse contêiner falhar ou parar por qualquer motivo, todos os outros contêineres que fazem parte dessa tarefa serão interrompidos. Para entender por que uma tarefa foi fechada com o respectivo motivo, identifique o código de fechamento usando a API DescribeTasks e navegue até a seção Códigos comuns de fechamento deste artigo.

A tarefa falhou nas verificações de integridade do ELB

Quando uma tarefa falhar devido a verificações de integridade do ELB, confirme se o grupo de segurança do seu contêiner permite o tráfego originado do ELB. Considere o seguinte:

  • Defina um período mínimo de carência para a verificação de integridade. Isso instrui o programador de serviços para ignorar as verificações de integridade do Elastic Load Balancing por um período predefinido depois do instanciamento de uma tarefa.
  • Por padrão, um destino começa a receber sua parcela completa de solicitações assim que ele é registrado em um grupo de destino e é aprovado em uma verificação inicial de integridade. O uso do modo de início lento permite que os destinos tenham algum tempo para se aquecer antes que o balanceador de carga envie uma parcela completa de solicitações a eles.
  • Monitore as métricas de CPU e memória do serviço. Por exemplo, a alta utilização da CPU pode fazer com que a aplicação deixe de responder e resultar em um erro 502.
  • Verifique seus logs de aplicação em busca de erros de aplicação.
  • Verifique se a porta de ping e o caminho da verificação de integridade estão configurados corretamente.
  • Percorra o caminho da verificação de integridade no Amazon Elastic Compute Cloud (Amazon EC2) e confirme o código de resposta.

Falha nas verificações de integridade do contêiner

É possível definir as verificações de integridade na API TaskDefinition ou no Dockerfile.

Você pode exibir o status de integridade de contêineres individuais e da tarefa com a operação da API DescribeTasks.

Confirme se o status de saída do comando de verificação de integridade indica que o contêiner está íntegro. Verifique seus logs de contêiner em busca de erros de aplicação usando as configurações do driver de log especificadas na definição da tarefa. Os valores possíveis são os seguintes:

  • 0: success: o contêiner está íntegro e pronto para uso.
  • 1: unhealthy: o contêiner não está funcionando corretamente.
  • 2: reserved: não use esse código de saída.

(instância i-xx) (porta x) não está íntegra em (motivo Falha na verificação de integridade)

Isso indica que o status do contêiner não está íntegro. Como solucionar esse erro:

  • Verifique se o grupo de segurança anexado à instância de contêiner está permitindo o tráfego.
  • Confirme se há uma resposta bem-sucedida do back-end sem atraso.
  • Defina o valor do tempo de resposta corretamente.
  • Verifique os logs de acesso do seu balanceador de carga para mais informações.

Serviço ABCService: o ECS está realizando manutenção na infraestrutura subjacente que hospeda a tarefa

Isso indica que a tarefa foi interrompida devido a um problema de manutenção da tarefa. Para mais informações, consulte Manutenção de tarefas do AWS Fargate.

Um serviço garante que a estratégia de agendamento especificada seja seguida e que as tarefas sejam reprogramadas quando forem interrompidas ou falharem. Se a instância de contêiner fizer parte de um grupo do Auto Scaling. É necessário iniciar uma nova instância de contêiner e posicionar as tarefas. Para mais informações, consulte Como verificar uma ação de escalabilidade para um grupo do Auto Scaling.

Acionamento de evento de escalonamento de serviço do ECS

Essa é uma mensagem padrão de serviço. O Amazon ECS aproveita o serviço Application Auto Scaling para fornecer essa funcionalidade. O serviço ECS é capaz de aumentar ou diminuir automaticamente a quantidade desejada de tarefas. Considere as seguintes ações:

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed

Para solucionar esse erro, consulte Como solucionar o erro “não é possível extrair segredos ou autenticação do registro” no Amazon ECS?

CannotPullContainerError

Esse erro indica que a função de execução de tarefas que está sendo usada não tem permissão para se comunicar com o Amazon ECS. Para solucionar esse erro:

  • Verifique se a função de execução de tarefas tem as permissões necessárias. O Amazon ECS fornece a política gerenciada AmazonECSTaskExecutionRolePolicy, que contém as permissões para a maioria dos casos de uso.
  • Verifique se o endpoint de serviço do ECR está acessível para: ecr.region.amazonaws.com e dkr.ecr.region.amazonaws.com
  • Para imagens privadas que precisam de autenticação, verifique se repositoryCredentials e credentialsParameter estão definidos com as informações corretas. Para mais informações, consulte Autenticação de registro particular para tarefas.

Tarefa interrompida pelo usuário

Isso indica que a tarefa recebeu um StopTask. Você pode identificar quem iniciou a chamada exibindo StopTask no CloudTrail para obter as informações de userIdentity.

Códigos de saída comuns

  • 0: ponto de entrada, êxito ou CMD está concluindo sua execução e, portanto, o contêiner está interrompido.
  • 1: indica um erro da aplicação. Para mais informações, analise os logs de aplicação.
  • 137: ocorre quando a tarefa teve o fechamento forçado (SIGKILL) para o contêiner:
    Falha na resposta a um SIGTERM dentro do período padrão de 30 segundos. Depois disso, o valor SIGKILL é enviado e os contêineres são interrompidos à força. É possível configurar o período padrão de 30 segundos no agente de contêiner do ECS com o parâmetro ECS_CONTAINER_STOP_TIMEOUT.
    Isso também pode ocorrer em uma situação Out-of-Memory (OOM – Falta de memória). Analise suas métricas do CloudWatch para verificar se o OOM ocorreu.
  • 139: ocorre mediante a presença de uma falha de segmentação. É provável que a aplicação tenha tentado acessar uma região de memória que não está disponível, ou que haja uma variável de ambiente inválida ou não definida.
  • 255: ocorre quando o comando ENTRYPOINT CMD em seu contêiner falhou devido a um erro. Analise o CloudWatch Logs para confirmar isso.

Mensagens comuns de erro

Nenhuma instância de contêiner foi encontrada no cluster

Analise a seção de instâncias de contêiner do cluster. Se necessário, você pode iniciar uma instância de contêiner.

InvalidParameterException

Certifique-se de que qualquer parâmetro definido em TaskDefinition esteja presente e de que o ARN esteja correto. Verifique se a função da tarefa e a função de execução de tarefa têm permissões suficientes.

Você atingiu o limite do número de tarefas que pode executar simultaneamente

Para mais informações sobre os limites, consulte as Cotas de serviço do ECS.

Para todas as outras solicitações de aumento de cota, crie um caso no console do AWS Support e escolha Aumento do limite de serviço.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos