Projete seus aplicativos para lidar com o encerramento de instâncias com elegância - 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á.

Projete seus aplicativos para lidar com o encerramento de instâncias com elegância

Este tópico aborda os recursos que você pode usar para evitar que seu grupo de Auto Scaling encerre instâncias que ainda não estão prontas para serem encerradas ou encerre instâncias muito rapidamente para que concluam as tarefas atribuídas. Você pode usar esses três recursos em combinação ou separadamente para projetar seus aplicativos para lidar com o encerramento de instâncias de maneira adequada.

Por exemplo, suponha que você tenha uma SQS fila da Amazon que coleta mensagens recebidas para trabalhos de longa duraçã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 projetar seu aplicativo para responder a esse cenário.

Importante

Ao projetar 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 recurso que você usar (a menos que você suspenda ReplaceUnhealthy o processo). Você pode usar um ganchos 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 gancho 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 encerrará 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 a Amazon ECS incorporaram integrações com proteção escalável 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 obter mais informações, consulte Use a proteção de escalabilidade da instância para controlar o encerramento da instância.

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 encerrar. 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 obter mais informações, consulte Criar uma política de término personalizada com o Lambda.

ganchos do ciclo de vida de encerramento

Um gancho 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 gancho 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 gancho 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 Instance Metadata Service (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 EventBridgeSQS, Amazon 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 gancho 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 pedirá EC2 à Amazon que encerre a instância até receber uma CompleteLifecycleActionchamada ou que o tempo limite termine, 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 gancho 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 chamadas. RecordLifecycleActionHeartbeatAPI

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