Tutorial: Verwenden Sie Datenskript- und Instance-Metadaten, um den Lebenszyklusstatus abzurufen - Amazon EC2 Auto Scaling

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.

Tutorial: Verwenden Sie Datenskript- und Instance-Metadaten, um den Lebenszyklusstatus abzurufen

Eine gängige Methode, benutzerdefinierte Aktionen für Lifecycle-Hooks zu erstellen, ist die Verwendung von Benachrichtigungen, die Amazon EC2 Auto Scaling an andere Dienste wie Amazon EventBridge sendet. Sie können jedoch vermeiden, dass Sie zusätzliche Infrastruktur erstellen müssen, indem Sie stattdessen ein Benutzerdatenskript verwenden, um den Code, der Instances konfiguriert und die Lebenszyklusaktion abschließt, in die Instances selbst zu verschieben.

Das folgende Tutorial veranschaulicht die Verwendung eines Benutzerdatenskripts und Instance-Metadaten. Sie erstellen eine grundlegende Auto-Scaling-Gruppenkonfiguration mit einem Benutzerdatenskript, das die Ziel-Lebenszyklusstatus der Instances in Ihrer Gruppe liest und eine Rückrufaktion in einer bestimmten Phase des Lebenszyklus einer Instance ausführt, um den Startprozess fortzusetzen.

Die folgende Abbildung fasst den Ablauf für ein Scale-Out-Ereignis zusammen, wenn Sie ein Benutzerdatenskript verwenden, um eine benutzerdefinierte Aktion auszuführen. Nach dem Start einer Instance wird der Lebenszyklus der Instance angehalten, bis der Lifecycle-Hook abgeschlossen ist, entweder durch eine Zeitüberschreitung oder dadurch, dass Amazon EC2 Auto Scaling ein Signal zum Fortfahren empfängt.

Der Ablauf für ein Scale-Out-Ereignis, wenn Sie ein Benutzerdatenskript verwenden, um eine benutzerdefinierte Aktion auszuführen.

Schritt 1: Erstellen einer IAM-Rolle mit Berechtigungen zum Abschließen von Lebenszyklus-Aktionen

Wenn Sie das AWS CLI oder ein AWS SDK verwenden, um einen Rückruf zu senden, um Lebenszyklusaktionen abzuschließen, müssen Sie eine IAM-Rolle mit Berechtigungen zum Abschließen von Lebenszyklusaktionen verwenden.

So erstellen Sie die Richtlinie
  1. Öffnen Sie in der IAM-Konsole Policies (Richtlinien) und wählen Sie dann Create policy (Richtlinie erstellen) aus.

  2. Wählen Sie den Tab JSON.

  3. Kopieren Sie das folgende Richtliniendokument und fügen Sie es in das Feld Policy Document (Richtliniendokument) ein. Ersetzen Sie den Beispieltext mit Ihrer Kontonummer und dem Namen der Auto-Scaling-Gruppe, die Sie erstellen möchten (TestAutoScalingEvent-group).

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction" ], "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/TestAutoScalingEvent-group" } ] }
  4. Wählen Sie Weiter aus.

  5. Geben Sie unter Policy name (Richtlinienname) TestAutoScalingEvent-policy ein. Wählen Sie Richtlinie erstellen aus.

Wenn Sie die Richtlinie fertig erstellt haben, können Sie eine Rolle erstellen, die sie verwendet.

So erstellen Sie die Rolle
  1. Wählen Sie im Navigationsbereich auf der linken Seite Roles (Rollen).

  2. Wählen Sie Rolle erstellen aus.

  3. Wählen Sie für Select trusted entity (Vertrauenswürdige Entität auswählen) die Option AWS -Service.

  4. Wählen Sie für Ihren Anwendungsfall die Option EC2 und dann Next (Weiter) aus.

  5. Wählen Sie unter Berechtigungen hinzufügen die Richtlinie aus, die Sie erstellt haben (TestAutoScalingEvent-policy). Wählen Sie anschließend Weiter.

  6. Geben Sie auf der Seite Set role name and review (Rollenname festlegen und überprüfen) für Role name (Rollenname) TestAutoScalingEvent-role ein und wählen Sie Create role (Rolle erstellen) aus.

Schritt 2: Erstellen Sie eine Startvorlage und schließen Sie die IAM-Rolle und ein Benutzerdatenskript ein

Erstellen Sie eine Startvorlage für die Verwendung mit einer Auto-Scaling-Gruppe. Fügen Sie die von Ihnen erstellte IAM-Rolle und das bereitgestellte Beispielbenutzerdatenskript ein.

Eine Startvorlage erstellen
  1. Öffnen Sie die Seite Startvorlagen der Amazon EC2 Konsole.

  2. Wählen Sie Startvorlage erstellen.

  3. Geben Sie für Startvorlagenname TestAutoScalingEvent-template ein.

  4. Unter Auto-Scaling-Anleitung aktivieren Sie das Kontrollkästchen.

  5. Wählen Sie für Application and OS Images (Amazon Machine Image) (Anwendungs- und Betriebssystem-Images (Amazon Machine Image)) Amazon Linux 2 (HVM), SSD-Volume-Typ, 64-Bit (x86) aus der Quick Start(Schnellstart)-Liste.

  6. Wählen Sie für Instance type (Instance-Typ) einen Typ von Amazon-EC2-Instance (z. B. „t2.micro“) aus.

  7. Für Erweiterte Details erweitern Sie den Abschnitt, um die Felder anzuzeigen.

  8. Wählen Sie für das IAM-Instanzprofil den IAM-Instanzprofilnamen Ihrer IAM-Rolle (-role) aus. TestAutoScalingEvent Ein Instance-Profil ist ein Container für eine IAM-Rolle, mit dem Amazon EC2 einer Instance die IAM-Rolle übergibt, wenn die Instance gestartet wird.

    Wenn Sie eine IAM-Rolle mithilfe der IAM-Konsole erstellt haben, hat die Konsole automatisch ein Instance-Profil mit demselben Namen wie der entsprechenden Rolle erzeugt.

  9. Kopieren Sie für User date (Benutzerdaten) das folgende Beispiel-Benutzerdatenskript und fügen Sie es in das Feld ein. Ersetzen Sie den Beispieltext für group_name durch den Namen der Auto Scaling Scaling-Gruppe, die Sie erstellen möchten, und region durch den Namen, den AWS-Region Ihre Auto Scaling Scaling-Gruppe verwenden soll.

    #!/bin/bash function get_target_state { echo $(curl -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state) } function get_instance_id { echo $(curl -s http://169.254.169.254/latest/meta-data/instance-id) } function complete_lifecycle_action { instance_id=$(get_instance_id) group_name='TestAutoScalingEvent-group' region='us-west-2' echo $instance_id echo $region echo $(aws autoscaling complete-lifecycle-action \ --lifecycle-hook-name TestAutoScalingEvent-hook \ --auto-scaling-group-name $group_name \ --lifecycle-action-result CONTINUE \ --instance-id $instance_id \ --region $region) } function main { while true do target_state=$(get_target_state) if [ \"$target_state\" = \"InService\" ]; then # Change hostname export new_hostname="${group_name}-$instance_id" hostname $new_hostname # Send callback complete_lifecycle_action break fi echo $target_state sleep 5 done } main

    Dieses einfache Benutzerdatenskript führt folgende Aktionen aus:

    • Ruft die Instance-Metadaten auf, um den Ziellebenszyklusstatus und die Instance-ID aus den Instance-Metadaten abzurufen

    • Ruft den Ziellebenszyklusstatus wiederholt ab, bis er sich auf InService ändert

    • Ändert den Hostnamen der Instance in die Instance-ID, der dem Namen der Auto-Scaling-Gruppe vorangestellt ist, wenn der Ziellebenszyklusstatus InService lautet

    • Sendet einen Rückruf durch Aufruf des CLI-Befehls complete-lifecycle-action, um Amazon EC2 Auto Scaling zu signalisieren, den EC2-Startprozess zu CONTINUE

  10. Wählen Sie Startvorlage erstellen.

  11. Wählen Sie auf der Bestätigungsseite Create Auto Scaling group (Auto-Scaling-Gruppe erstellen) aus.

Anmerkung

Weitere Beispiele, die Sie als Referenz für die Entwicklung Ihres Benutzerdatenskripts verwenden können, finden Sie im GitHub Repository für Amazon EC2 Auto Scaling.

Schritt 3: Erstellen einer Auto-Scaling-Gruppe

Nachdem Sie die Startvorlage erstellt haben, erstellen Sie eine Auto-Scaling-Gruppe.

So erstellen Sie eine Auto Scaling-Gruppe
  1. Geben Sie auf der Seite Choose launch template or configuration (Startvorlage oder -konfiguration auswählen) für Auto Scaling group name (Auto-Scaling-Gruppenname) einen Namen für Ihre Auto-Scaling-Gruppe ein (TestAutoScalingEvent-group).

  2. Klicken Sie auf Next (Weiter), um die Seite Choose instance launch options (Wählen Sie Instance-Startoptionen) aufzurufen.

  3. Wählen Sie unter Network (Netzwerk) eine VPC aus.

  4. Wählen Sie für Availability Zones and subnets (Availability Zones und Subnetze) ein oder mehrere Subnetze aus einer oder mehreren Availability Zones aus.

  5. Verwenden Sie im Abschnitt Instance type requirements (Anforderungen an den Instance-Typ) die Standardeinstellung, um diesen Schritt zu vereinfachen. (Setzen Sie die Startvorlage nicht außer Kraft.) In diesem Tutorial werden Sie nur eine On-Demand-Instance mit dem in Ihrer Startvorlage angegebenen Instance-Typ starten.

  6. Wählen Sie unten auf dem Bildschirm Überspringen zum Review.

  7. Überprüfen Sie auf der Seite Review (Prüfen) die Details Ihrer Auto-Scaling-Gruppe und wählen Sie dann Create Auto Scaling group (Auto-Scaling-Gruppe erstellen).

Schritt 4: Hinzufügen eines Lebenszyklus-Hooks

Fügen Sie einen Lebenszyklus-Hook hinzu, um die Instance in einem Wartezustand zu halten, bis Ihre Lebenszyklusaktion abgeschlossen ist.

So fügen Sie einen Lebenszyklus-Hook hinzu
  1. Öffnen Sie die Seite Auto-Scaling-Gruppen in der Amazon-EC2-Konsole.

  2. Aktivieren Sie das Kontrollkästchen neben Ihrer Auto-Scaling-Gruppe. Im unteren Teil der Seite wird ein geteilter Bereich geöffnet.

  3. Wählen Sie im unteren Bereich auf der Registerkarte Instance management (Instance-Verwaltung) unter Lebenszyklus-Hooks die Option Create Lebenszyklus hook (Lebenszyklus-Hook erstellen) aus.

  4. Gehen Sie wie folgt vor, um einen Lebenszyklus-Hook zum Aufskalieren (Start von Instances) zu definieren:

    1. Geben Sie für Lebenszyklus-Hooks den Wert TestAutoScalingEvent-hook ein.

    2. Wählen Sie bei Lifecycle Transition (Lebenszykluswechsel) die Option Instance launch (Instance-Start) aus.

    3. Geben Sie für Heartbeat timeout (Heartbeat-Zeitüberschreitung) den Wert 300 für die Anzahl der Sekunden ein, die auf einen Rückruf von Ihrem Benutzerdatenskript gewartet werden soll.

    4. Für Standardergebnis wählen Sie ABBRECHEN aus. Wenn die Zeitüberschreitung des Hooks erreicht ist, ohne einen Rückruf von Ihrem Benutzerdatenskript erhalten zu haben, beendet die Auto-Scaling-Gruppe die neue Instance.

    5. (Optional) Halten Sie Notification metadata (Benachrichtigungs-Metadaten) frei.

  5. Wählen Sie Erstellen.

Schritt 5: Testen und Prüfen der Funktionalität

Um die Funktionalität zu testen, aktualisieren Sie die Auto-Scaling-Gruppe, indem Sie die gewünschte Kapazität der Auto-Scaling-Gruppe um 1 erhöhen. Das Benutzerdatenskript wird ausgeführt und überprüft den Ziellebenszyklusstatus der Instance kurz nach dem Start der Instance. Das Skript ändert den Hostnamen und sendet eine Rückrufaktion, wenn der Ziellebenszyklusstatus InService ist. Dieser Vorgang dauert normalerweise nur ein paar Sekunden.

So erhöhen Sie die Größe der Auto-Scaling-Gruppe
  1. Öffnen Sie die Seite Auto-Scaling-Gruppen in der Amazon-EC2-Konsole.

  2. Aktivieren Sie das Kontrollkästchen neben Ihrer Auto-Scaling-Gruppe. Zeigen Sie Details in einem unteren Bereich an, während Sie weiterhin die oberen Zeilen des oberen Bereichs sehen.

  3. Wählen Sie im unteren Bereich auf der Registerkarte Details die Option Gruppendetails, Bearbeiten aus.

  4. Erhöhen Sie für Desired capacity (Gewünschte Kapazität den aktuellen Wert um 1.

  5. Wählen Sie Aktualisieren. Während eine Instance gestartet wird, zeigt die Spalte Status den Status Updating capacity (Kapazität aktualisieren) an.

Nachdem Sie die gewünschte Kapazität erhöht haben, können Sie überprüfen, ob die Instance erfolgreich gestartet wurde und nicht von der Beschreibung der Skalierungsaktivitäten beendet wurde.

Ansehen der Skalierungsaktivität
  1. Wählen Sie auf der Seite Auto-Scaling-Gruppen Ihre Gruppe aus.

  2. Auf der Registerkarte Activity (Aktivität) wird unter Activity history (Aktivitätsverlauf) in der Spalte Status angezeigt, ob Ihre Auto-Scaling-Gruppe Instances erfolgreich gestartet hat.

  3. Wenn das Benutzerdatenskript fehlschlägt, sehen Sie nach Ablauf des Timeout-Zeitraums eine Skalierungsaktivität mit dem Status Canceled und eine Statusmeldung Instance failed to complete user's Lifecycle Action: Lifecycle Action with token e85eb647-4fe0-4909-b341-a6c42EXAMPLE was abandoned: Lifecycle Action Completed with ABANDON Result.

Schritt 6: Bereinigen

Wenn Sie mit den Ressourcen gearbeitet haben, die Sie für dieses Tutorial erstellt haben, führen Sie die folgenden Schritte aus, um sie zu löschen.

So löschen Sie den Lebenszyklus-Hook
  1. Öffnen Sie die Seite Auto-Scaling-Gruppen in der Amazon-EC2-Konsole.

  2. Aktivieren Sie das Kontrollkästchen neben Ihrer Auto-Scaling-Gruppe.

  3. Wählen Sie auf der Registerkarte Instance management (Instance-Verwaltung) unter Lebenszyklus-Hooks den Lebenszyklus (TestAutoScalingEvent-hook) aus.

  4. Wählen Sie Actions (Aktionen), Delete (Löschen) aus.

  5. Um dies zu bestätigen, wählen Sie erneut Delete (Löschen) aus.

Löschen Sie die Startvorlage wie folgt:
  1. Öffnen Sie die Seite Startvorlagen der Amazon EC2 Konsole.

  2. Wählen Sie Ihre Startvorlage (TestAutoScalingEvent-template) und anschließend Actions (Aktionen) und Delete template (Vorlage löschen) aus.

  3. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie Delete ein, um das Löschen der angegebenen Auto-Scaling-Gruppe zu bestätigen, wählen Sie dann Löschen.

Wenn Sie mit der Beispiel-Auto-Scaling-Gruppe fertig sind, löschen Sie sie. Sie können auch die von Ihnen erstellte IAM-Rolle und Berechtigungsrichtlinie löschen.

Löschen Sie die Auto-Scaling-Gruppe wie folgt:
  1. Öffnen Sie die Seite Auto-Scaling-Gruppen in der Amazon-EC2-Konsole.

  2. Aktivieren Sie das Kontrollkästchen neben Ihrer Auto-Scaling-Gruppe (TestAutoScalingEvent-group) und wählen Sie Delete (Löschen) aus.

  3. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie delete ein, um das Löschen der angegebenen Auto-Scaling-Gruppe zu löschen, wählen Sie dann Löschen.

    Ein Ladesymbol in der Spalte Name zeigt an, dass die Auto-Scaling-Gruppe gelöscht wird. Es dauert einige Minuten, bis die Instances beendet werden und die Gruppe gelöscht wird.

Löschen Sie die IAM-Rolle wie folgt:
  1. Öffnen Sie die Seite Roles (Rollen) in der IAM-Konsole.

  2. Wählen Sie die Rolle der Funktion (TestAutoScalingEvent-role).

  3. Wählen Sie Löschen aus.

  4. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie den Namen der Rolle ein und wählen Sie dann Delete (Löschen).

Löschen der IAM-Richtlinie
  1. Öffnen Sie die Seite Richtlinien in der IAM-Konsole.

  2. Wählen Sie die Richtlinie aus, die Sie erstellt haben (TestAutoScalingEvent-policy).

  3. Wählen Sie Aktionen, Löschen aus.

  4. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie den Namen der Richtlinie ein und wählen Sie dann Delete (Löschen).

Die folgenden damit verbundenen Themen können hilfreich sein, wenn Sie Code entwickeln, der auf der Grundlage der in den Instance-Metadaten verfügbaren Daten Aktionen für Instances aufruft.

Ein Tutorial, das Ihnen zeigt, wie Sie Amazon verwenden, um Regeln EventBridge zu erstellen, die Lambda-Funktionen auf der Grundlage von Ereignissen aufrufen, die mit den Instances in Ihrer Auto Scaling Scaling-Gruppe passieren, finden Sie unter. Tutorial: Konfigurieren eines Lebenszyklus-Hook, der eine Lambda-Funktion aufruft