Após uma discussão com a equipe de suporte, verifica-se que o ECS não suporta nosso caso de uso atual.
Existe uma solução alternativa que resolve um dos problemas que enfrentamos. Essa solução alternativa é criar um contêiner de verificação de integridade essencial e separado e na mesma tarefa do ECS que o contêiner de aplicativo real. A finalidade do contêiner de verificação de integridade é monitorar o contêiner do aplicativo para determinar quando o aplicativo foi iniciado completamente. Se detectar que o aplicativo falhou ao iniciar, ele sai, fazendo com que o serviço do ECS faça o ciclo da tarefa. O ELB é configurado para executar suas verificações de integridade no contêiner de verificação de integridade, que sempre informará que está ativo por meio da porta relevante. Essa solução alternativa impedirá que o serviço do ECS efetue o ciclo da tarefa do ECS devido a falhas nas verificações de integridade.
No entanto, o ELB começará a rotear o tráfego para o contêiner do aplicativo imediatamente. Ele fará isso, mesmo que o contêiner do aplicativo ainda não esteja pronto para receber tráfego (por exemplo, porque ainda está aguardando o carregamento de um cache). Atualmente, não há como atrasar o envio de tráfego do ELB para o contêiner do aplicativo, pois o serviço do ECS não oferece suporte a um período de carência. Conseguimos solucionar esse problema enviando mensagens para nossos contêineres de aplicativos por meio do SQS e apenas fazendo com que eles saiam da fila quando seus caches estão totalmente carregados. No entanto, temos casos de uso futuros (como a exibição de solicitações da Web) quando essa não for uma opção viável. Para este fim, pretendo levantar uma solicitação de recurso para o período de carência.
Como um aparte, tanto o Kubernetes ( link ) e Marathon ( link ) já suportam esta opção para verificação de saúde, se alguém ler isto for feliz por não usar um serviço gerenciado.