Lógica de controle de utilização de serviço
O programador de serviço do Amazon ECS inclui uma lógica que controla a frequência com que as tarefas de serviço são iniciadas caso apresentem falhas repetidas na inicialização.
Se as tarefas de um serviço do ECS falharem repetidamente ao tentar entrar no estado RUNNING
(mudando diretamente do estado PENDING
para STOPPED
), o tempo entre as tentativas de reinicialização subsequentes aumentará de maneira incremental até chegar a no máximo 15 minutos. Esse período máximo está sujeito a alterações no futuro. Esse comportamento reduz o efeito que as tarefas que não podem ser iniciadas têm sobre os custos dos recursos de cluster do Amazon ECS ou da infraestrutura do Fargate. Se o seu serviço iniciar a lógica de controle de utilização, você receberá a seguinte mensagem de evento do serviço:
(service
service-name
) is unable to consistently start tasks successfully.
O Amazon ECS nunca impede a nova tentativa de um serviço com falha. Ele também não tenta modificá-lo de nenhuma outra forma que não seja aumentando o tempo entre reinicializações. A lógica de controle de serviço não fornece parâmetros ajustáveis pelo usuário.
Se você atualizar o serviço para usar uma nova definição de tarefa, ele retornará imediatamente ao estado normal, não controlado. Para mais informações, consulte Atualizar um serviço.
Veja a seguir algumas causas comuns que acionam essa lógica.
-
A falta de recursos com os quais hospedar sua tarefa, como portas, memória ou unidades de CPU no seu cluster. Nesse caso, também é possível ver a mensagem de evento do serviço sobre recursos insuficientes.
-
O agente de contêiner do Amazon ECS não consegue extrair a imagem do Docker da tarefa. Isso pode ser devido a problemas com a imagem, etiqueta ou nome da imagem de contêiner ou à falta de autenticação ou de permissões de registro privado. Nesse caso, você também verá um
CannotPullContainerError
entre os erros da tarefa interrompida. -
Não há espaço em disco suficiente em sua instância de contêiner para criar o contêiner. Nesse caso, você também verá um
CannotCreateContainerError
entre os erros da tarefa interrompida. Para mais informações, consulte CannotCreateContainerError: API error (500): devmapper.
Tarefas que são interrompidas depois que alcançam o estado RUNNING
não iniciam a lógica de controle de utilização ou a mensagem de evento do serviço associada. Por exemplo, suponha que a falha nas verificações de integridade do Elastic Load Balancing para um serviço faça com que uma tarefa seja sinalizada como não íntegra e que o Amazon ECS cancele o registro dessa tarefa e a interrompa. Nesse ponto, as tarefas não têm controle de utilização. Mesmo que um comando de contêiner da tarefa seja encerrado imediatamente com um código de saída diferente de zero, o estado da tarefa já terá sido mudado para RUNNING
. Tarefas que falham imediatamente porque erros de comando não causam o controle de utilização ou a mensagem de evento de serviço.