Crie seus aplicativos no Amazon EC2 Auto Scaling para lidar com o encerramento de instâncias sem problemas - Amazon EC2 Auto Scaling

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Crie seus aplicativos no Amazon EC2 Auto Scaling para lidar com o encerramento de instâncias sem problemas

Este tópico aborda as diferentes abordagens que você pode adotar se tiver aplicativos em execução em instâncias que, idealmente, não deveriam ser encerradas inesperadamente quando o Amazon EC2 Auto Scaling responde a um evento de redução horizontal da escala.

Por exemplo, suponha que você tenha uma fila do Amazon SQS que coleta mensagens recebidas para trabalhos de longa execução. Quando uma nova mensagem chega, uma instância no grupo do Auto Scaling recupera a mensagem e começa a processá-la. Cada mensagem leva 3 horas para ser processada. Conforme o número de mensagens aumenta, novas instâncias são adicionadas automaticamente ao grupo do Auto Scaling. À medida que o número de mensagens diminui, as instâncias existentes são automaticamente encerradas. Nesse caso, o Amazon EC2 Auto Scaling deve decidir qual instância encerrar. Por padrão, é possível que o Amazon EC2 Auto Scaling encerre uma instância com 2,9 horas de processamento de um trabalho de 3 horas, em vez de uma instância que está ociosa no momento. Para evitar problemas com encerramentos inesperados ao usar o Amazon EC2 Auto Scaling, você deve criar seu aplicativo para responder a esse cenário.

Você pode usar os seguintes atributos para evitar que seu grupo do Auto Scaling encerre instâncias que ainda não estão prontas para serem encerradas ou encerre instâncias muito rapidamente para que concluam os trabalhos atribuídos. Todos esses três atributos podem ser usados em combinação ou separadamente.

Importante

Ao criar seus aplicativos no Amazon EC2 Auto Scaling para lidar com o encerramento de instâncias sem problemas, lembre-se desses pontos.

  • Se uma instância não estiver íntegra, o Amazon EC2 Auto Scaling a substituirá independentemente do atributo que você usar (a menos que você suspenda o processo ReplaceUnhealthy). Você pode usar um hook do ciclo de vida para permitir que o aplicativo seja desligado normalmente ou copie quaisquer dados que você precise recuperar antes que a instância seja encerrada.

  • Não é garantido que um hook do ciclo de vida de encerramento seja executado ou concluído antes que uma instância seja encerrada. Se algo falhar, o Amazon EC2 Auto Scaling ainda encerra a instância.

Proteção de redução horizontal de escala de instâncias

Você pode usar a proteção de redução horizontal de escala de instâncias em muitas situações em que o encerramento de instâncias é uma ação crítica que deve ser negada por padrão e permitida apenas explicitamente para instâncias específicas. Por exemplo, ao executar workloads em contêineres, é comum querer proteger todas as instâncias e remover a proteção somente para instâncias sem tarefas atuais ou agendadas. Serviços como o Amazon ECS criaram integrações com proteção de redução horizontal de escala de instâncias em seus produtos.

Você pode habilitar a proteção de redução horizontal de escala no grupo do Auto Scaling para aplicar a proteção de redução horizontal de escala às instâncias quando elas são criadas e habilitá-la para instâncias existentes. Quando uma instância não tem mais trabalho a fazer, ela pode desativar a proteção. A instância pode continuar pesquisando novos trabalhos e reativar a proteção quando houver novos trabalhos atribuídos.

Os aplicativos podem definir a proteção a partir de um ambiente de gerenciamento centralizado que gerencia se uma instância pode ser encerrada ou não, ou das próprias instâncias. No entanto, uma grande frota pode enfrentar problemas de controle de utilização se um grande número de instâncias estiver alternando continuamente sua proteção de redução horizontal de escala.

Para ter mais informações, consulte Usar proteção de redução na escala na horizontal de instâncias.

Política de encerramento personalizada

Assim como a proteção contra redução redução horizontal de escala de instâncias, uma política de encerramento personalizada ajuda a impedir que seu grupo do Auto Scaling encerre instâncias específicas.

Por padrão, o grupo do Auto Scaling usa uma política de encerramento padrão para determinar quais instâncias ele encerra primeiro. Se você quiser ter mais controle sobre quais instâncias serão encerradas primeiro, você pode implementar sua própria política de encerramento personalizada usando uma função do Lambda. O Amazon EC2 Auto Scaling chama a função sempre que precisa decidir qual instância deve ser encerrada. Isso encerrará apenas uma instância retornada pela função. Se a função errar, atingir o tempo limite ou produzir uma lista vazia, o Amazon EC2 Auto Scaling não encerrará as instâncias.

Uma política de encerramento personalizada é útil se souber quando uma instância é suficientemente redundante ou subutilizada para que possa ser encerrada. Para oferecer suporte a isso, você precisa implementar seu aplicativo com um ambiente de gerenciamento que monitore o workload em todo o grupo. Dessa forma, se uma instância ainda estiver processando trabalhos, a função do Lambda sabe que não deve incluí-la.

Para ter mais informações, consulte Criar uma política de término personalizada com o Lambda.

hook do ciclo de vida de encerramento

Um hook do ciclo de vida de encerramento prolonga a vida útil de uma instância que já foi selecionada para encerramento. Ele fornece tempo extra para concluir todas as mensagens ou solicitações atualmente atribuídas à instância, ou para salvar o avanço e transferir o trabalho para outra instância.

Para muitos workloads, um hook do ciclo de vida pode ser suficiente para encerrar normalmente um aplicativo em uma instância selecionada para encerramento. Esta é a melhor abordagem e não pode ser usada para evitar o encerramento em caso de falha.

Para usar um hook do ciclo de vida, você precisa saber quando uma instância foi selecionada para ser encerrada. Você tem duas maneiras de saber isso:

Opção Descrição Melhor usado para Link para a documentação
No interior da instância O serviço de metadados de instância (IMDS) é um endpoint seguro que você pode pesquisar o status de uma instância diretamente da instância. Se os metadados voltarem com,Terminated sua instância está programada para ser encerrada. Aplicativos em que você deve realizar uma ação na instância antes que ela seja encerrada. Recuperar o estado de destino do ciclo de vida
Fora da instância Quando uma instância é encerrada, uma notificação de evento é gerada. Você pode criar regras usando Amazon EventBridge, Amazon SQS ou Amazon SNS para capturar esses eventos e invocar uma resposta, como com uma função Lambda. Aplicativos que precisam agir fora da instância. Configurar um destino de notificação

Para usar um hook do ciclo de vida, você também precisa saber quando sua instância está pronta para ser totalmente encerrada. O Amazon EC2 Auto Scaling não instruirá o Amazon EC2 a encerrar a instância até receber CompleteLifecycleuma chamada de ação ou o tempo limite expirar, o que ocorrer primeiro.

Por padrão, uma instância pode continuar em execução por uma hora (tempo limite de pulsação) devido a um hook do ciclo de vida de encerramento. Você pode configurar o tempo limite padrão se uma hora não for suficiente para concluir a ação do ciclo de vida. Quando uma ação do ciclo de vida está realmente em andamento, você pode estender o tempo limite com RecordLifecycleActionHeartbeatchamadas de API.

Para ter mais informações, consulte Ganchos do ciclo de vida do Amazon EC2 Auto Scaling.