Meu cluster Amazon Elastic Container Service (Amazon ECS) usa provedores de capacidade. Quero manter minhas instâncias do Amazon Elastic Compute Cloud (Amazon EC2) ativas em um grupo do Auto Scaling quando elas tiverem tarefas em execução.
Breve descrição
Se você usa um provedor de capacidade, deve definir suas configurações de cluster do Amazon ECS para não interromper as tarefas em execução quando a escala for reduzida verticalmente. Implemente proteção de instância na redução horizontal de escala no grupo do EC2 Auto Scaling e proteção gerenciada de escalabilidade nas configurações do provedor de capacidade do Amazon ECS. Essa configuração garante que o Amazon ECS retenha instâncias com tarefas em execução.
Ou configure o Amazon ECS para esgotar as tarefas normalmente quando você interrompe instâncias e proteja instâncias específicas de serem interrompidas prematuramente.
Sua configuração usa os seguintes componentes:
- Provedores de capacidade: Os provedores de capacidade usam grupos do Auto Scaling para provisionar dinamicamente instâncias do EC2.
- Drenagem de instâncias: Quando uma instância do EC2 em um grupo do Auto Scaling é marcada para encerramento, ela entra no status DRAINING e não aceita mais novas tarefas. As tarefas em execução devem ser concluídas ou movidas para outra instância.
- Ajuste de escala automático de clusters: O ajuste de escala automático de clusters usa provedores de capacidade para escalar automaticamente grupos do Auto Scaling com base nos requisitos da tarefa.
Resolução
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.
Certifique-se de que o Amazon ECS ou o grupo do Auto Scaling não encerrem prematuramente uma instância durante a redução horizontal da escala
Para usar a proteção gerenciada de encerramento no ajuste de escala automático de clusters, você deve ativar a proteção contra redução de instâncias no grupo do Auto Scaling. Essa ação garante que o grupo do Auto Scaling retenha instâncias com tarefas em execução.
Para ativar a proteção na redução de escala, execute o seguinte comando update-auto-scaling-group da AWS CLI:
aws autoscaling update-auto-scaling-group \
--auto-scaling-group-name my-asg \
--new-instances-protected-from-scale-in
Observação: substitua my-asg pelo nome do seu grupo do Auto Scaling.
Em seguida, execute o seguinte comando put-cluster-capacity-providers para ativar a proteção gerenciada de encerramento para garantir que o Amazon ECS retenha instâncias com tarefas em execução:
aws ecs put-cluster-capacity-providers \
--cluster my-cluster \
--capacity-providers my-capacity-provider \
--enable-managed-scaling \
--managed-termination-protection ENABLED
Observação: substitua my-cluster pelo nome do cluster e my-capacity-provider pelo nome do provedor de capacidade.
Configure o Amazon ECS para drenar facilmente as tarefas ao remover uma instância
É uma prática recomendada esgotar as tarefas normalmente ao removê-las de uma instância. Use a drenagem gerenciada de instâncias para permitir que o Amazon ECS reagende suas tarefas em outras instâncias antes do encerramento.
Para ativar a drenagem de instâncias gerenciadas, execute o seguinte comando update-capacity-provider:
aws ecs update-capacity-provider \
--name my-cp \
--auto-scaling-group-provider '{
"managedDraining": "ENABLED"
}
Observação: substitua my-cp pelo nome do seu provedor de capacidade.
O Amazon ECS move as tarefas da instância para outras instâncias conforme a capacidade permite. No entanto, o Amazon ECS permite no máximo 48 horas para drenar as instâncias. Se ainda houver tarefas na instância após esse período, o Amazon ECS encerrará a instância e interromperá as tarefas restantes.
Retenha uma tarefa crítica específica
Use a proteção de tarefas para garantir que as ações de escalabilidade ou implantação do Amazon ECS não interrompam tarefas críticas.
Importante: mesmo quando você ativa a proteção de tarefas, o Amazon ECS ainda pode encerrar a instância subjacente. A proteção de tarefas protege apenas as tarefas de serem interrompidas.
Para ativar a proteção de tarefas, execute o seguinte comando update-task-protection:
aws ecs update-task-protection \
--cluster my-cluster \
--tasks my-task-id \
--protection-enabled
Observação: substitua my-cluster pelo nome do cluster e my-task-id pelo ID da tarefa. Por padrão, a proteção dura 2 horas. Para alterar essa duração, use a opção --expires-in-minutes.
Para verificar o status da proteção de tarefas em seu cluster, execute o seguinte comando get-task-protection:
aws ecs get-task-protection \
--cluster my-cluster \
--tasks my-task-id
Observação: substitua my-cluster pelo nome do cluster e my-task-id pelo ID da tarefa.
Solucionar outros problemas
Se você ativar a proteção para seu grupo, provedor de capacidade e tarefas do Auto Scaling e ainda encontrar problemas, execute as seguintes ações:
Informações relacionadas
Proteja suas tarefas do Amazon ECS de serem encerradas por eventos na redução horizontal de escala
GetTaskProtection
UpdateTaskProtection
Exemplos de proteção de tarefas do Amazon Elastic Container Service (Amazon ECS) no site do GitHub