Wie kann ich ein neues Bild in einer AWS Auto Scaling-Gruppe automatisch wechseln?

21

Ich habe eine Webanwendung mit einem Load Balancer und einer automatischen Skalierungsgruppe eingerichtet, um die Skalierung zu verwalten. Der Quellcode befindet sich in einem Git-Repository, sodass ich die Bilder nicht aktualisieren muss, wenn sich der Code ändert, sondern gelegentlich die Umgebung ändert, sodass wir ein neues Bild erstellen. Dann muss das Bild in die automatische Skalierungsgruppe geschaltet werden.

Gibt es eine Möglichkeit, die Bilder automatisch zu wechseln? Im Moment plane ich eine Scale-Up- und Scale-Down-Aktion, die die alten Instanzen beseitigt.

Plattformen
quelle
2
Es ist wahrscheinlich effizienter, wenn Sie nach dem Erstellen Ihrer neuen Startkonfiguration und dem Aktualisieren Ihrer Autoscaling-Gruppe jede Instanz als fehlerhaft markieren (z. B. mit as-set-instance-health), sodass die Autoscaling-Funktion sie einfach durch eine neue Instanz ersetzt.
cyberx86

Antworten:

10

Ich möchte "AWS-HA-Release" vorschlagen, um dies zu tun - so funktioniert AWS-HA-Release:

  1. Wenn die aktuelle Autoscaling-Gruppe und der ELB 5 Instanzen melden, die fehlerfrei sind,
  2. AWS-HA-Release bringt eine neue Instanz in die Produktion und wartet, bis der ELB sie als fehlerfrei erkennt (bringen Sie die Gesamtzahl der fehlerfreien Instanzen auf 6).
  3. Entfernt eine alte Instanz (insgesamt bis zu 5)
  4. Bringt eine weitere Instanz in Dienst (insgesamt 6)
  5. Entfernt eine alte Instanz (insgesamt bis zu 5)
  6. und so weiter, bis alle Instanzen ersetzt wurden

In diesem Fall können Sie neuen Code oder neue AMI-Versionen ohne Ausfallzeit ausliefern und von völlig neuen Instanzen profitieren. Das AWS-HA-Release-Tool ist unter https://github.com/colinbjohnson/aws-missing-tools verfügbar .

Colin Johnson
quelle
9

Die einfachere Möglichkeit besteht darin, die Anzahl der minimalen Instanzen in der Auto-Scaling-Gruppe (ASG) auf das Doppelte der aktuellen Anzahl zu erhöhen, zu warten, bis alle gestartet wurden, und dann die minimale Anzahl von Instanzen auf den ursprünglichen Wert zu ändern. ELB beendet ältere Instanzen und hinterlässt neuere Instanzen mit Code. Um dies zu erreichen, sollte die Kündigungsrichtlinie auf " OldestInstance " gesetzt werden, damit sie wie beabsichtigt funktioniert. Die Standardkündigungsrichtlinie kann unerwünschte Nebenwirkungen haben.

Sie können die AWS CLI-Parameter und Beispiele hier einsehen : http://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html

Sergey Kuznetsov
quelle
Prost, das ist eine super bequeme, stressfreie Methode.
Elad Nava
1
Dies funktioniert gemäß den AWS-Dokumenten nicht immer, selbst wenn eine benutzerdefinierte Kündigungsrichtlinie ausgewählt wird. Die ASG hält die AZs vor dem Anwenden der Kündigungsrichtlinie in einem ausgewogenen Verhältnis. Wenn Sie also nur die Größe verdoppeln und halbieren, bleiben Ihnen ein paar alte Instanzen übrig. Dies ist besonders wahrscheinlich, wenn eine ASG mit mehreren Instanztypen und Kaufoptionen verwendet wird, da die ASG das Gleichgewicht zwischen der AZ und der Marktoption (Spot vs On Demand) beibehält, bevor die Richtlinie " OldestInstance
Shahad
6

In diesem Szenario verwalte ich die UpdatePolicy-Funktion des AWS :: AutoScaling :: AutoScalingGroup-Objekts in der Cloud-Formation. Wenn der Cloud Formation Stack aktualisiert wird, verwaltet er den Zyklus der Instanzen.

einige referenzen. 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
quelle
Vielen Dank an @graeme. Ich hatte keine Ahnung, dass Cloudformation diese Funktionalität anbietet.
AJB
Genau das, wonach ich gesucht habe. Wir stellen unsere Stacks über Jenkins bereit, wenn Änderungen über die AWS-Konsole gesperrt werden.
Greg Biles
3

Schauen Sie sich auch das Netflix Asgard- Tool an, das jetzt Open Source ist. Es kann nicht nur Auto Scaling Groups einrichten, sondern auch fortlaufende Releases neuer AMI-Images für eine Gruppe von Instanzen ausführen.

Plattformen
quelle
Du meinst "Netflix Asgard"
4
Netflix Asgard ist jetzt veraltet, es wird durch Netflix Spinnaker
dlaidlaw
0

Ehrlich gesagt gibt es keine wirklich gute Möglichkeit, dies zu tun. Am besten füge ich eine Version in den ASG-Namen ein. Jedes Mal, wenn ich die AMI aktualisiere, erstelle ich eine neue ASG + -Startkonfiguration mit der neuen Version, damit sie nicht mit der anderen Gruppe in Konflikt steht. Dann beende ich alle Instanzen in der alten Gruppe.

Wenn eine fehlertolerantere Bereitstellung erforderlich ist, empfehle ich, einen weiteren Schritt hinzuzufügen, indem auch ein neuer Loadbalancer erstellt wird. Auf diese Weise können Sie beide ASGs voneinander isolieren. Außerdem können Sie einen Bereich "Staging" einrichten, in dem Sie Ihre Änderungen ein letztes Mal testen können, bevor Sie sie aktualisieren. Wenn Sie dann zum Wechseln bereit sind, aktualisieren Sie die DNS-Einträge und beenden Sie alle Instanzen in der alten Gruppe.

bwight
quelle
0

Wie ich hier gepostet habe (ähnliche Frage, nur mit Terraform), ist es in keiner Weise in ASG integriert, außer wenn Sie Cloudformation verwenden. Ich kämpfte auch damit und schrieb einen "Roller", der mehrere ASGs überwacht, deren Status und Aktualisierungen überprüft. Freue mich immer über Feedback. http://github.com/deitch/aws-asg-roller

Gottheit
quelle