Como fazer o AWS ASG não fazer nada quando a contagem de instâncias estiver entre min e max

1

Estamos usando o Terraform para iniciar os ASGs na maioria das instâncias do AWS EC2. O problema é que, de vez em quando, queremos fazer algum trabalho extra antes de encerrar uma instância; por exemplo: descomissionando um nó de um cluster antes que a instância do EC2 em que ele está sendo executado seja finalizada. Se fôssemos apenas para reduzir min == max (nosso padrão), então uma instância é encerrada e não podemos executar uma desativação normal.

Em vez disso, o que tentei é reduzir min para o novo valor desejado (exemplo: 6) e manter o max no valor antigo (exemplo: 10), o que acontece nesse caso é que% co_de O valor% permanece em 10 (o desired ) e o término da instância do EC2 faz com que um novo seja lançado pelo ASG. NOTA: não estamos definindo a configuração Terraform max .

Se eu definir desired_capacity manualmente, eu corro o risco de que o ASG termine um nó que não tenha sido descomissionado normalmente, então não acho que seja uma opção para mim.

O ideal é que o ASG não faça nada quando a contagem atual da Instância do EC2 para esse ASG estiver entre desired_capacity e min e deixe-me terminar manualmente as instâncias. Obviamente, se a contagem ficar abaixo de max , ainda gostaria que o ASG lançasse uma nova Instância do EC2.

Existe alguma maneira de conseguir isso?

    
por c4urself 07.02.2017 / 17:57

2 respostas

3

Soluções supostas:

Opção 1 : o seu ASG deve ser criado com a proteção de instância ON - Terraform docs

Nesse caso, poderíamos ter a próxima seqüência de operações, por exemplo, decommission:

  1. Executar a desativação de instância (s) específica (remover dados dela (eles))
  2. Reduzir contagem do tamanho do ASG por valor desejável
  3. Aplicar estado de Terraform
  4. Remover sinalizador de proteção de instâncias desativadas: aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --no-protected-from-scale-in

Opção 2 : seu ASG foi não criado com proteção de instância.

Nesse caso, poderíamos ter a próxima seqüência de operações, por exemplo, decommission:

  1. Adicionar sinalizador de proteção em todas as instâncias do ASG: aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling-group-name <asg_name> --protected-from-scale-in
  2. Executar a desativação de instância (s) específica (remover dados dela (eles))
  3. Reduzir contagem do tamanho do ASG por valor desejável
  4. Aplicar estado de Terraform
  5. Remover sinalizador de proteção de instâncias desativadas: aws autoscaling set-instance-protection --instance-ids <instances_ids> --auto-scaling- group-name <asg_name> --no-protected-from-scale-in
  6. (Opcionalmente) Aguarde até que o ASG encolha até o tamanho desejado e remova o sinalizador de proteção de outras instâncias
por 13.02.2017 / 17:28
3

Existem duas maneiras possíveis de alcançar o que você deseja:

Opção 1: suspender os processos do Auto Scaling

Você pode colocar o processamento do grupo do Auto Scaling "em espera" enquanto faz seus ajustes.

Por exemplo, você pode tentar:

  1. Pausar o processamento do escalonamento automático: aws autoscaling suspend-processes --auto-scaling-group-name MyGroup
  2. Desative e encerre suas instâncias do EC2,
  3. Ajuste a contagem desejada manualmente,
  4. Retomar o processamento do Auto Scaling: aws autoscaling resume-processes --auto-scaling-group-name MyGroup

link

Opção 2: use ganchos do ciclo de vida do Auto Scaling

Usando Ganchos do Ciclo de Vida, suas instâncias do EC2 iniciadas e / ou finalizadas têm a oportunidade de fazer um processamento inicial ou pré-terminação. Por exemplo, você pode fazer com que o gancho notifique a instância de terminação de que está prestes a ser terminada e pode se descomissionar a partir do seu cluster.

link

    
por 07.02.2017 / 18:19