Come posso ciclare automaticamente una nuova immagine in un gruppo di ridimensionamento automatico AWS?


21

Ho una configurazione dell'applicazione Web con un bilanciamento del carico e un gruppo di ridimensionamento automatico per gestire il ridimensionamento. Il codice sorgente è in un repository git, quindi non devo aggiornare le immagini quando il codice cambia, ma occasionalmente l'ambiente cambia, quindi creiamo una nuova immagine. Quindi quell'immagine deve essere ciclata nel gruppo di ridimensionamento automatico.

C'è un modo per scorrere automaticamente le immagini? In questo momento ho programmato un'azione di ingrandimento e ridimensionamento che elimina le vecchie istanze.


2
È probabilmente più efficace se, dopo aver creato la nuova configurazione di avvio e aggiornato il gruppo di scalabilità automatica, si contrassegna ogni istanza come non integra (ad es. Utilizzando as-set-instance-health), in modo che la scalabilità automatica la sostituisca semplicemente con una nuova istanza.
cyberx86,

Risposte:


10

Vorrei suggerire "AWS-HA-Release" per fare questo - il modo in cui AWS-HA-Release funziona:

  1. Se l'attuale gruppo di scalabilità automatica e ELB riportano 5 istanze integre,
  2. AWS-HA-Release porta in produzione una nuova istanza e attende che l'ELB lo identifichi come integro (porta il numero totale di istanze integre a 6)
  3. Rimuove una vecchia istanza (totale fino a 5)
  4. Porta in servizio un'altra istanza (totale a 6)
  5. Rimuove una vecchia istanza (totale fino a 5)
  6. e così via fino a quando tutte le istanze non sono state sostituite

In questo caso, puoi spedire nuovo codice o nuove versioni AMI senza tempi di inattività e avere il vantaggio di istanze completamente nuove. Lo strumento AWS-HA-Release è disponibile su https://github.com/colinbjohnson/aws-missing-tools .


9

Il modo più semplice è aumentare il numero di istanze minime nel gruppo di scalabilità automatica (ASG) per raddoppiare il conteggio corrente, attendere l'avvio di tutte e quindi modificare il numero minimo di istanze fino a quello che era. ELB eliminerà le istanze meno recenti e lascerà le istanze più recenti con il codice. Per raggiungere tale politica di risoluzione, è necessario impostare " OldestInstance " affinché funzioni come previsto. La politica di terminazione predefinita può avere effetti collaterali indesiderati.

Puoi consultare i parametri e gli esempi della CLI di AWS qui: http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html


Saluti, questo è un metodo super conveniente e senza problemi.
Elad Nava,

1
Questo non sempre funzionerà, secondo i documenti AWS, anche quando si seleziona una politica di terminazione personalizzata l'ASG manterrà l'equilibrio dell'AZ prima di applicare la politica di terminazione. Quindi solo raddoppiare e dimezzare le dimensioni può lasciarti con un paio di vecchi esempi. Ciò è particolarmente probabile quando si utilizza un ASG con più tipi di istanza e opzioni di acquisto, poiché l'ASG manterrà bilanciato l'AZ e l'opzione di mercato (spot vs on demand) prima di applicare la politica "OldestInstance": docs.aws.amazon.com / autoscaling / ec2 / userguide /…
Shahad

6

il modo in cui gestisco questo scenario è utilizzare la funzione UpdatePolicy dell'oggetto AWS :: AutoScaling :: AutoScalingGroup nella formazione del cloud. quando lo stack di formazione del cloud viene aggiornato, gestirà il ciclo delle istanze.

alcuni riferimenti. 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


Grazie mille @graeme. Non avevo idea che Cloudformation offrisse questa funzionalità.
AJB,

Esattamente quello che stavo cercando. Distribuiamo i nostri stack tramite Jenkins poiché le modifiche tramite la console AWS sono bloccate.
Greg Biles,

3

Dai un'occhiata anche allo strumento Netflix Asgard che ora è open source. Non solo può impostare gruppi di ridimensionamento automatico, ma può anche eseguire rilasci di nuove immagini AMI per un gruppo di istanze.


Intendi "Netflix Asgard"

4
Netflix Asgard è ora deprecato, viene sostituito con Netflix Spinnaker
dlaidlaw

0

In realtà non c'è davvero un buon modo di farlo per essere onesti. Il modo migliore che ho trovato per farlo è mettere una versione nel nome ASG. Ogni volta che aggiorno l'AMI creo un nuovo ASG + Launch Config con la nuova versione in modo che non sia in conflitto con l'altro gruppo. Quindi concludo tutte le istanze nel vecchio gruppo.

Se è necessaria una distribuzione più tollerante ai guasti, consiglio di aggiungere un altro passo coinvolgendo anche la creazione di un nuovo bilanciamento del carico. Ciò consente di isolare entrambi gli ASG. Inoltre, consente di disporre di un'area "Staging" per testare le modifiche un'ultima volta prima dell'aggiornamento. Quindi, quando sei pronto per cambiare, aggiorni i record DNS e chiudi tutte le istanze nel vecchio gruppo.


0

Come ho pubblicato qui (domanda simile, solo con Terraform), non è integrato in ASG in alcun modo, tranne se si utilizza la cloudformation. Ho anche lottato con esso, quindi ho finito per scrivere un "rullo" che controlla più ASG, controlla il loro stato e gli aggiornamenti. Sempre felice di ricevere feedback. http://github.com/deitch/aws-asg-roller

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.