Interrupção de workloads do Amazon ECS em execução em instâncias do EC2 com segurança
A drenagem gerenciada de instância facilita a interrupção normal de instâncias do Amazon EC2. Isso permite que as workloads sejam interrompidas com segurança e reprogramadas para instâncias sem interrupção. A manutenção e as atualizações da infraestrutura são realizadas sem se preocupar com a interrupção das workloads. Ao usar a drenagem gerenciada de instâncias, você simplifica os fluxos de trabalho de gerenciamento da infraestrutura que exigem a substituição das instâncias do Amazon EC2 e, ao mesmo tempo, garante a resiliência e a disponibilidade das aplicações.
A drenagem gerenciada de instâncias do Amazon ECS funciona com substituições de instâncias do grupo do Auto Scaling. Com base na atualização da instância e na vida útil máxima dela, os clientes podem garantir a conformidade com os requisitos mais recentes de sistema operacional e segurança da capacidade.
A drenagem gerenciada de instâncias pode ser usada somente com provedores de capacidade do Amazon ECS. É possível ativar a drenagem gerenciada de instâncias ao criar ou ao atualizar provedores de capacidade de grupo do Auto Scaling usando o console do Amazon ECS, a AWS CLI ou o SDK.
Os eventos a seguir são cobertos pela drenagem gerenciada de instâncias do Amazon ECS.
-
Atualização de instâncias do grupo do Auto Scaling: use a atualização de instâncias para realizar a substituição contínua das instâncias do Amazon EC2 no grupo do Auto Scaling em vez de fazer isso manualmente em lotes. Isso é útil quando você precisa substituir um grande número de instâncias. Uma atualização de instâncias é iniciada por meio do console do Amazon EC2 ou da API
StartInstanceRefresh. Certifique-se de selecionarReplacepara ativar a proteção na redução da escala ao chamarStartInstanceRefreshse estiver usando a proteção de encerramento gerenciada. -
Vida útil máxima da instância: você pode definir uma vida útil máxima quando se trata de substituir instâncias do grupo do Auto Scaling. Isso é útil para programar instâncias de substituição com base em políticas internas de segurança ou conformidade.
-
Redução horizontal de escala no grupo do Auto Scaling: com base em políticas de ajuste de escala e ações de ajuste de escala programadas, o grupo do Auto Scaling oferece suporte ao ajuste de escala automático de instâncias. Ao usar um grupo do Auto Scaling como provedor de capacidade do Amazon ECS, é possível reduzir a escala horizontalmente para instâncias de grupos do Auto Scaling quando nenhuma tarefa estiver em execução nessas instâncias.
-
Verificações de integridade no grupo do Auto Scaling: o grupo do Auto Scaling oferece suporte a várias verificações de integridade para gerenciar o encerramento de instâncias não íntegras.
-
Atualizações da pilha do CloudFormation: é possível adicionar um atributo
UpdatePolicyà pilha do CloudFormation para executar atualizações cumulativas quando o grupo sofre alterações. -
Rebalanceamento de capacidade do spot: o grupo do Auto Scaling tenta substituir, de forma proativa, as instâncias spot que apresentam maior risco de interrupção com base no aviso de rebalanceamento de capacidade do Amazon EC2. O grupo do Auto Scaling encerra a instância antiga quando a substituição é executada e está íntegra. A drenagem gerenciada de instâncias do Amazon ECS drena a instância spot da mesma forma que drena uma instância não spot.
-
Interrupção de spot: as instâncias spot são encerradas com um aviso prévio de dois minutos. A drenagem de instâncias gerenciada pelo Amazon ECS coloca a instância em estado de drenagem em resposta.
Ganchos do ciclo de vida do Amazon EC2 Auto Scaling com drenagem gerenciada de instâncias
Os ganchos do ciclo de vida do grupo do Auto Scaling permitem ao cliente criar soluções que são acionadas por determinados eventos no ciclo de vida da instância e executar uma ação personalizada quando esse evento ocorre. Um grupo do Auto Scaling permite até 50 hooks. Diversos ganchos de encerramento podem existir e serem executados em paralelo, e o grupo do Auto Scaling aguardará a conclusão de todos os hooks antes de encerrar uma instância.
Além do encerramento de hook gerenciado pelo Amazon ECS, você pode configurar seus próprios hooks de encerramento do ciclo de vida. Os hooks do ciclo de vida têm uma default action, e recomendamos definir continue como o padrão para garantir que outros hooks, como o hook gerenciado pelo Amazon ECS, não sejam afetados por erros de hooks personalizados.
Se você já configurou um hook do ciclo de vida de encerramento para um grupo do Auto Scaling e também habilitou a drenagem gerenciada de instâncias do Amazon ECS, ambos os hooks do ciclo de vida serão executados. No entanto, não há garantia para os horários relativos. Os ganchos do ciclo de vida têm uma configuração default action para especificar a ação a ser executada quando o tempo limite expirar. Em caso de falhas, recomendamos usar continue como resultado padrão no hook personalizado. Isso garante que outros hooks, principalmente os que são gerenciados pelo Amazon ECS, não sejam afetados por erros presentes no hook de ciclo de vida personalizado. O resultado alternativo de abandon faz com que todos os outros hooks sejam ignorados e deve ser evitado. Para obter mais informações sobre os ganchos do ciclo de vida para o grupo do Auto Scaling, consulte Amazon EC2 Auto Scaling lifecycle hooks no Guia do usuário do Amazon EC2 Auto Scaling.
Tarefas e drenagem gerenciada de instâncias
A drenagem gerenciada de instâncias do Amazon ECS usa o recurso de drenagem existente encontrado nas instâncias de contêineres. O recurso de drenagem de instância de contêiner realiza a substituição e interrupção das tarefas de réplica que pertencem a um serviço do Amazon ECS. Uma tarefa independente, como uma invocada por RunTask, que está no estado PENDING ou RUNNING, permanecerá inalterada. Você terá que esperar que as tarefas sejam concluídas ou interrompê-las de forma manual. A instância de contêiner permanece no estado DRAINING até que todas as tarefas sejam interrompidas ou até que 48 horas tenham se passado. As tarefas do daemon são as últimas a serem interrompidas depois que todas as tarefas de réplica são interrompidas.
Drenagem gerenciada de instâncias e proteção gerenciada de encerramento
A drenagem gerenciada de instâncias funciona mesmo se o encerramento gerenciado estiver desabilitado. Para obter informações sobre a proteção contra o encerramento gerenciado, consulte Controle das instâncias encerradas pelo Amazon ECS.
A tabela a seguir resume o comportamento de diferentes combinações de encerramento e drenagem gerenciados.
| Encerramento gerenciado | Drenagem gerenciada | Outcome |
|---|---|---|
|
Habilitado |
Habilitado | O Amazon ECS protege as instâncias do Amazon EC2 que estão executando tarefas de serem encerradas por eventos de redução horizontal de escala. Todas as instâncias que estão sendo encerradas, como aquelas que não têm proteção de encerramento definida, receberam interrupção spot ou são forçadas pela atualização da instância, são drenadas normalmente. |
|
Desabilitado |
Habilitado | O Amazon ECS não oferece proteção para as instâncias do Amazon EC2 que executam tarefas contra a redução da escala horizontalmente. No entanto, todas as instâncias que estão sendo encerradas são drenadas normalmente. |
|
Habilitado |
Desabilitado | O Amazon ECS protege as instâncias do Amazon EC2 que estão executando tarefas de serem encerradas por eventos de redução horizontal de escala. No entanto, as instâncias ainda podem ser encerradas por interrupção spot ou atualização forçada da instância, ou se não estiverem executando nenhuma tarefa. O Amazon ECS não realiza uma drenagem normal dessas instâncias e executa tarefas de serviço de substituição depois que elas são interrompidas. |
|
Desabilitado |
Desabilitado | As instâncias do Amazon EC2 podem reduzir a escala horizontalmente ou ser encerradas a qualquer momento, mesmo que estejam executando tarefas do Amazon ECS. O Amazon ECS executará tarefas de serviço de substituição depois que elas forem encerradas. |
Drenagem gerenciada de instâncias e drenagem de instância spot
Com a drenagem de instância spot, é possível definir uma variável de ambiente ECS_ENABLE_SPOT_INSTANCE_DRAINING no agente do Amazon ECS que habilita que o Amazon ECS atribua uma instância no status de drenagem em resposta à interrupção de spot de dois minutos. A drenagem gerenciada de instâncias do Amazon ECS facilita o desligamento normal de instâncias do Amazon EC2 que estão sendo encerradas por vários motivos, não apenas por interrupções spot. Por exemplo, é possível usar o rebalanceamento de capacidade do Amazon EC2 Auto Scaling para substituir, de forma proativa, a instância spot com risco elevado de interrupção, e a drenagem da instância gerenciada executa o encerramento tranquilo da instância spot que está sendo substituída. Ao usar a drenagem gerenciada de instâncias, não é necessário habilitar a drenagem de instâncias spot separadamente. Portanto, usar ECS_ENABLE_SPOT_INSTANCE_DRAINING nos dados do usuário do grupo do Auto Scaling é redundante. Para obter mais informações sobre a drenagem de instância spot, consulte Instâncias spot.
Como funciona a drenagem gerenciada de instâncias com o EventBridge
Os eventos de drenagem gerenciada de instâncias do Amazon ECS são publicados no Amazon EventBridge, e o Amazon ECS cria uma regra gerenciada do EventBridge no barramento padrão da sua conta para oferecer suporte à drenagem gerenciada de instâncias. Você pode filtrar esses eventos para outros serviços da AWS, como o Lambda, o Amazon SNS e o Amazon SQS para monitorar e solucionar problemas.
-
O Amazon EC2 Auto Scaling envia um evento para o EventBridge quando um hook de ciclo de vida é invocado.
-
Avisos de interrupção spot são publicados no EventBridge.
-
O Amazon ECS gera mensagens de erro que você pode recuperar por meio do console e das APIs do Amazon ECS.
-
O EventBridge tem mecanismos de repetição incorporados como mitigações para falhas temporárias.
Solução de problemas de esgotamento de instância gerenciada do Amazon ECS
Talvez seja necessário solucionar problemas relacionados com a drenagem gerenciada de instâncias. A seguir, apresentamos um exemplo de problema que você pode encontrar ao utilizá-la e sua resolução.
As instâncias não são encerradas após o tempo de vida máximo da instância ser excedido ao usar o ajuste de escala automático.
Se as instâncias não forem encerradas mesmo depois de atingir e exceder o tempo de vida máximo da instância ao usar um grupo do Auto Scaling, pode ser porque elas estão protegidas contra a redução da escala horizontalmente. É possível desativar o encerramento gerenciado e permitir a drenagem gerenciada para lidar com a reciclagem de instâncias.
Comportamento da drenagem de instâncias gerenciadas do Amazon ECS.
As instâncias gerenciadas do Amazon ECS implementam processos sofisticados de drenagem e encerramento que garantem transições perfeitas de workload, ao mesmo tempo em que otimizam custos e mantêm a integridade do sistema. O sistema de encerramento fornece três caminhos de decisão distintos para encerramento de instâncias, cada um com diferentes características de tempo e perfis de impacto no cliente.
Caminhos de decisão de encerramento
Todos os caminhos de encerramento convergem no mesmo mecanismo de execução por meio do gancho do ciclo de vida POST_DEREGISTER que aciona a API ReleaseNode do Node Manager para o encerramento imediato da instância do Amazon EC2.
- Encerramento iniciado pelo cliente
-
Fornece controle direto sobre a remoção de instâncias quando você precisa remover imediatamente as instâncias de contêiner do serviço. Você invoca a API DeregisterContainerInstance com o sinalizador forçar definido como verdadeiro, indicando que o encerramento imediato é necessário, apesar de qualquer workload em execução.
- Encerramento por inatividade iniciado pelo sistema
-
Implementa a otimização de custos por meio da detecção inteligente de inatividade que identifica instâncias que não atendem mais às workloads. O Elastic Workload Service (EWS) implementa algoritmos sofisticados de detecção de inatividade que monitoram a utilização da instância e iniciam o encerramento de instâncias que permanecem inativas por períodos configuráveis.
- Encerramento da atualização da infraestrutura
-
Implementa o gerenciamento proativo da infraestrutura por meio da política de decaimento natural do Node Manager, em que as instâncias são atualizadas periodicamente para garantir que sejam executadas nas versões mais recentes da plataforma e mantenham a postura de segurança. O Node Manager implementa políticas de tempo de vida útil (TTL) que iniciam o encerramento normal de instâncias que atingiram sua vida útil operacional máxima.
Drenagem e migração de workload sem problemas
O perfeito sistema de drenagem implementa uma coordenação sofisticada com o gerenciamento de serviços do Amazon ECS para garantir que as tarefas gerenciadas por serviço sejam migradas adequadamente das instâncias programadas para encerramento.
Coordenação de drenagem de tarefas de serviço
Quando uma instância passa para o estado DRAINING, o programador do Amazon ECS interrompe automaticamente o posicionamento de novas tarefas na instância enquanto implementa procedimentos de desligamento adequados para as tarefas de serviço existentes. A drenagem das tarefas de serviço inclui a coordenação com as estratégias de implantação do serviço, os requisitos de verificação de integridade e as preferências de drenagem para garantir o tempo ideal de migração e as taxas de sucesso.
Manipulação de tarefas autônomas
As tarefas autônomas exigem um tratamento diferente porque não se beneficiam do gerenciamento automático de serviços. O sistema avalia as características das tarefas autônomas, incluindo estimativas de duração da tarefa, análise de probabilidade de conclusão e avaliação do impacto no cliente. A estratégia de conclusão normal permite que tarefas autônomas sejam concluídas naturalmente durante um período de carência prolongado, enquanto o encerramento forçado garante que a atualização da infraestrutura ocorra dentro de prazos aceitáveis quando as tarefas não são concluídas naturalmente.
Estratégia de conclusão em duas fases
O sistema de encerramento implementa uma abordagem de duas fases que equilibra a continuidade da workload com os requisitos de gerenciamento da infraestrutura.
Fase 1: período de conclusão sem dificuldades
Durante essa fase, o sistema implementa estratégias de drenagem normal que priorizam a continuidade da workload. As tarefas de serviço são drenadas sem dificuldades por meio dos processos normais de agendamento do Amazon ECS, as tarefas autônomas continuam em execução e podem ser concluídas naturalmente, e o sistema monitora se todas as tarefas atingem o estado parado por meio de processos de conclusão natural.
Fase 2: cumprimento de prazos rigorosos
Quando a conclusão normal não atinge os objetivos de encerramento dentro de prazos aceitáveis, o sistema implementa a aplicação de prazos rigorosos. O prazo rigoroso normalmente é definido como o tempo de início da drenagem mais sete dias, proporcionando um tempo substancial para uma conclusão perfeita e ainda mantendo os requisitos operacionais. A imposição inclui a invocação automática de procedimentos forçados de cancelamento de registro e o encerramento imediato de todas as tarefas restantes, independentemente do status de conclusão.
Coordenação entre serviços e gerenciamento de estado
O processo de encerramento exige uma coordenação sofisticada entre o Cluster Management Backend Service (CMBS) e o Node Manager para garantir que o cancelamento do registro da instância de contêiner e a limpeza de recursos do Amazon EC2 ocorram na sequência correta, mantendo a consistência.
Execução do gancho POST_DEREGISTER
O gancho do ciclo de vida POST_DEREGISTER representa o ponto de convergência em que os três caminhos de decisão de encerramento executam a mesma lógica de limpeza. Quando uma instância de contêiner atinge o estado DEREGISTERED, o gancho POST_DEREGISTER aciona automaticamente a API ReleaseNode do Node Manager para iniciar as operações de limpeza de recursos do Amazon EC2. A implementação do gancho inclui tratamento sofisticado de erros para vários cenários de falha, incluindo problemas de conectividade de rede, problemas de disponibilidade de serviços do Amazon EC2 e falhas de coordenação entre componentes do sistema.
Limpeza e desalocação de recursos do Amazon EC2
O processo de encerramento de instâncias do Amazon EC2 implementa uma coordenação abrangente com os serviços da AWS para garantir que os recursos computacionais subjacentes sejam desalocados corretamente. Isso inclui limpeza da interface de rede para evitar vazamentos de recursos, gerenciamento de registros de banco de dados com trilhas de auditoria abrangentes e mecanismos adequados de tratamento e recuperação de erros para vários cenários de falha.