Ir para o conteúdo

Como configuro o desligamento normal e a drenagem da conexão para tarefas do Amazon ECS durante as implantações?

4 minuto de leitura
0

Quando eu implanto um novo serviço no meu cluster do Amazon Elastic Container Service (Amazon ECS), as tarefas são implantadas ou encerradas incorretamente.

Resolução

Verifique se você está usando um contêiner com capacidade de recursos suficiente

Se novas implantações falharem consistentemente nas verificações de integridade do balanceador de carga, verifique as métricas CpuUtilized, CpuReserved e MemoryUtilized do Amazon ECS Container Insights Metrics. Se você usa um Application Load Balancer, verifique também TargetResponseTime.

Além disso, configure a propriedade HealthCheckGracePeriodSeconds com um valor maior que o tempo de inicialização da aplicação. Respostas atrasadas da verificação de integridade podem causar falhas e fazer com que o Amazon ECS execute um ciclo de tarefas.

Verifique o status do contêiner e os códigos de saída

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Para tarefas que são encerradas inesperadamente, execute o seguinte comando describe-tasks para verificar os códigos de saída do contêiner:

aws ecs describe-tasks  --cluster ECS_CLUSTER  --tasks TASK_ARN -- region REGION

Observação: Substitua ECS_CLUSTER pelo nome do seu cluster, TASK_ARN pelo ARN da tarefa e REGION pela sua região da AWS.

Se a saída do comando anterior for 0, a tarefa foi iniciada com êxito. Se a saída for 1, então houve um erro na aplicação e você deve verificar os logs da sua aplicação. Se a saída for 137, o contêiner recebeu um sinal SIGKILL, normalmente causado por um problema memória insuficiente. Para resolver esse problema, consulte Como soluciono erros de OutOfMemory no Amazon ECS? e Por que minha tarefa do Amazon ECS foi interrompida?

Revise a configuração da definição da tarefa

Certifique-se de que todas as configurações da definição de tarefa sejam válidas, especialmente depois de modificar ou criar novas definições de tarefa. Para verificar suas configurações da definição de tarefa, execute uma tarefa autônoma.

Configure seu balanceador de carga

Configure deregistration_delay.timeout_seconds no balanceador de carga para atender às suas necessidades. Para solicitações de longa duração, use um valor maior. Para instâncias spot do Amazon Elastic Compute Cloud (Amazon EC2), esse valor deve ser inferior a 120 segundos.

Para modificar deregistration_delay.timeout_seconds, execute o seguinte comando modify-target-group-attributes:

aws elbv2 modify-target-group-attributes --target-group-arn
EXAMPLE_ARN --attributes Key=deregistration_delay.timeout_seconds,Value=120

Observação: Substitua EXAMPLE_ARN pelo ARN do seu balanceador de carga e 120 pelo tempo limite de atraso de cancelamento de registro em segundos.

Além disso, otimize os parâmetros de verificação de integridade do balanceador de carga. Se os parâmetros forem muito rígidos para sua aplicação, o balanceador de carga pode frequentemente marcar o destino como não íntegro.

Configure o horário normal de desligamento da sua aplicação

Por padrão, ECS_CONTAINER_STOP_TIMEOUT é definido como 30 segundos. Quando você acessa sua aplicação durante a fase de drenagem de tarefas anteriores em uma nova implantação do Amazon ECS, pode receber um erro 5xx. Se você encontrar problemas ao acessar sua aplicação, aumente o valor de ECS_CONTAINER_STOP_TIMEOUT com base nas application's graceful shutdown needs (necessidades de desligamento normal da sua aplicação). É uma prática recomendada testar o valor atualizado em um ambiente de teste antes de implantá-lo.

Para atualizar o valor, adicione um código semelhante ao exemplo a seguir à sua definição de tarefa:

{
  "containerDefinitions": [
    {
      "name": "your-container",
      "image": "your-image",
      "stopTimeout": 120
    }
  ]
}

Observação: Substitua 120 pelo seu valor de ECS_CONTAINER_STOP_TIMEOUT.

Para configure graceful shutdown (configurar o desligamento normal), adicione um manipulador SIGTERM em sua aplicação. Para um spot do AWS Fargate, defina a configuração para chamar DeregisterTargets durante o manipulador SIGTERM. Isso garante que o Amazon ECS cancele o registro das tarefas FARGATE_SPOT do grupo-alvo do balanceador de carga.

Informações relacionadas

Otimização de parâmetros de drenagem da conexão do balanceador de carga para o Amazon ECS

AWS OFICIALAtualizada há 2 anos