

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: Konfigurieren eines Lebenszyklus-Hook, der eine Lambda-Funktion aufruft
<a name="tutorial-lifecycle-hook-lambda"></a>

In dieser Übung erstellen Sie eine EventBridge Amazon-Regel, die ein Filtermuster enthält, das bei Übereinstimmung eine AWS Lambda Funktion als Regelziel aufruft. Wir stellen das Filtermuster und Beispielfunktionscode zur Verfügung. 

Wenn alles richtig konfiguriert ist, führt die Lambda-Funktion am Ende dieses Tutorials beim Start von Instances eine benutzerdefinierte Aktion aus. Die benutzerdefinierte Aktion protokolliert einfach das Ereignis im CloudWatch Logs-Protokollstream, der der Lambda-Funktion zugeordnet ist.

Die Lambda-Funktion führt auch einen Rückruf durch, damit der Lebenszyklus der Instance fortgesetzt werden kann, wenn diese Aktion erfolgreich ist. Die Instance kann jedoch den Start abbrechen und beendet werden, wenn die Aktion fehlschlägt.

In der folgenden Abbildung wird der Ablauf für ein Scale-Out-Ereignis zusammengefasst, wenn Sie eine Lambda-Funktion 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 eine Lambda-Funktion verwenden, um eine benutzerdefinierte Aktion auszuführen.\]](http://docs.aws.amazon.com/de_de/autoscaling/ec2/userguide/images/lifecycle-hook-lambda-function.png)


**Anmerkung**  
Je nach Anwendungsfall können Sie einen Lifecycle-Hook konfigurieren, indem Sie die folgenden Schritte ausführen und eine Regel erstellen. EventBridge Oder Sie können eine Lambda-Funktion verwenden, um einen Lifecycle-Hook direkt zu konfigurieren, ohne eine EventBridge Regel zu erstellen.

**Topics**
+ [Voraussetzungen](#lambda-hello-world-tutorial-prerequisites)
+ [Schritt 1: Erstellen einer IAM-Rolle mit Berechtigungen zum Abschließen von Lebenszyklus-Aktionen](#lambda-create-iam-role)
+ [Schritt 2: Erstellen einer Lambda-Funktion](#lambda-create-hello-world-function)
+ [Schritt 3: Erstellen Sie eine Regel EventBridge](#lambda-create-rule)
+ [Schritt 4: Hinzufügen eines Lebenszyklus-Hooks](#lambda-add-lifecycle-hook)
+ [Schritt 5: Testen und Prüfen des Ereignisses](#lambda-testing-hook-notifications)
+ [Schritt 6: Bereinigen](#lambda-lifecycle-hooks-tutorial-cleanup)
+ [Zugehörige Ressourcen](#lambda-lifecycle-hooks-tutorial-related-resources)

## Voraussetzungen
<a name="lambda-hello-world-tutorial-prerequisites"></a>

Erstellen Sie vor Beginn dieses Tutorials eine Auto-Scaling-Gruppe, falls noch keine vorhanden ist. Öffnen Sie zum Erstellen einer Auto-Scaling-Gruppe die Seite [Auto-Scaling-Gruppen](https://console.aws.amazon.com/ec2/v2/home?#AutoScalingGroups) der Amazon EC2-Konsole und wählen Sie **Eine Auto-Scaling-Gruppe erstellen** aus.

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

Bevor Sie eine Lambda-Funktion erstellen, müssen Sie zunächst eine Ausführungsrolle und eine Berechtigungsrichtlinie erstellen, damit Lambda Lebenszyklus-Hooks abschließen kann.

**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. Fügen Sie im Feld **Richtliniendokument** das folgende Richtliniendokument in das Feld ein und ersetzen Sie den Text durch Ihre Kontonummer und den Namen Ihrer Auto Scaling Scaling-Gruppe. **italics**

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

****  

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

------

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

1. Geben Sie unter **Policy name** (Richtlinienname) **LogAutoScalingEvent-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 -Dienst**.

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

1. Wählen **Sie unter Berechtigungen hinzufügen** die Richtlinie aus, die Sie erstellt haben (**LogAutoScalingEvent-policy**), und die benannte **AWSLambdaBasicExecutionRole**Richtlinie aus. Wählen Sie anschließend **Weiter**. 
**Anmerkung**  
Die **AWSLambdaBasicExecutionRole**Richtlinie verfügt über die Berechtigungen, die die Funktion benötigt, um Protokolle in Logs zu CloudWatch schreiben.

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

## Schritt 2: Erstellen einer Lambda-Funktion
<a name="lambda-create-hello-world-function"></a>

Erstellen Sie eine Lambda-Funktion, die als Ziel für Ereignisse dienen soll. Die in Node.js geschriebene Lambda-Beispielfunktion wird aufgerufen, EventBridge wenn ein entsprechendes Ereignis von Amazon EC2 Auto Scaling ausgelöst wird.

**So erstellen Sie eine Lambda-Funktion**

1. Öffnen Sie die Seite [Funktionen](https://console.aws.amazon.com/lambda/home#/functions) der Lambda-Konsole.

1. Wählen Sie **Funktion erstellen** und **Von Grund auf neu erstellen** aus.

1. Geben Sie unter **Basic Information (Grundlegende Informationen)** für **Function name (Funktionsname)** **LogAutoScalingEvent** ein.

1. Wählen Sie unter **Laufzeit** die Option **Node.js 18.x** aus.

1. Scrollen Sie nach unten und wählen Sie **Ändern der standardmäßigen Ausführungsrolle** und dann unter **Ausführungsrolle** **Verwenden einer vorhandenen Rolle** aus.

1. **Wählen Sie für **Existing role die Option -role** aus. LogAutoScalingEvent**

1. Übernehmen Sie im Übrigen die Standardwerte.

1. Wählen Sie **Funktion erstellen**. Sie kehren zum Code und zur Konfiguration der Funktion zurück. 

1. Fügen Sie bei geöffneter `LogAutoScalingEvent`-Funktion in der Konsole unter **Code-Quelle** im Editor den folgenden Beispielcode in die Datei index.mjs ein.

   ```
   import { AutoScalingClient, CompleteLifecycleActionCommand } from "@aws-sdk/client-auto-scaling";
   export const handler = async(event) => {
     console.log('LogAutoScalingEvent');
     console.log('Received event:', JSON.stringify(event, null, 2));
     var autoscaling = new AutoScalingClient({ region: event.region });
     var eventDetail = event.detail;
     var params = {
       AutoScalingGroupName: eventDetail['AutoScalingGroupName'], /* required */
       LifecycleActionResult: 'CONTINUE', /* required */
       LifecycleHookName: eventDetail['LifecycleHookName'], /* required */
       InstanceId: eventDetail['EC2InstanceId'],
       LifecycleActionToken: eventDetail['LifecycleActionToken']
     };
     var response;
     const command = new CompleteLifecycleActionCommand(params);
     try {
       var data = await autoscaling.send(command);
       console.log(data); // successful response
       response = {
         statusCode: 200,
         body: JSON.stringify('SUCCESS'),
       };
     } catch (err) {
       console.log(err, err.stack); // an error occurred
       response = {
         statusCode: 500,
         body: JSON.stringify('ERROR'),
       };
     }
     return response;
   };
   ```

   Dieser Code protokolliert einfach das Ereignis, sodass Sie am Ende dieses Tutorials sehen können, dass ein Ereignis im CloudWatch Log-Log-Stream erscheint, das mit dieser Lambda-Funktion verknüpft ist. 

1. Wählen Sie **Bereitstellen**. 

## Schritt 3: Erstellen Sie eine Regel EventBridge
<a name="lambda-create-rule"></a>

Erstellen Sie eine EventBridge Regel, um Ihre Lambda-Funktion auszuführen. Weitere Informationen zur Verwendung von EventBridge finden Sie unter [Wird EventBridge zur Behandlung von Auto Scaling Scaling-Ereignissen verwendet](automating-ec2-auto-scaling-with-eventbridge.md).

**So erstellen Sie eine Regel mithilfe der Konsole**

1. Öffnen Sie die [EventBridge-Konsole](https://console.aws.amazon.com/events/).

1. Wählen Sie im Navigationsbereich **Regeln** aus.

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

1. Zum **Define rule detail** (Festlegen der Regeldetails) gehen Sie folgendermaßen vor:

   1. Geben Sie unter **Name** **LogAutoScalingEvent-rule** ein.

   1. Bei **Event bus** (Ereignisbus) wählen Sie **default** (Standard) aus. Wenn ein AWS-Service in Ihrem Konto ein Ereignis generiert, wird es immer an den Standard-Event-Bus Ihres Kontos weitergeleitet.

   1. Bei **Regeltyp** wählen Sie **Regel mit einem Ereignismuster** aus.

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

1. Bei **Build event pattern** (Ereignis-Muster erstellen) gehen Sie wie folgt vor:

   1. Wählen Sie als **Eventquelle AWS ** **Events oder EventBridge Partnerevents** aus.

   1. Scrollen Sie nach unten zu **Ereignis-Muster** und gehen Sie wie folgt vor:

   1. 

      1. Wählen Sie für **Ereignisquelle** die Option **AWS-Services** aus.

      1. Für **AWS-Service**, wählen Sie **Auto Scaling** aus.

      1. Wählen Sie in **Event Type (Ereignistyp)** die Option **Instance Launch and Terminate (Starten und Beenden von Instances)** aus.

      1. Standardmäßig entspricht die Regel jedem Abskalierungs- oder Aufskalierungs-Ereignis. Um eine Regel zu erstellen, die Sie benachrichtigt, wenn ein Aufskalierungs-Ereignis vorliegt und eine Instance aufgrund eines Lebenszyklus-Hook in einen Wartezustand versetzt wird, wählen Sie **Specific instance event(s)** (Bestimmte Instance-Ereignisse) und wählen Sie **EC2 Instance-launch Lifecycle Action** (Lebenszyklusaktion beim Start von EC2-Instances) aus.

      1. Standardmäßig stimmt die Regel mit jeder Auto-Scaling-Gruppe in der Region überein. Damit die Regel mit einer bestimmten Auto-Scaling-Gruppe übereinstimmt, wählen Sie **Specific group name(s)** und wählen Sie dann die Gruppe aus.

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

1. Bei **Select target(s)** (Ziel(e) auswählen) gehen Sie wie folgt vor:

   1. Für **Target types** (Zieltypen), wählen Sie **AWS-Service** aus.

   1. Für **Select a target** (Ein Ziel auswählen), wählen die Option **Lambda function** (Lambda-Funktion) aus.

   1. Wählen Sie für **Funktion** die Option **LogAutoScalingEvent**.

   1. Klicken Sie zweimal auf **Weiter**.

1. Wählen Sie auf der Seite **Überprüfen und erstellen** die Option **Regel erstellen** aus.

## Schritt 4: Hinzufügen eines Lebenszyklus-Hooks
<a name="lambda-add-lifecycle-hook"></a>

In diesem Abschnitt fügen Sie einen Lebenszyklus-Hook hinzu, damit Lambda Ihre Funktion beim Start auf Instances ausführt.

**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 **LogAutoScalingEvent-hook** ein.

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

   1. Für **Heartbeat-Zeitüberschreitung** geben Sie den Wert **300** für die Anzahl an Sekunden ein, um auf einen Rückruf von Ihrer Lambda-Funktion zu warten.

   1. Für **Standardergebnis** wählen Sie **ABBRECHEN** aus. Dies bedeutet, dass die Auto-Scaling-Gruppe eine neue Instance beendet, wenn die Zeitüberschreitung des Hook erreicht ist, ohne einen Rückruf von Ihrer Lambda-Funktion erhalten zu haben.

   1. (Optional) Lassen Sie **Benachrichtigungs-Metadaten** leer. Die Ereignisdaten, an die wir übergeben, EventBridge enthalten alle notwendigen Informationen, um die Lambda-Funktion aufzurufen.

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

## Schritt 5: Testen und Prüfen des Ereignisses
<a name="lambda-testing-hook-notifications"></a>

Um das Ereignis zu testen, aktualisieren Sie die Auto-Scaling-Gruppe, indem Sie die gewünschte Kapazität der Auto-Scaling-Gruppe um 1 erhöhen. Ihre Lambda-Funktion wird innerhalb weniger Sekunden nach der Erhöhung der gewünschten Kapazität aufgerufen.

**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 der Auto-Scaling-Gruppe, um Details in einem unteren Bereich anzuzeigen und weiterhin die oberen Zeilen des oberen Bereichs anzuzeigen. 

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 prüfen, ob die Lambda-Funktion aufgerufen wurde.

**Anzeigen der Ausgabe aus der Lambda-Funktion**

1. Öffnen Sie die [Seite Protokollgruppen](https://console.aws.amazon.com/cloudwatch/home#logs:) der CloudWatch Konsole.

1. Wählen Sie den Namen der Protokollgruppe für Ihre Lambda-Funktion aus (`/aws/lambda/LogAutoScalingEvent`).

1. Wählen Sie den Namen des Protokoll-Streams aus, um die von der Funktion für die Lebenszyklus-Aktion bereitgestellten Daten anzuzeigen.

Als Nächstes können Sie anhand der Beschreibung der Skalierungsaktivitäten prüfen, ob die Instance erfolgreich gestartet 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. 
   + Wenn die Aktion erfolgreich war, hat die Skalierungsaktivität den Status „Erfolgreich“.
   + Wenn es fehlgeschlagen ist, sehen Sie nach einigen Minuten eine Skalierungsaktivität mit dem Status „Abgebrochen“ und die Statusmeldung „Instance konnte nicht abgeschlossen werden: Lebenszyklusaktion des Benutzers: Lebenszyklusaktion mit Token E85EB647-4FE0-4909-B341-A6C42Beispiel wurde abgebrochen: Lebenszyklusaktion mit ABBRUCH-Ergebnis abgeschlossen“.

**So verkleinern Sie die Auto-Scaling-Gruppe**  
Wenn Sie die zusätzliche Instance, die Sie für diesen Test gestartet haben, nicht benötigen, können Sie die Registerkarte **Details** öffnen und Desired capacity (**Gewünschte Kapazität**) um 1 reduzieren.

## Schritt 6: Bereinigen
<a name="lambda-lifecycle-hooks-tutorial-cleanup"></a>

Wenn Sie mit den Ressourcen gearbeitet haben, die Sie speziell 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 (`LogAutoScalingEvent-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.

**Um die EventBridge Amazon-Regel zu löschen**

1. Öffnen Sie die [Seite Regeln](https://console.aws.amazon.com/events/home?#/rules) in der EventBridge Amazon-Konsole.

1. Wählen Sie in **Event bus (Ereignisbus)** den Ereignisbus aus, der der Regel zugeordnet ist (`Default`).

1. Aktivieren Sie das Kontrollkästchen neben Ihrer Regel (`LogAutoScalingEvent-rule`). 

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

1. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie den Namen der Anwendung ein, und wählen Sie dann **Delete** aus.

Wenn Sie mit der Beispielfunktion fertig sind, löschen Sie sie. Sie können auch die Protokollgruppe löschen, welche die Protokolle der Funktion speichert, sowie die von Ihnen erstellte Ausführungsrolle und Berechtigungsrichtlinie.

**So löschen Sie eine Lambda-Funktion**

1. Öffnen Sie die Seite [Funktionen](https://console.aws.amazon.com/lambda/home#/functions) der Lambda-Konsole.

1. Wählen Sie die Funktion (`LogAutoScalingEvent`) aus.

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

1. Wenn Sie zur Bestätigung aufgefordert werden, geben Sie**delete**um die angegebene Funktion zu löschen und wählen Sie dann**Löschen**.

**So löschen Sie die Protokollgruppe**

1. Öffnen [Sie die Seite Protokollgruppen](https://console.aws.amazon.com/cloudwatch/home#logs:) der CloudWatch Konsole.

1. Wählen Sie die Protokollgruppe der Funktion (`/aws/lambda/LogAutoScalingEvent`).

1. Wählen Sie **Actions (Aktionen)**, **Delete log group(s) (Protokollgruppe(n) löschen)** aus.

1. Wählen Sie im Dialogfeld **Delete log group(s) (Protokollgruppe(n) löschen)** die Option **Delete (Löschen)** aus.

**So löschen Sie die Ausführungsrolle**

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 (`LogAutoScalingEvent-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 (`LogAutoScalingEvent-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="lambda-lifecycle-hooks-tutorial-related-resources"></a>

Die folgenden verwandten Themen können hilfreich sein, wenn Sie EventBridge Regeln erstellen, die auf Ereignissen basieren, die den Instances in Ihrer Auto Scaling Scaling-Gruppe passieren.
+ [Wird EventBridge zur Behandlung von Auto Scaling Scaling-Ereignissen verwendet](automating-ec2-auto-scaling-with-eventbridge.md). In diesem Abschnitt finden Sie Beispiele für Ereignisse für andere Anwendungsfälle, einschließlich Ereignisse für die Skalierung.
+ [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.

Ein Tutorial, das Ihnen zeigt, wie Sie den Instance Metadata Service (IMDS) verwenden, um eine Aktion innerhalb der Instance selbst aufzurufen, finden Sie unter [Tutorial: Verwenden Sie Datenskript- und Instance-Metadaten, um den Lebenszyklusstatus abzurufen](tutorial-lifecycle-hook-instance-metadata.md).