Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Gestalten Sie Ihre Anwendungen so, dass sie die Instance-Kündigung ordnungsgemäß handhaben
In diesem Thema werden Funktionen beschrieben, mit denen Sie verhindern können, dass Ihre Amazon EC2 Auto Scaling Scaling-Gruppe Amazon EC2 EC2-Instances beendet, die noch nicht zum Beenden bereit sind. Standardmäßig hat Auto Scaling keinen Einblick in die Anwendungen, die auf Ihren Instances ausgeführt werden. Es kann Instances beenden, bevor Ihre Anwendung ordnungsgemäß heruntergefahren oder die zugewiesenen Jobs abgeschlossen werden kann. Diese Funktionen geben Ihrer Anwendung Zeit, um laufende Arbeiten abzuschließen, den Status zu übertragen oder eine Bereinigung durchzuführen, bevor die Instance beendet wird. Sie können sie je nach den Anforderungen Ihrer Anwendung einzeln oder in Kombination verwenden.
Diese Funktionen sind besonders nützlich für statusbehaftete Workloads, bei denen jede Instance in Ihrer Flotte andere Daten, Jobs oder Status enthält als andere Instances. Das Beenden von Stateful-Instances ohne ordnungsgemäßes Herunterfahren könnte dazu führen, dass Jobs mit langer Laufzeit von vorne neu gestartet werden, die Datenredundanz oder der Datenverlust reduziert und laufende Transaktionen oder Berechnungen unterbrochen werden. Um eine statusbehaftete Instance ordnungsgemäß herunterzufahren, sollte ihre Arbeitslast entweder entladen (Abschluss aller aktuell zugewiesenen Jobs) oder übertragen (Jobs, Daten oder Konfiguration auf eine andere aktive Instance verschieben).
Inhalt
Beendigungs-Lebenszyklus-Hooks
Ein Termination-Lifecycle-Hook verlängert die Lebensdauer Ihrer Amazon EC2 EC2-Instance, die bereits für die Kündigung ausgewählt wurde. Er bietet zusätzliche Zeit, um laufende Arbeiten abzuschließen, die derzeit der Instance zugewiesen sind, oder um den Fortschritt zu speichern und die Arbeit auf eine andere Instance zu übertragen.
Bei vielen Workloads kann ein Terminierungs-Lifecycle-Hook ausreichen, um eine Anwendung auf einer Instance, die für die Kündigung ausgewählt wurde, ordnungsgemäß herunterzufahren. Dies ist ein Best-Effort-Ansatz und kann nicht verwendet werden, um eine Kündigung zu verhindern, wenn eine Aktion im Lebenszyklus einer Kündigung abgebrochen wird. Wenn Ihr Workload eine geringe Toleranz gegenüber Ausfällen bei Aktionen zur Kündigung des Lebenszyklus aufweist, konfigurieren Sie Richtlinien für den Instanzlebenszyklus in Kombination mit Ihren Terminierungs-Lifecycle-Hooks, um Instances beizubehalten.
Um einen Termination-Lifecycle-Hook verwenden zu können, müssen Sie wissen, wann eine Instance für die Kündigung ausgewählt wurde. Sie haben zwei Möglichkeiten, dies herauszufinden:
| Option | Description | Am besten verwendet für | Link zur Dokumentation |
|---|---|---|---|
| Innerhalb der Instance | Der Instance Metadata Service (IMDS) ist ein sicherer Endpunkt, bei dem Sie direkt von der Instance aus den Status einer Instance abfragen können. Wenn die Metadaten mit Terminated zurückgegeben werden, ist die Beendigung Ihrer Instance geplant. |
Anwendungen, bei denen Sie eine Aktion auf der Instance ausführen müssen, bevor die Instance beendet wird. | Rufen Sie den Ziellebenszyklusstatus ab |
| Außerhalb der Instance | Wenn eine Instance beendet wird, wird eine Ereignisbenachrichtigung generiert. Sie können Regeln mithilfe von Amazon EventBridge, Amazon SQS, Amazon SNS oder AWS Lambda zur Erfassung dieser Ereignisse erstellen und eine Antwort aufrufen, z. B. mit einer Lambda-Funktion. | Anwendungen, die außerhalb der Instance Aktionen durchführen müssen. | Konfigurieren Sie ein Benachrichtigungsziel |
Um einen Lebenszyklus-Hook verwenden zu können, müssen Sie auch wissen, wann eine Instance für die vollständige Beendigung bereit ist. Amazon EC2 Auto Scaling beendet die Instance erst, wenn sie einen CompleteLifecycleActionAPI-Aufruf erhält oder das Timeout abgelaufen ist, je nachdem, was zuerst eintritt.
Standardmäßig kann eine Instance aufgrund eines Beendigungs-Lebenszyklus-Hook eine Stunde lang weiterlaufen (Heartbeat-Timeout). Sie können den standardmäßigen Timeout konfigurieren, falls eine Stunde nicht ausreicht, um die Lebenszyklus-Aktion abzuschließen. Wenn eine Lebenszyklusaktion ausgeführt wird, können Sie das Timeout mit API-Aufrufen verlängern. RecordLifecycleActionHeartbeat
Weitere Informationen finden Sie unter Lebenszyklus-Hooks bei Amazon EC2 Auto Scaling.
Instance-Abskalierungsschutz
Mit dem Instance Scale-In Protection können Sie kontrollieren, welche Instances bei Scale-In-Ereignissen für die Kündigung ausgewählt werden. Insbesondere können Sie verhindern, dass eine Instance, die aktiv einen Job mit langer Laufzeit verarbeitet, beendet wird. Wenn Sie beispielsweise containerisierte Workloads ausführen, ist es üblich, alle Instanzen zu schützen und den Schutz nur für Instanzen aufzuheben, für die es keine aktuellen oder geplanten Aufgaben gibt. Instances können weiterhin nach neuen Jobs suchen und den Schutz wieder aktivieren, wenn neue Jobs zugewiesen werden.
Sie können den Scale-In-Schutz auf Auto Scaling Scaling-Gruppenebene und Instanzebene aktivieren. Wenn Sie den Scale-in-Schutz auf Auto Scaling Scaling-Gruppenebene aktivieren, werden nur neue Instances geschützt, wenn sie erstellt werden. Für bestehende Instances können Sie den Schutz einzeln aktivieren.
Anwendungen können den Schutz entweder von den Instanzen selbst aus oder von einer zentralen Kontrollebene aus einrichten, die verwaltet, ob jede Instanz beendet werden kann. Wir empfehlen den zentralisierten Ansatz für große Flotten oder wenn der Schutz häufig umgeschaltet werden muss, da Sie so Aufrufe stapelweise aufrufen SetInstanceProtectionund Probleme mit der API-Drosselung vermeiden können.
Weitere Informationen finden Sie unter Verwenden Sie den Instance Scale-In Protection, um die Instanzbeendigung zu kontrollieren.
Benutzerdefinierte Beendigungsrichtlinie
Wie beim Instance Scale-In Protection hilft Ihnen eine benutzerdefinierte Kündigungsrichtlinie dabei, zu verhindern, dass Ihre Amazon EC2 Auto Scaling Scaling-Gruppe bestimmte EC2-Instances beendet. Fehlerhafte Instances können unabhängig von Ihrer benutzerdefinierten Kündigungsrichtlinie trotzdem beendet werden.
Ihre Auto Scaling Scaling-Gruppe verwendet eine Standard-Kündigungsrichtlinie, um zu bestimmen, welche Amazon EC2 EC2-Instances sie zuerst beendet. Wenn Sie mehr Kontrolle darüber haben möchten, welche Instances zuerst beendet werden, können Sie mithilfe einer Lambda-Funktion eine benutzerdefinierte Kündigungsrichtlinie implementieren. Auto Scaling ruft diese Funktion immer dann auf, wenn es eine Instanz zum Beenden auswählen muss, und beendet nur Instances, die die Funktion zurückgibt. Wenn bei der Funktion ein Fehler auftritt, ein Timeout auftritt oder eine leere Liste zurückgegeben wird, beendet Auto Scaling keine Instances, es sei denn, die Instance ist fehlerhaft.
Eine benutzerdefinierte Kündigungsrichtlinie ist nützlich, wenn Ihre Anwendung erkennen kann, welche Instances inaktiv sind oder welche sicher beendet werden können. Dies erfordert in der Regel eine Kontrollebene, die die Arbeitslast in der gesamten Gruppe verfolgt.
Weitere Informationen finden Sie unter Eine benutzerdefinierte Beendigungsrichtlinie mit Lambda erstellen.
Richtlinie für den Instanzlebenszyklus
Richtlinien für den Instance-Lebenszyklus bieten Schutz vor der Kündigung von Amazon EC2 Auto Scaling, wenn eine Aktion zum Beenden des Lebenszyklus abgebrochen wird. Im Gegensatz zu Lifecycle-Hooks allein sollen Richtlinien für den Instance-Lebenszyklus sicherstellen, dass Instances in einen beibehaltenen Zustand übergehen, wenn das ordnungsgemäße Herunterfahren nicht erfolgreich abgeschlossen werden kann.
Wenn Auto Scaling eine Instance zum Beenden auswählt, werden Ihre konfigurierten Terminierungs-Lifecycle-Hooks aufgerufen und Ihre Anwendung beginnt mit ordnungsgemäßem Herunterfahren. Wenn die Aktionen im Lebenszyklus der Kündigung erfolgreich abgeschlossen werdenCONTINUE, wird die Instance normal beendet. Wenn jedoch eine Aktion zum Beenden des Lebenszyklus aus irgendeinem Grund abgebrochen wird, versetzt die Instance-Lebenszyklus-Richtlinie die Instance in einen beibehaltenen Zustand, anstatt sie zu beenden. Beibehaltene Instances werden nicht auf die gewünschte Kapazität Ihrer Auto Scaling Scaling-Gruppe angerechnet, sodass Ersatz-Instances automatisch gestartet werden. Es fallen Standardgebühren von Amazon EC2 sowohl für die beibehaltene Instance als auch für ihren Ersatz an, bis Sie die beibehaltene Instance manuell mithilfe der TerminateInstanceInAutoScalingGroupAPI beenden.
Um diese Funktion nutzen zu können, müssen Sie sowohl eine Instance-Lebenszyklus-Richtlinie mit aktiviertem TerminateHookAbandon Aufbewahrungs-Trigger als auch mindestens einen Terminierungs-Lifecycle-Hook konfigurieren. retain Da für zurückbehaltene Instances laufende Amazon EC2 EC2-Kosten anfallen und manuelle Maßnahmen erforderlich sind, ist die Überwachung von entscheidender Bedeutung. Sie sollten CloudWatch Metriken wie aktivieren GroupTerminatingRetainedInstances und CloudWatch Alarme einrichten, um Sie zu benachrichtigen, wenn Instances in den Status „Beibehalten“ wechseln.
Weitere Informationen finden Sie unter Steuern Sie die Aufbewahrung von Instances mit Richtlinien für den Instance-Lebenszyklus.
Kündigungen insgesamt aussetzen
Wenn Sie die vollständige Kontrolle über alle EC2-Instance-Kündigungen innerhalb Ihrer Amazon EC2 Auto Scaling Scaling-Gruppe benötigen, unterbrechen Sie den Vorgang. Terminate Wir empfehlen, diese Option nur zu verwenden, wenn Ihnen die oben genannten Optionen nicht die Kontrolle bieten, die Sie für Ihren Service benötigen. Indem Sie aufrufen, SuspendProcessesum den Terminate Prozess zu unterbrechen, verhindern Sie, dass Auto Scaling versucht, aus irgendeinem Grund zu beenden, es sei denn, es handelt sich um solche, die durch eine Benutzeranfrage an die TerminateInstanceInAutoScalingGroupAPI ausgelöst wurden.
Weitere Informationen finden Sie unter Amazon EC2 Auto Scaling Scaling-Prozesse aussetzen und fortsetzen.
Einschränkungen
Wichtig
Wenn Sie Ihre Anwendung auf Amazon EC2 Auto Scaling so entwerfen, dass sie Instance-Kündigungen ordnungsgemäß verarbeitet, sollten Sie die folgenden Einschränkungen berücksichtigen.
Ungesunde Instances umgehen einige Schutzmaßnahmen
Wenn eine Instance fehlerhaft ist, beginnt Amazon EC2 Auto Scaling damit, sie zu beenden, auch wenn Sie über benutzerdefinierte Kündigungsrichtlinien oder einen Scale-In-Schutz verfügen. Die einzige Möglichkeit, zu verhindern, dass fehlerhafte Instances durch Auto Scaling ersetzt werden, besteht darinHealthCheck, denReplaceUnhealthy, Terminate or-Prozess auszusetzen. Sie können Lifecycle-Hooks und eine Instance-Lifecycle-Richtlinie verwenden, um es der Anwendung zu ermöglichen, ordnungsgemäß herunterzufahren oder alle Daten zu kopieren, die Sie wiederherstellen müssen, bevor die fehlerhafte Instance beendet wird.
| Feature | Steuert fehlerfreie Instanzen | Steuert fehlerhafte Instanzen |
|---|---|---|
| Benutzerdefinierte Kündigungsrichtlinien | ||
| Abskalierungsschutz | ||
HealthCheckReplaceUnhealthyAussetzen oder Terminate verarbeiten |
||
| Lebenszyklus-Hooks | ||
| Richtlinie für den Instanzlebenszyklus |
Lifecycle-Hooks allein garantieren noch kein ordnungsgemäßes Herunterfahren
Standardmäßig werden Termination-Lifecycle-Hooks nach bestem Wissen und Gewissen ausgeführt. Wenn eine Aktion zum Beenden des Lebenszyklus abgebrochen wird, fährt Amazon EC2 Auto Scaling mit der sofortigen Beendigung der Instance fort. Sie können Terminierungs-Lifecycle-Hooks mit einer Instance-Lifecycle-Richtlinie kombinieren, um Instances beizubehalten, wenn die Aktionen zur Kündigung des Lebenszyklus abgebrochen werden. Mit dieser Kombination:
-
Ihre Termination Lifecycle-Hooks versuchen, Ihre Anwendung ordnungsgemäß herunterzufahren, nachdem Auto Scaling eine Instance-Kündigung ausgelöst hat und die Entladung aller konfigurierten Elastic Load Balancing Balancing-Load Balancer abgeschlossen ist.
-
Wenn eine Aktion zum Beenden des Lebenszyklus aus irgendeinem Grund abgebrochen wird, wechselt die Instance in den Status „Beibehalten“, anstatt beendet zu werden.
-
Die beibehaltene Instance verbleibt in ihrem aktuellen Amazon EC2 EC2-Status, sodass Sie Ihre Shutdown-Verfahren manuell abschließen oder den Fehler untersuchen können.
-
Sie können die gespeicherten Instances manuell beenden, indem Sie die TerminateInstanceInAutoScalingGroupAPI aufrufen, nachdem Sie die erforderlichen Aktionen abgeschlossen haben.
Weitere Informationen finden Sie unter Steuern Sie die Aufbewahrung von Instances mit Richtlinien für den Instance-Lebenszyklus.
Bestimmte Optionen im Instance-Markt können mit begrenzter Vorankündigung unterbrochen werden
Wenn Sie Instance-Marktoptionen wie Spot-Instances und unterbrechbare Kapazitätsreservierungen in Ihrer Auto Scaling Scaling-Gruppe verwenden, kann Amazon EC2 Ihre Instances jederzeit unterbrechen und zurückfordern. Diese Unterbrechungen umgehen alle Amazon EC2 Auto Scaling Scaling-Schutzmechanismen, einschließlich:
-
Beendigungs-Lebenszyklus-Hooks
-
Instance-Abskalierungsschutz
-
Benutzerdefinierte Kündigungsrichtlinien
-
Richtlinien für den Lebenszyklus von Instanzen
-
Ausgesetzte Prozesse
Wenn eine Spot-Instance eine Benachrichtigung über eine Unterbrechung erhält, haben Sie etwa zwei Minuten Zeit, um Aufgaben zum ordnungsgemäßen Herunterfahren durchzuführen. Sie können zwar Termination Lifecycle-Hooks verwenden, um auf Unterbrechungen der Spot-Instance zu reagieren, aber die Instance wird am Ende des zweiminütigen Zeitfensters zwangsweise beendet, auch wenn der Lifecycle-Hook noch läuft. Richtlinien für den Instance-Lebenszyklus können auch Unterbrechungen von Spot-Instances nicht verhindern.
Weitere Informationen zum Umgang mit Spot-Instance-Unterbrechungen finden Sie unter Spot-Instance-Unterbrechungen und Best Practices für Amazon EC2 Spot im Amazon EC2 EC2-Benutzerhandbuch.
Direkte Amazon EC2 EC2-Kündigungen umgehen alle Schutzmaßnahmen
Wenn Sie eine Instance in Ihrer Auto Scaling Scaling-Gruppe direkt mit der Amazon TerminateInstancesEC2-API beenden, umgeht die Kündigung alle Amazon EC2 Auto Scaling Scaling-Schutzmechanismen.
Verwenden Sie stattdessen die TerminateInstanceInAutoScalingGroupAPI, um Instances in Ihrer Auto Scaling Scaling-Gruppe zu beenden und dabei Ihre konfigurierten Schutzmaßnahmen zu respektieren.
Beispielszenarien
Wenn Sie Amazon EC2 Auto Scaling verwenden, können Sie wählen, wie viel Flottenmanagement Auto Scaling in Ihrem Namen übernimmt und wie viel direkte Kontrolle Sie über Entscheidungen zur Kündigung von EC2-Instances behalten. Je sensibler Ihre Arbeitslast auf Instance-Kündigungen reagiert, desto mehr Kontrolle möchten Sie möglicherweise behalten. In den folgenden Beispielen werden Workloads mit unterschiedlichen Toleranzstufen und die empfohlenen Konfigurationen beschrieben:
Beispiel 1: Verteilte Datenbankknoten (niedrige Toleranz)
Sie führen eine verteilte Datenbank aus, in der jede EC2-Instance eine Partition Ihrer Daten mit einem Replikationsfaktor von 3 enthält. Der Verlust mehrerer Instances, die Replikate derselben Partition enthalten, kann zu Datenverlust führen oder dazu führen, dass diese Partition nicht verfügbar ist.
Herausforderung: Auto Scaling beendet Instances möglicherweise schneller, als Daten erneut auf andere Knoten repliziert werden können, und Terminierungen könnten Ihre Kapazität unter das reduzieren, was zur Aufrechterhaltung Ihres Replikationsfaktors erforderlich ist.
Ziehen Sie die folgenden Konfigurationen in Betracht:
-
Aktivieren Sie den Instanz-Scale-In-Schutz für alle Datenbankinstanzen. Entfernen Sie ihn programmgesteuert erst, nachdem Sie sich vergewissert haben, dass die Daten sicher an anderer Stelle repliziert wurden.
-
Konfigurieren Sie Terminierungs-Lifecycle-Hooks mit verlängerten Timeouts in Kombination mit einer Instance-Lebenszyklus-Richtlinie, damit die Datenübertragung abgeschlossen werden kann.
-
Legen Sie eine Richtlinie für die Instanzwartung fest, die einen Mindestwert von 100% vorsieht, um die erforderliche Kapazität aufrechtzuerhalten.
Beispiel 2: Auftragsverarbeitung mit langer Laufzeit (mittlere Toleranz)
Sie haben eine Amazon SQS SQS-Warteschlange, die eingehende Nachrichten für Aufträge mit langer Laufzeit sammelt. Wenn eine neue Nachricht eingeht, ruft eine EC2-Instance die Nachricht ab und startet einen Job, dessen Verarbeitung 3 Stunden dauert. Wenn die Warteschlange wächst, fügt Auto Scaling Instances auf der Grundlage Ihrer Skalierungsrichtlinien hinzu. Wenn die Warteschlange schrumpft, beendet Auto Scaling die Instances.
Herausforderung: Auto Scaling beendet möglicherweise eine Instance, die 3 Stunden nach der Verarbeitung eines Jobs hinter sich hat, und nicht eine Instance im Leerlauf. Der Job kann auf einer anderen Instance neu gestartet werden, aber Sie verlieren erhebliche Fortschritte.
Betrachten Sie die folgenden Konfigurationen:
-
Konfigurieren Sie eine benutzerdefinierte Kündigungsrichtlinie, bei der das Beenden inaktiver Instanzen zuerst priorisiert wird.
-
Verwenden Sie Terminierungs-Lifecycle-Hooks, damit laufende Jobs abgeschlossen werden können.
-
Aktivieren Sie den Instance Scale-In Protection programmgesteuert, wenn eine Instance einen Job startet, und entfernen Sie ihn, wenn der Job abgeschlossen ist.
Beispiel 3: Mitarbeiterflotte für Testumgebungen (hohe Toleranz)
Sie führen eine Flotte von EC2-Instances aus, die automatisierte Tests, CI/CD Pipeline-Jobs oder Entwicklungs-Workloads ausführen. Diese Worker-Instances rufen Aufgaben aus einer Warteschlange ab, und die Testergebnisse können neu generiert werden, wenn ein Job fehlschlägt.
Herausforderung: Testaufträge können bei Scale-In-Ereignissen unterbrochen werden, aber da Tests ohne Auswirkungen wiederholt werden können, sollten Sie bei der Optimierung eher auf Kosten und Einfachheit achten als auf eine unterbrechungsfreie Verfügbarkeit.
Betrachten Sie die folgenden Konfigurationen:
-
Verwenden Sie Termination Lifecycle-Hooks, damit Anfragen während der Bearbeitung abgeschlossen werden können.
-
Erwägen Sie die Verwendung von Spot-Instances mit einer kapazitätsoptimierten Zuweisungsstrategie, um die Kosten weiter zu senken.