Usar o rebalanceamento de capacidade para lidar com interrupções de spot do Amazon EC2 - 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á.

Usar o rebalanceamento de capacidade para lidar com interrupções de spot do Amazon EC2

Você pode configurar o Amazon EC2 Auto Scaling para monitorar e responder automaticamente a alterações que afetam a disponibilidade de suas instâncias spot. O rebalanceamento de capacidade ajuda a manter a disponibilidade da workload aumentando proativamente sua frota com uma nova instância spot antes que uma instância em execução seja interrompida por Amazon EC2.

O objetivo do rebalanceamento de capacidade é continuar processando sua workload sem interrupção. Quando as instâncias spot apresentam risco elevado de interrupção, o Amazon EC2 Spot Service notifica o Amazon EC2 Auto Scaling com uma recomendação de rebalanceamento de instância do EC2.

Quando você habilita o rebalanceamento de capacidade do grupo do Auto Scaling, o Amazon EC2 Auto Scaling tenta substituir proativamente as instâncias spot do grupo que receberam uma recomendação de rebalanceamento. Você pode decidir rebalancear sua workload em instâncias spot novas ou existentes que não tenham risco elevado de interrupção. A workload pode continuar processando o trabalho enquanto o Amazon EC2 Auto Scaling inicia novas instâncias spot antes que instâncias existentes sejam interrompidas.

Quando você não usa o rebalanceamento de capacidade, o Amazon EC2 Auto Scaling não substitui as instâncias spot até que o serviço spot do Amazon EC2 interrompa as instâncias e sua verificação de integridade falhe. Antes de interromper uma instância, o Amazon EC2 sempre fornece uma recomendação de rebalanceamento de instância do EC2 e um aviso de interrupção de instância spot de dois minutos.

Visão geral

Para usar o rebalanceamento de capacidade com seu grupo do Auto Scaling, as etapas básicas são:

  1. Configure seu grupo do Auto Scaling para usar vários tipos de instância e zonas de disponibilidade. Dessa forma, o Amazon EC2 Auto Scaling pode analisar a capacidade disponível para instâncias spot em cada zona de disponibilidade. Para obter mais informações, consulte Grupos do Auto Scaling com vários tipos de instâncias e opções de compra.

  2. Adicione hooks do ciclo de vida conforme necessário para realizar um desligamento suave do seu aplicativo dentro das instâncias que recebem a notificação de rebalanceamento. Para obter mais informações, consulte Ganchos do ciclo de vida do Amazon EC2 Auto Scaling.

    A seguir estão alguns motivos pelos quais você pode usar um hook do ciclo de vida:

    • Para o encerramento suave de operadores do Amazon SQS

    • Para concluir o cancelamento do registro do sistema de nomes de domínio (DNS)

    • Para extrair logs do sistema ou do aplicativo e carregá-los no Amazon Simple Storage Service (Amazon S3)

  3. Desenvolva uma ação personalizada para o hook do ciclo de vida. Para invocar sua ação personalizada o mais rápido possível, você precisa saber quando uma instância está pronta para ser encerrada. Descubra isso detectando o estado do ciclo de vida da instância.

    • Para invocar uma ação fora da instância, escreva uma regra do EventBridge e automatize a ação a ser executada quando um padrão de evento corresponder à regra.

    • Para invocar uma ação dentro da instância, configure a instância para executar um script de desligamento e recuperar o estado do ciclo de vida por meio dos metadados da instância.

    É fundamental projetar a ação personalizada para ser concluída em menos de dois minutos. Isso garante que haja tempo suficiente para concluir as tarefas antes do encerramento da instância.

Depois de concluir essas etapas, será possível começar a usar o rebalanceamento de capacidade.

Comportamento de rebalanceamento de capacidade

Com o rebalanceamento de capacidade, o Amazon EC2 Auto Scaling se comporta da seguinte maneira quando uma instância recebe uma recomendação de rebalanceamento:

  • Quando a nova instância spot é iniciada, o Amazon EC2 Auto Scaling aguarda até que a nova instância passe na verificação de integridade antes de encerrar a instância anterior. Ao substituir mais de uma instância, o término de cada instância anterior é iniciado depois que a nova instância foi iniciada e aprovada na verificação de integridade.

  • Como o Amazon EC2 Auto Scaling tenta iniciar novas instâncias antes de terminar as anteriores, estar na capacidade máxima especificada ou próximo a ela pode impedir ou parar completamente as atividades de rebalanceamento. Para evitar esse problema, o Amazon EC2 Auto Scaling pode exceder temporariamente o tamanho máximo do grupo em até 10% da capacidade desejada.

  • Se você não adicionou um hook do ciclo de vida ao grupo do Auto Scaling, o Amazon EC2 Auto Scaling começará a encerrar as instâncias anteriores assim que as novas instâncias passarem na verificação de integridade.

  • Se você adicionou um hook do ciclo de vida, isso aumenta o tempo necessário até começarmos a encerrar as instâncias anteriores pelo valor de tempo limite especificado para o hook do ciclo de vida.

  • Se você estiver usando políticas de escalabilidade ou escalabilidade agendada, as atividades de escalabilidade serão executadas em paralelo. Se uma ação de escalabilidade estiver em andamento e seu grupo do Auto Scaling estiver abaixo da nova capacidade desejada, o Amazon EC2 Auto Scaling aumentará a escala na horizontal antes de terminar as instâncias anteriores.

Se não houver capacidade para seus tipos de instância em uma zona de disponibilidade, o Amazon EC2 Auto Scaling continuará tentando executar instâncias spot em outras zonas de disponibilidade habilitadas até que ela seja bem-sucedida.

Na pior das hipóteses, se as novas instâncias falharem na inicialização ou se suas verificações de integridade falharem, o Amazon EC2 Auto Scaling continuará tentando reiniciá-las. Enquanto ele tenta iniciar novas instâncias, as anteriores serão eventualmente interrompidas e encerradas à força com um aviso de interrupção de dois minutos.

Considerações

Considere o seguinte ao usar o reequilíbrio de capacidade:

Projete seu aplicativo para ser tolerante a interrupções pontuais

Seu aplicativo deve ser capaz de lidar com alterações dinâmicas no número de instâncias e com a possibilidade de uma instância spot ser interrompida antecipadamente. Por exemplo, se o seu grupo do Auto Scaling estiver atrás de um balanceador de carga do Elastic Load Balancing, o Amazon EC2 Auto Scaling aguardará o cancelamento do registro da instância no balanceador de carga antes de chamar o hook do ciclo de vida. Se o tempo para cancelar o registro da instância e concluir a ação do ciclo de vida demorar muito, a instância poderá ser interrompida enquanto o Amazon EC2 Auto Scaling aguarda a conclusão da ação do ciclo de vida antes de encerrar a instância.

Nem sempre é possível para o Amazon EC2 enviar o sinal de recomendação de rebalanceamento antes do aviso de interrupção da instância spot de dois minutos. Às vezes, o sinal de recomendação de reequilíbrio chega ao mesmo tempo que o aviso de interrupção de dois minutos. Quando isso acontece, o Amazon EC2 Auto Scaling chama o hook do ciclo de vida e tenta executar uma nova instância spot imediatamente.

Evitar um risco elevado de interrupção das instâncias spot substitutas

Suas instâncias spot de substituição poderão correr um risco elevado de interrupção se você usar a estratégia de alocaçãolowest-price. Isso ocorre porque lançamos instâncias no pool de menor preço que tem capacidade disponível naquele momento, mesmo que suas instâncias spot substitutas possam ser interrompidas logo após serem lançadas. Para evitar um alto risco de interrupção, recomendamos fortemente que não use a estratégia de alocaçãolowest-price. Em vez disso, recomendamos a estratégia de alocaçãoprice-capacity-optimized. Essa estratégia executa instâncias spot de substituição em grupos spot com menor probabilidade de interrupção e com o preço mais baixo possível. Portanto, é menos provável que sejam interrompidos em um futuro próximo.

O Amazon EC2 Auto Scaling só lançará uma nova instância se a disponibilidade for igual ou melhor

Um dos objetivos do rebalanceamento de capacidade é melhorar a disponibilidade de uma instância spot. Se uma instância spot existente receber uma recomendação de rebalanceamento, o Amazon EC2 Auto Scaling só iniciará uma nova instância se a nova instância fornecer a mesma ou melhor disponibilidade do que a instância existente. Se o risco de interrupção de uma nova instância for pior do que a instância existente, o Amazon EC2 Auto Scaling não iniciará uma nova instância. No entanto, o Amazon EC2 Auto Scaling continuará avaliando os pools de capacidade Spot com base nas informações fornecidas pelo serviço Amazon EC2 Spot e iniciará uma nova instância se a disponibilidade melhorar.

Há uma chance de que sua instância existente seja interrompida sem que o Amazon EC2 Auto Scaling inicie proativamente uma nova instância. Quando isso acontece, o Amazon EC2 Auto Scaling tenta executar uma nova instância assim que recebe o aviso de interrupção da instância spot. Isso acontece independentemente de a nova instância ter um alto risco de interrupção.

O Rebalanceamento da capacidade não aumenta a taxa de interrupção de instâncias Spot

Quando o Rebalanceamento da capacidade é habilitado, ele não aumenta a Taxa de interrupção de instâncias Spot (o número de instâncias Spot que são recuperadas quando o Amazon EC2 precisa novamente de capacidade). Porém, se o Rebalanceamento da capacidade detectar que uma instância está sob risco de interrupção, o Amazon EC2 Auto Scaling tentará iniciar imediatamente uma nova instância. Portanto, mais instâncias poderão ser substituídas do que se você esperasse que o Amazon EC2 Auto Scaling iniciasse uma nova instância após a interrupção da instância em risco.

Embora você possa substituir mais instâncias com o Rebalanceamento de capacidade habilitado, você se beneficia por ser proativo em vez de reativo. Isso lhe dá mais tempo para agir antes que suas instâncias sejam interrompidas. Com um Aviso de interrupção de instâncias Spot, normalmente você só tem até dois minutos para encerrar sua instância sem problemas. Com o Rebalanceamento da capacidade iniciando uma nova instância com antecedência, os processos existentes têm maiores chances de serem concluídos na instância em risco. Além disso, você pode iniciar os procedimentos de desligamento da instância, impedir que novos trabalhos sejam agendados na instância em risco e preparar a instância recém-executada para assumir o controle do aplicativo. Com a substituição proativa no reequilíbrio de capacidade, você se beneficia de uma continuidade tranquila.

O exemplo teórico a seguir demonstra os riscos e benefícios do uso do Rebalanceamento de Capacidade:

  • 14h – Uma recomendação de rebalanceamento é recebida para a instância A. O Amazon EC2 Auto Scaling tenta imediatamente iniciar a instância de substituição B, dando a você tempo para iniciar seus procedimentos de encerramento.

  • 14h30 – Uma recomendação de rebalanceamento é recebida para a instância B, que é substituída pela instância C. Isso lhe dá tempo para iniciar seus procedimentos de desligamento.

  • 14h32 – Se o reequilíbrio de capacidade não estiver ativado e se um aviso de interrupção da instância spot tiver sido recebido às 14h32, para a instância A, você terá apenas dois minutos para agir. Porém, a instância A teria continuado em execução até esse momento.

Habilitar o rebalanceamento de capacidade (console)

Você pode habilitar ou desabilitar o rebalanceamento de capacidade quando cria ou atualiza um grupo do Auto Scaling.

Para habilitar o rebalanceamento de capacidade para um novo grupo do Auto Scaling
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/ e escolha grupos do Auto Scaling no painel de navegação.

  2. Selecione Criar grupo do Auto Scaling.

  3. Para Etapa 1: escolher modelo de execução ou configuração, insira um nome para o grupo do Auto Scaling, escolha um modelo de execução e escolha Próximo para prosseguir para a próxima etapa.

  4. Para a Etapa 2: escolha as opções de execução da instância, em Requisitos do tipo de instância, escolha as configurações para criar um grupo misto de instâncias. Isso inclui os tipos de instância que ele pode lançar, as opções de compra de instâncias e as estratégias de alocação para instâncias sob demanda e spot. Por padrão, essas configurações não estão definidas. Para configurá-las, é necessário selecionar Override launch template (Substituir modelo de execução). Para obter mais informações sobre como criar um grupo de instâncias mistas, consulte Grupos do Auto Scaling com vários tipos de instâncias e opções de compra.

  5. Em Rede, escolha as opções desejadas. Verifique se as sub-redes que você deseja utilizar se encontram em diferentes zonas de disponibilidade.

  6. Na seção Estratégias de alocação, escolha uma estratégia de alocação spot. Ative ou desative o Rebalanceamento de capacidade marcando ou desmarcando a caixa de seleção em Rebalanceamento de capacidade. Você só vê essa opção quando solicita que uma porcentagem do grupo do Auto Scaling seja iniciada como instâncias spot na seção Opções de compra de instância.

  7. Crie o grupo do Auto Scaling.

  8. (Opcional) Adicione hooks do ciclo de vida conforme necessário. Para obter mais informações, consulte Adicionar ganchos do ciclo de vida.

Para ativar ou desativar o reequilíbrio de capacidade para um grupo existente do Auto Scaling
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/ e escolha grupos do Auto Scaling no painel de navegação.

  2. Marque a caixa de seleção ao lado do seu grupo do Auto Scaling. Um painel dividido é aberto na parte inferior da página.

  3. Na guia Details (Detalhes), escolha Allocation strategies (Estratégias de alocação), Edit (Editar).

  4. Na seção Estratégias de alocação, ative ou desative o rebalanceamento de capacidade marcando ou desmarcando a caixa de seleção em Rebalanceamento de capacidade.

  5. Escolha Atualizar.

Habilitar o rebalanceamento de capacidade (AWS CLI)

Os exemplos a seguir mostram como usar a AWS CLI para habilitar e desabilitar o rebalanceamento de Capacidade.

Use o comando create-auto-scaling-group ou update-auto-scaling-group com o seguinte parâmetro:

  • --capacity-rebalance / --no-capacity-rebalance: valor booleano que indica se o rebalanceamento de capacidade está habilitado.

Antes de chamar o comando create-auto-scaling-group, você precisará do nome de um modelo de execução configurado para uso com um grupo do Auto Scaling. Para obter mais informações, consulte Criar um modelo de execução para um grupo do Auto Scaling.

nota

Os procedimentos a seguir mostram como usar um arquivo de configuração formatado em JSON ou YAML. Se você usar a AWS CLI versão 1, será necessário especificar um arquivo de configuração formatado em JSON. Se você usar a AWS CLI versão 2, poderá especificar um arquivo de configuração formatado em YAML ou JSON.

Para criar e configurar um novo grupo do Auto Scaling
  • Use o comando create-auto-scaling-group a seguir para criar um novo grupo do Auto Scaling e ativar o rebalanceamento de capacidade. Este comando faz referência a um arquivo JSON como único parâmetro para seu grupo de Auto Scaling.

    aws autoscaling create-auto-scaling-group --cli-input-json file://~/config.json

    Se você ainda não possui um arquivo de configuração da CLI que especifique uma política de instâncias mistas, crie um.

    Adicione a entrada a seguir ao objeto JSON de nível superior no arquivo de configuração.

    { "CapacityRebalance": true }

    Veja a seguir um exemplo de arquivo config.json.

    { "AutoScalingGroupName": "my-asg", "DesiredCapacity": 12, "MinSize": 12, "MaxSize": 15, "CapacityRebalance": true, "MixedInstancesPolicy": { "InstancesDistribution": { "OnDemandBaseCapacity": 0, "OnDemandPercentageAboveBaseCapacity": 25, "SpotAllocationStrategy": "price-capacity-optimized" }, "LaunchTemplate": { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "$Default" }, "Overrides": [ { "InstanceType": "c5.large" }, { "InstanceType": "c5a.large" }, { "InstanceType": "m5.large" }, { "InstanceType": "m5a.large" }, { "InstanceType": "c4.large" }, { "InstanceType": "m4.large" }, { "InstanceType": "c3.large" }, { "InstanceType": "m3.large" } ] } }, "TargetGroupARNs": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/943f017f100becff", "VPCZoneIdentifier": "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" }
Para criar e configurar um novo grupo do Auto Scaling
  • Use o comando create-auto-scaling-group a seguir para criar um novo grupo do Auto Scaling e ativar o rebalanceamento de capacidade. Este comando faz referência a um arquivo YAML como único parâmetro para seu grupo do Auto Scaling.

    aws autoscaling create-auto-scaling-group --cli-input-yaml file://~/config.yaml

    Adicione a linha a seguir ao arquivo de configuração formatado em YAML.

    CapacityRebalance: true

    Veja a seguir um exemplo de arquivo config.yaml.

    --- AutoScalingGroupName: my-asg DesiredCapacity: 12 MinSize: 12 MaxSize: 15 CapacityRebalance: true MixedInstancesPolicy: InstancesDistribution: OnDemandBaseCapacity: 0 OnDemandPercentageAboveBaseCapacity: 25 SpotAllocationStrategy: price-capacity-optimized LaunchTemplate: LaunchTemplateSpecification: LaunchTemplateName: my-launch-template Version: $Default Overrides: - InstanceType: c5.large - InstanceType: c5a.large - InstanceType: m5.large - InstanceType: m5a.large - InstanceType: c4.large - InstanceType: m4.large - InstanceType: c3.large - InstanceType: m3.large TargetGroupARNs: - arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-alb-target-group/943f017f100becff VPCZoneIdentifier: subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782
Para habilitar o rebalanceamento de capacidade para um grupo do Auto Scaling existente
  • Use o comando update-auto-scaling-group a seguir para habilitar o rebalanceamento de capacidade.

    aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \ --capacity-rebalance
Para verificar se o rebalanceamento de capacidade está habilitado para um grupo do Auto Scaling
  • Use o comando describe-auto-scaling-groups a seguir para verificar se o rebalanceamento de capacidade está habilitado e para visualizar os detalhes.

    aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

    Esta é uma resposta de exemplo.

    { "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", ... "CapacityRebalance": true } ] }
Para desabilitar o rebalanceamento de capacidade

Use o comando update-auto-scaling-group com a opção --no-capacity-rebalance para desabilitar o rebalanceamento de capacidade.

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg \ --no-capacity-rebalance

Para obter mais informações sobre o rebalanceamento de capacidade, consulte Gerenciar proativamente o ciclo de vida da instância spot usando o novo recurso de rebalanceamento de capacidade para EC2 Auto Scaling no AWS Compute Blog.

Para obter mais informações sobre as recomendações de rebalanceamento de instâncias do EC2, consulte Recomendações de rebalanceamento de instâncias do EC2 no Guia do usuário do Amazon EC2 para instâncias do Linux.

Para saber mais sobre hooks do ciclo de vida, consulte os recursos a seguir.

Limitações

  • O Amazon EC2 Auto Scaling poderá substituir a instância que recebe a notificação de rebalanceamento somente se a instância não estiver protegida contra redução vertical. No entanto, a proteção escalável não impede o encerramento de uma interrupção Spot. Para obter mais informações, consulte Usar proteção de redução na escala na horizontal de instâncias.

  • O suporte para reequilíbrio de capacidade está disponível em todas as áreas comerciais Regiões da AWS onde o Amazon EC2 Auto Scaling está disponível, exceto na região do Oriente Médio (Emirados Árabes Unidos).