

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
<a name="tutorial-lifecycle-hook-instance-metadata"></a>

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](retrieving-target-lifecycle-state-through-imds.md) 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.\]](http://docs.aws.amazon.com/de_de/autoscaling/ec2/userguide/images/lifecycle-hook-user-data-script.png)


**Topics**
+ [Schritt 1: Erstellen einer IAM-Rolle mit Berechtigungen zum Abschließen von Lebenszyklus-Aktionen](#instance-metadata-create-iam-role)
+ [Schritt 2: Erstellen Sie eine Startvorlage und schließen Sie die IAM-Rolle und ein Benutzerdatenskript ein](#instance-metadata-create-hello-world-function)
+ [Schritt 3: Erstellen einer Auto-Scaling-Gruppe](#instance-metadata-create-auto-scaling-group)
+ [Schritt 4: Hinzufügen eines Lebenszyklus-Hooks](#instance-metadata-add-lifecycle-hook)
+ [Schritt 5: Testen und Prüfen der Funktionalität](#instance-metadata-testing-hook)
+ [Schritt 6: Bereinigen](#instance-metadata-lifecycle-hooks-tutorial-cleanup)
+ [Zugehörige Ressourcen](#instance-metadata-lifecycle-hooks-tutorial-related-resources)

## Schritt 1: Erstellen einer IAM-Rolle mit Berechtigungen zum Abschließen von Lebenszyklus-Aktionen
<a name="instance-metadata-create-iam-role"></a>

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)](https://console.aws.amazon.com/iam/home?#/policies) und wählen Sie dann **Create policy (Richtlinie erstellen)** aus.

1. Wählen Sie den Tab **JSON**.

1. Kopieren Sie das folgende Richtliniendokument und fügen Sie es in das Feld **Policy Document** (Richtliniendokument) ein. Ersetzen Sie das **sample text**durch Ihre Kontonummer und den Namen der Auto Scaling Scaling-Gruppe, die Sie erstellen möchten (**TestAutoScalingEvent-group**).

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "autoscaling:CompleteLifecycleAction"
         ],
         "Resource": "arn:aws:autoscaling:*:123456789012:autoScalingGroup:*:autoScalingGroupName/TestAutoScalingEvent-group"
       }
     ]
   }
   ```

------

1. Wählen Sie **Weiter** aus. 

1. 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)**.

1. Wählen Sie **Rolle erstellen** aus.

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

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

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

1. 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
<a name="instance-metadata-create-hello-world-function"></a>

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](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) der Amazon EC2 Konsole.

1. Wählen Sie **Startvorlage erstellen**.

1. Geben Sie für **Startvorlagenname** **TestAutoScalingEvent-template** ein.

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

1. 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. 

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

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

1. **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.

1. 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 token {
       echo "X-aws-ec2-metadata-token: $(curl -X PUT 'http://169.254.169.254/latest/api/token' -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600')"
   }
   
   function get_target_state {
       echo $(curl -H "$(token)" -s http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state)
   }
   
   function get_instance_id {
       echo $(curl -H "$(token)" -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`

1. Wählen Sie **Startvorlage erstellen**.

1. 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](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) für Amazon EC2 Auto Scaling.

## Schritt 3: Erstellen einer Auto-Scaling-Gruppe
<a name="instance-metadata-create-auto-scaling-group"></a>

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**).

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

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

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

1. 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. 

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

1. Ü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
<a name="instance-metadata-add-lifecycle-hook"></a>

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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) in der Amazon-EC2-Konsole.

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

1. 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.

1. 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.

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

   1. 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.

   1. 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.

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

1. Wählen Sie **Erstellen** aus.

## Schritt 5: Testen und Prüfen der Funktionalität
<a name="instance-metadata-testing-hook"></a>

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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) in der Amazon-EC2-Konsole.

1. 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. 

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

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

1. Wählen Sie **Aktualisieren** aus. 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.

1. 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. 

1. 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
<a name="instance-metadata-lifecycle-hooks-tutorial-cleanup"></a>

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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) in der Amazon-EC2-Konsole.

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

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

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

1. 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](https://console.aws.amazon.com/ec2/v2/#LaunchTemplates) der Amazon EC2 Konsole.

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

1. 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](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) in der Amazon-EC2-Konsole.

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

1. 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)](https://console.aws.amazon.com/iam/home?#/roles) in der IAM-Konsole.

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

1. Wählen Sie **Löschen** aus.

1. 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](https://console.aws.amazon.com/iam/home?#/policies) in der IAM-Konsole.

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

1. Wählen Sie **Aktionen**, **Löschen** aus.

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

## Zugehörige Ressourcen
<a name="instance-metadata-lifecycle-hooks-tutorial-related-resources"></a>

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.
+ [Abrufen des Ziellebenszyklus-Status durch Instance-Metadaten](retrieving-target-lifecycle-state-through-imds.md). In diesem Abschnitt wird der Lebenszyklus-Status für andere Anwendungsfälle, wie z. B. die Beendigung der Instance, beschrieben.
+ [Lebenszyklus-Hooks hinzufügen (Konsole)](adding-lifecycle-hooks.md#adding-lifecycle-hooks-console). Diese Prozedur zeigt Ihnen, wie Sie Lebenszyklus-Hooks sowohl für Aufskalieren (Start von Instances) als auch Abskalieren (Beendigung von Instances oder Rückkehr zu einem warmen Pool) hinzufügen können.
+ [Kategorien von Instance-Metadaten](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html#instancedata-data-categories) im *Amazon EC2 EC2-Benutzerhandbuch*. In diesem Thema sind alle Kategorien von Instance-Metadaten aufgeführt, mit denen Sie Aktionen auf EC2-Instances aufrufen können.

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](tutorial-lifecycle-hook-lambda.md)