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 selecionarReplace
para ativar a proteção na redução da escala ao chamarStartInstanceRefresh
se 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 AWS CloudFormation: é possível adicionar um atributo
UpdatePolicy
à pilha do AWS 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.