Como posso alternar automaticamente uma nova imagem em um AWS Auto Scaling Group?

21

Eu tenho uma configuração de aplicativo Web com um balanceador de carga e um grupo de dimensionamento automático para gerenciar o dimensionamento. O código-fonte está em um repositório git, então não preciso atualizar as imagens quando o código for alterado, mas ocasionalmente o ambiente muda, para criarmos uma nova imagem. Em seguida, essa imagem precisa ser alternada para o grupo de dimensionamento automático.

Existe uma maneira de alternar as imagens automaticamente? No momento, planejo uma ação de aumento e redução que se livra das instâncias antigas.

plataformas
fonte
2
Provavelmente é mais eficiente se, depois de criar sua nova configuração de inicialização e atualizar seu grupo de dimensionamento automático, você marcar cada instância como não as-set-instance-healthíntegra (por exemplo, usando ), para que o dimensionamento automático simplesmente o substitua por uma nova instância.
cyberx86

Respostas:

10

Gostaria de sugerir "AWS-HA-Release" para fazer isso - da maneira que o AWS-HA-Release funciona:

  1. Se o atual grupo de dimensionamento automático e o ELB reportarem 5 instâncias íntegras,
  2. O AWS-HA-Release coloca uma nova instância em produção e aguarda que o ELB a identifique como íntegra (traga o número total de instâncias íntegras para 6)
  3. Remove uma instância antiga (total até 5)
  4. Coloca outra instância em serviço (total de 6)
  5. Remove uma instância antiga (total até 5)
  6. e assim por diante até que todas as instâncias tenham sido substituídas

Nesse caso, você pode enviar um novo código ou novas versões da AMI sem tempo de inatividade e se beneficiar de instâncias totalmente novas. A ferramenta AWS-HA-Release está disponível em https://github.com/colinbjohnson/aws-missing-tools .

Colin Johnson
fonte
9

A maneira mais fácil é aumentar o número de instâncias mínimas no ASG (Auto-Scaling Group) para dobrar sua contagem atual, aguardar quando todas elas forem iniciadas e depois alterar esse número mínimo de instâncias para o que era. O ELB matará instâncias mais antigas e deixará instâncias mais novas com código. Para alcançar essa política de rescisão, deve ser definido como ' OldestInstance ' para funcionar como pretendido. A política de encerramento padrão pode ter efeitos colaterais indesejados.

Você pode consultar os parâmetros e exemplos da AWS CLI aqui: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html

Sergey Kuznetsov
fonte
Saúde, este é um método super conveniente e sem complicações.
Elad Nava
11
Isso nem sempre funciona, de acordo com os documentos da AWS, mesmo ao selecionar uma política de finalização personalizada, o ASG manterá o AZ equilibrado antes de aplicar a política de finalização. Portanto, apenas dobrar e reduzir pela metade o tamanho pode deixar você com algumas instâncias antigas. Isso é especialmente provável ao usar um ASG com vários tipos de instância e opções de compra, pois o ASG manterá equilibrado o AZ e a opção de mercado (spot vs on demand) antes de aplicar a política 'OldestInstance': docs.aws.amazon.com / autoscaling / ec2 / userguide /…
Shahad em 09/04
6

A maneira como gerencio esse cenário é usar o recurso UpdatePolicy do objeto AWS :: AutoScaling :: AutoScalingGroup na formação da nuvem. Quando a pilha de formação de nuvens é atualizada, ele gerencia o ciclo das instâncias.

algumas referências. http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-updatepolicy .html

graeme
fonte
Graças a tonelada @graeme. Eu não tinha idéia do Cloudformation oferecer essa funcionalidade.
AJB
Exatamente o que eu estava procurando. Implantamos nossas pilhas via Jenkins à medida que as alterações no console da AWS são bloqueadas.
Greg Biles
3

Veja também a ferramenta Netflix Asgard , que agora é de código aberto. Além de configurar grupos de dimensionamento automático, também pode executar lançamentos contínuos de novas imagens da AMI para um grupo de instâncias.

plataformas
fonte
Você quer dizer "Netflix Asgard"
4
Netflix Asgard agora está obsoleta e substituída pelo Netflix Spinnaker
dlaidlaw
0

Na verdade, não há uma maneira realmente boa de fazê-lo para ser honesto. A melhor maneira de encontrar isso é colocar uma versão no nome ASG. Sempre que atualizo a AMI, crio um novo ASG + Launch Config com a nova versão, para que não entre em conflito com o outro grupo. Então, encerro todas as instâncias no grupo antigo.

Se uma implantação mais tolerante a falhas for necessária, recomendo adicionar outra etapa, envolvendo a criação de um novo loadbalancer. Isso permite que você tenha ambos ASG isolados um do outro. Também permite que você tenha uma área "Preparo" para testar suas alterações uma última vez antes de atualizar. Quando estiver pronto para alternar, atualize os registros DNS e encerre todas as instâncias no grupo antigo.

bwight
fonte
0

Como eu postei aqui (pergunta semelhante, apenas com o Terraform), ele não é incorporado ao ASG de forma alguma, exceto se você usar a formação de nuvens. Eu lutei com isso também, então acabei escrevendo um "rolo" que assiste a vários ASG, verifica seu estado e atualizações. Sempre feliz em receber feedback. http://github.com/deitch/aws-asg-roller

deitch
fonte