Como soluciono problemas de tarefas do Amazon ECS que demoram muito para serem interrompidas quando a instância de contêiner está definida como DRAINING?
Minha tarefa do Amazon Elastic Container Service (Amazon ECS) está demorando muito para passar para o estado STOPPED. Ou minha tarefa do Amazon ECS fica presa no estado RUNNING quando a instância de contêiner está definida como DRAINING. Como posso resolver esse problema?
Breve descrição
Quando você define uma instância do ECS como DRAINING, o Amazon ECS faz o seguinte:
- Impede que novas tarefas sejam agendadas para colocação na instância de contêiner
- Interrompe tarefas na instância de contêiner que estão no estado RUNNING
Suas tarefas podem ficar presas no estado RUNNING ou levar mais tempo para serem movidas para o estado STOPPED devido a problemas com parâmetros de configuração ou tarefas. Para solucionar esses problemas, considere as seguintes opções:
- Confirmar se seus parâmetros DeploymentConfiguration estão definidos corretamente
- Confirmar se o valor do atraso de cancelamento do registro está definido corretamente
- Confirmar se o valor ECS_CONTAINER_STOP_TIMEOUT está definido corretamente
- Procurar outros problemas relacionados à tarefa
Resolução
**Confirmar se seus parâmetros DeploymentConfiguration estão definidos corretamente **
- Abra o console do Amazon ECS.
- No painel de navegação, escolha Clusters e, em seguida, escolha o cluster em que sua instância de contêiner está sendo drenada.
- Escolha a guia Instâncias do ECS e, em seguida, escolha DRAINING na seção Status.
- Escolha sua instância de contêiner e, em seguida, descubra o serviço para as tarefas que estão sendo drenadas ou demorando muito para serem drenadas.
- Escolha a guia Serviços, selecione o serviço e, em seguida, escolha Implantações.
- Verifique os valores de minimumHealthyPercent e maximumPercent.
Observação: as tarefas de serviço na instância de contêiner que estão no estado RUNNING são interrompidas e substituídas de acordo com os parâmetros de configuração de implantação do serviço: minimumHealthyPercent e maximumPercent.
Confirmar se o valor do atraso de cancelamento do registro está definido corretamente
Importante: as etapas a seguir se aplicam somente aos serviços que usam o Application Load Balancer ou o Network Load Balancer. Se seu serviço estiver usando o Classic Load Balancer, verifique os valores de drenagem da conexão.
- Abra o console do Amazon ECS.
- No painel de navegação, escolha Clusters e, em seguida, escolha o cluster em que sua instância de contêiner está sendo drenada.
- Escolha a guia Serviços e selecione o serviço com a pilha presa em RUNNING.
- Escolha o Nome do grupo de destino.
- Na guia Detalhes, role para baixo e marque a caixa de seleção Atraso no cancelamento de registro.
Confirmar se o valor ECS_CONTAINER_STOP_TIMEOUT está definido corretamente
- Conecte-se à sua instância de contêiner usando SSH.
- Execute o comando docker inspect ecs-agent --format '{{json .Config.Env}}'.
- Verifique se há um valor para ECS_CONTAINER_STOP_TIMEOUT.
Observação: ECS_CONTAINER_STOP_TIMEOUT é um parâmetro do agente de contêiner do ECS que define a quantidade de tempo que o Amazon ECS espera antes de finalizar um contêiner. A duração do tempo começa a contar quando uma tarefa é interrompida. Se você não vê o parâmetro ECS_CONTAINER_STOP_TIMEOUT na saída depois de executar o comando na etapa 2, então o Amazon ECS está usando o valor padrão de 30s.
Procurar outros problemas relacionados à tarefa
- Conecte-se à sua instância de contêiner usando SSH.
- Verifique se o daemon do Docker e o agente de contêiner do Amazon ECS estão em execução nas AMIs do Amazon Linux 1 ou do Amazon Linux 2.
- Verifique os logs do aplicativo com base no driver de log definido pelo LogConfiguration.
Observação: por exemplo, se suas tarefas estiverem usando o driver de log awslogs, verifique se há problemas no Amazon CloudWatch Logs.
Conteúdo relevante
- AWS OFICIALAtualizada há 5 meses
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há um mês