2015-08-20 3 views
7

Da AWS-Instanzen stundenweise abgerechnet werden, ist es nie sinnvoll, eine Instanz, die weniger als eine Stunde läuft, zu beenden, wenn Sie die Möglichkeit haben, sie erneut zu benötigen.Ist es mit AWS AutoScaling möglich, Instanzen niemals bis zu einer abrechenbaren Stundengrenze zu beenden?

Ich möchte eine Autoscaling-Situation vermeiden, in der ich eine Instanz hinzufüge, sie dann beende und dann innerhalb derselben Stunde eine weitere Instanz hinzufüge. Dies würde zu zwei abrechenbaren Stunden führen.

Ich habe meinen eigenen Autoscaling geschrieben, der jede Instanz, die weniger als 55 Minuten Laufzeit hat, überspringt und für schnelles Ändern von Lasten hat dies uns eine Menge Kosten gespart. Ich frage mich nur, ob AWS selbst die Fähigkeit hat.

+1

Soweit ich weiß, unterstützt das nicht. Am ehesten ist es wahrscheinlich, die Abschlussrichtlinie auf ** ClosestToNextInstanceHour ** zu setzen. Auf diese Weise, wenn Sie zwei Instanzen einen mit 5 Minuten vor der nächsten Stunde haben und die anderen 55, würde ersterer getötet werden. Referenz: [Anpassen der Terminierungsrichtlinie] (http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/AutoScalingBehavior.InstanceTermination.html#custom-termination-policy) –

+0

Weitere Informationen hier http://shlomoswidler.com /2011/02/play-chicken-with-spot-instances.html – Daniel777

Antwort

6

Auto Scaling kann nicht bis zum Ende einer Stunde warten, um eine Instanz zu beenden. Allerdings gibt es ein paar Optionen zu entdecken!

Wenn eine Skalierungsrichtlinie ausgelöst wird, die Auto Scaling zum Skalieren anweist (eine Amazon EC2-Instanz entfernen), wählt sie zuerst eine Availability Zone mit den meisten Instanzen aus und bestimmt dann, welche Instanz in dieser Availability Zone beendet werden soll. Diese Wahl wird von einem Termination Policy, hergestellt, die die Werte haben kann:

  • OldestInstance: Auto Scaling beendet die älteste Instanz in der Gruppe. Diese Option ist nützlich, wenn Sie die Instanzen in der Auto Scaling-Gruppe auf einen neuen EC2-Instance-Typ aktualisieren und schließlich Instanzen durch ältere Instanzen durch neuere Instanzen ersetzen möchten.
  • NewestInstance: Auto-Skalierung beendet die neueste Instanz in der Gruppe. Diese Richtlinie ist nützlich, wenn Sie eine neue Startkonfiguration testen, sie jedoch nicht in der Produktion beibehalten möchten.
  • OldestLaunchConfiguration: Auto Scaling beendet Instanzen mit der ältesten Startkonfiguration. Diese Richtlinie ist nützlich, wenn Sie eine Gruppe aktualisieren und die Instanzen aus einer vorherigen Konfiguration auslaufen lassen.
  • ClosestToNextInstanceHour: Auto Scaling beendet Instanzen, die der nächsten Abrechnungsstunde am nächsten sind. Diese Richtlinie hilft Ihnen, die Nutzung Ihrer Instanzen zu maximieren und Kosten zu verwalten.

Die letzte Option, ClosestToNextInstanceHour, fast ist es, was Sie suchen, dass es eine Instanz zu beenden, die eine stündliche Gebühr nächste verursachen. Es wird jedoch nicht bis zum Ende der Stunde "warten".

Eine Option besteht darin, eine eigene Anwendung zu schreiben, die festlegt, wann eine Instanz skaliert werden soll, bis die Instanz ihren vollen Wert angegeben hat. Die App könnte dann TerminateInstanceInAutoScalingGroup aufrufen, um die Instanz zu entfernen und zu beenden. Wenn eine Instanz als 'Back-End' verwendet wird (Web-Requests nicht direkt verarbeiten), wird eine Auto Scaling Lifecycle Hook verwendet, die ein Signal sendet, wenn eine Instanz aus einer Auto-Scaling-Gruppe, aber davor entfernt wird ist beendet. Dies wird normalerweise verwendet, um der Instanz die Möglichkeit zu geben, "Arbeit" zu beenden, z. B. das Kopieren von Protokolldateien und das Beenden einer Aufgabe. Wenn die Instanz zur Verarbeitung lang laufender Hintergrundaufgaben verwendet wird, kann der Lebenszyklus-Hook verwendet werden, um zu warten, bis die Arbeit beendet ist oder bis die Rechnungsstunde fast beendet ist, bevor die Instanz beendet werden kann.

All dies erfordert jedoch einige benutzerdefinierte Skripts. Die standardmäßige automatische Skalierungskonfiguration beendet eine Instanz sofort als Reaktion auf eine Skalierungsrichtlinie (sofern nicht Connection Draining in Kraft ist).

+1

Danke für die sehr detaillierte Antwort. Ich frage mich auch, ob ich eine benutzerdefinierte Cloudwatch-Metrik erstellen sollte, um Scale-In auszulösen. Diese benutzerdefinierte Metrik könnte nach dem Timing suchen und "keine Notwendigkeit zum Skalieren" zurückgeben, wenn die Instanz, die der nächsten Instanz am nächsten kommt, mehr als 5 bis 10 Minuten von der nächsten Stunde entfernt ist. –

+0

Amazon CloudWatch hat keine Sichtbarkeit der verbleibenden Zeit, bevor eine Instanz in Rechnung gestellt wird. Sie müssten diese Informationen an CloudWatch weitergeben, was keinen Vorteil gegenüber der automatischen Skalierung hat. Sie könnten ** immer eine Skalierungsrichtlinie ** zur gewünschten Zeit ausführen, die die automatische Skalierung zum Skalieren anweist, aber es hat keine Kontrolle darüber, welche * Instanz beendet wird. –

Verwandte Themen