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 behandelt, mit denen Sie verhindern können, dass Ihre Auto Scaling Scaling-Gruppe Instances beendet, die noch nicht zum Beenden bereit sind, oder dass Instances zu schnell beendet werden, als dass sie ihre zugewiesenen Jobs erledigen könnten. Sie können alle drei Funktionen in Kombination oder separat verwenden, um Ihre Anwendungen so zu gestalten, dass sie die Instance-Kündigung problemlos handhaben.
Nehmen wir zum Beispiel an, Sie haben eine SQS Amazon-Warteschlange, die eingehende Nachrichten für Aufträge mit langer Laufzeit sammelt. Wenn eine neue Nachricht eingeht, ruft eine Instanz in der Auto-Scaling-Gruppe die Nachricht ab und beginnt mit der Verarbeitung. Die Verarbeitung jeder Nachricht dauert 3 Stunden. Wenn die Anzahl der Nachrichten zunimmt, werden der Auto-Scaling-Gruppe automatisch neue Instances hinzugefügt. Wenn die Anzahl der Nachrichten abnimmt, werden vorhandene Instanzen automatisch beendet. In diesem Fall muss Amazon EC2 Auto Scaling entscheiden, welche Instance beendet werden soll. Standardmäßig ist es möglich, dass Amazon EC2 Auto Scaling eine Instance beendet, die 2,9 Stunden nach der Verarbeitung eines dreistündigen Jobs zurückliegt, und nicht eine Instance, die sich derzeit im Leerlauf befindet. Um Probleme mit unerwarteten Abbrüchen bei der Verwendung von Amazon EC2 Auto Scaling zu vermeiden, müssen Sie Ihre Anwendung so gestalten, dass sie auf dieses Szenario reagiert.
Inhalt
Wichtig
Beachten Sie diese Punkte, wenn Sie Ihre Anwendungen auf Amazon EC2 Auto Scaling so gestalten, dass sie die Instance-Kündigung ordnungsgemäß handhaben.
-
Wenn eine Instance fehlerhaft ist, ersetzt Amazon EC2 Auto Scaling sie unabhängig davon, welche Funktion Sie verwenden (es sei denn, Sie unterbrechen den
ReplaceUnhealthy
Vorgang). Sie können einen Lebenszyklus-Hook verwenden, um es der Anwendung zu ermöglichen, ordnungsgemäß herunterzufahren oder alle Daten zu kopieren, die Sie wiederherstellen müssen, bevor die Instance beendet wird. -
Es kann nicht garantiert werden, dass ein Beendigungs-Lebenszyklus-Hook ausgeführt oder beendet wird, bevor eine Instance beendet wird. Wenn etwas fehlschlägt, beendet Amazon EC2 Auto Scaling die Instance trotzdem.
Instance-Abskalierungsschutz
Sie können den Instance-Abskalierungsschutz in vielen Situationen verwenden, in denen das Beenden von Instances eine kritische Aktion ist, die standardmäßig verweigert und nur für bestimmte Instances ausdrücklich zugelassen werden sollte. Bei der Ausführung containerisierter Workloads ist es beispielsweise üblich, alle Instances zu schützen und den Schutz nur für Instances aufzuheben, die keine aktuellen oder geplanten Aufgaben haben. Dienste wie Amazon ECS haben Integrationen mit Instance Scale-In Protection in ihre Produkte integriert.
Sie können den Abskalierungsschutz in der Auto-Scaling-Gruppe aktivieren, um den Abskalierungsschutz auf Instances anzuwenden, wenn diese erstellt werden, und ihn für vorhandene Instances zu aktivieren. Wenn eine Instance keine Arbeit mehr zu erledigen hat, kann sie den Schutz ausschalten. Die Instance kann weiterhin nach neuen Jobs suchen und den Schutz wieder aktivieren, wenn neue Jobs zugewiesen werden.
Anwendungen können den Schutz entweder von einer zentralen Steuerebene aus einrichten, die verwaltet, ob eine Instance beendet werden kann oder nicht, oder von den Instances selbst aus. Bei einer großen Flotte kann es jedoch zu Drosselungsproblemen kommen, wenn eine große Anzahl von Instances ihren Abskalierungsschutz ständig umschaltet.
Weitere Informationen finden Sie unter Verwenden Sie den Instance Scale-In Protection, um die Instanzbeendigung zu kontrollieren.
Benutzerdefinierte Beendigungsrichtlinie
Wie beim Instance-Abskalierungsschutz können Sie mit einer benutzerdefinierten Beendigungsrichtlinie verhindern, dass Ihre Auto-Scaling-Gruppe bestimmte Instances beendet.
Standardmäßig verwendet Ihre Auto-Scaling-Gruppe eine Standardbeendigungs-Richtlinie, um zu bestimmen, welche Instances zuerst beendet werden. Wenn Sie mehr Kontrolle darüber haben möchten, welche Instances zuerst beendet werden, können Sie mithilfe einer Lambda-Funktion Ihre eigene benutzerdefinierte Beendigungsrichtlinie implementieren. Amazon EC2 Auto Scaling ruft die Funktion immer dann auf, wenn es entscheiden muss, welche Instance beendet werden soll. Es wird nur eine Instance beendet, die von der Funktion zurückgegeben wird. Wenn die Funktion fehlerhaft ist, ein Timeout auftritt oder eine leere Liste erzeugt, beendet Amazon EC2 Auto Scaling keine Instances.
Eine benutzerdefinierte Beendigungsrichtlinie ist nützlich, wenn bekannt ist, wann eine Instance ausreichend redundant oder nicht ausgelastet ist, sodass sie beendet werden kann. Um dies zu unterstützen, müssen Sie Ihre Anwendung mit einer Steuerebene implementieren, die die Workload in der gesamten Gruppe überwacht. Auf diese Weise weiß die Lambda-Funktion, dass sie eine Instance, die immer noch Jobs verarbeitet, nicht einbeziehen soll.
Weitere Informationen finden Sie unter Eine benutzerdefinierte Beendigungsrichtlinie mit Lambda erstellen.
Beendigungs-Lebenszyklus-Hooks
Ein Beendigungs-Lebenszyklus-Hook verlängert die Lebensdauer einer Instance, die bereits für die Beendigung ausgewählt wurde. Er bietet zusätzliche Zeit, um alle Nachrichten oder Anfragen zu bearbeiten, die der Instance derzeit zugewiesen sind, oder um den Fortschritt zu speichern und die Arbeit auf eine andere Instance zu übertragen.
Bei vielen Workloads kann ein Lebenszyklus-Hook ausreichen, um eine Anwendung auf einer Instance, die zur Beendigung ausgewählt wurde, ordnungsgemäß herunterzufahren. Dies ist ein Best-Effort-Ansatz und kann nicht verwendet werden, um eine Beendigung im Falle eines Fehlers zu verhindern.
Um einen Lebenszyklus-Hook verwenden zu können, müssen Sie wissen, wann eine Instance zum Beenden ausgewählt wurde. Sie haben zwei Möglichkeiten, dies herauszufinden:
Option | Beschreibung | Am besten verwendet für | Link zur Dokumentation |
---|---|---|---|
Innerhalb der Instance | Der Instance-Metadaten-Service (IMDS) ist ein sicherer Endpunkt, über den Sie den Status einer Instance direkt von der Instance aus 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. | Abrufen des Ziellebenszyklus-Status |
Außerhalb der Instance | Wenn eine Instance beendet wird, wird eine Ereignisbenachrichtigung generiert. Sie können Regeln mithilfe von Amazon EventBridge, Amazon oder Amazon erstellenSQS, SNS um diese Ereignisse zu erfassen, und eine Antwort aufrufen, z. B. mit einer Lambda-Funktion. | Anwendungen, die außerhalb der Instance Aktionen durchführen müssen. | Konfigurieren eines Benachrichtigungsziels |
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 weist Amazon erst an, die Instance EC2 zu beenden, wenn sie einen CompleteLifecycleActionAnruf 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 tatsächlich eine Lebenszyklusaktion ausgeführt wird, können Sie das Timeout mit Aufrufen verlängern. RecordLifecycleActionHeartbeatAPI
Weitere Informationen finden Sie unter Lebenszyklus-Hooks bei Amazon EC2 Auto Scaling.