View a markdown version of this page

Vorbereiten des Hinzufügens eines Lebenszyklus-Hook zu einer Auto-Scaling-Gruppe - 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.

Vorbereiten des Hinzufügens eines Lebenszyklus-Hook zu einer Auto-Scaling-Gruppe

Stellen Sie sicher, dass Ihr Benutzerdatenskript oder Ihr Benachrichtigungsziel korrekt eingerichtet ist, bevor Sie Ihrer Auto-Scaling-Gruppe einen Lebenszyklus-Hook hinzufügen.

  • Um ein Benutzerdatenskript zu nutzen, um benutzerdefinierte Aktionen für Ihre Instances während des Starts auszuführen, müssen Sie kein Benachrichtigungsziel konfigurieren. Sie müssen jedoch bereits die Startvorlage oder die Startkonfiguration erstellt haben, die Ihr Benutzerdatenskript angibt und es Ihrer Auto-Scaling-Gruppe zuordnet. Weitere Informationen zu Benutzerdatenskripten finden Sie im Amazon EC2-Benutzerhandbuch unter Befehle auf Ihrer Linux-Instance beim Start ausführen.

  • Um Amazon EC2 Auto Scaling zu signalisieren, wenn die Lifecycle-Aktion abgeschlossen ist, müssen Sie dem Skript den CompleteLifecycleAction API-Aufruf hinzufügen und manuell eine IAM-Rolle mit einer Richtlinie erstellen, die es Auto Scaling-Instances ermöglicht, diese API aufzurufen. Ihre Startvorlage oder Startkonfiguration muss diese Rolle mithilfe eines IAM-Instance-Profils angeben, das beim Start an Ihre Amazon-EC2-Instances angehängt wird. Weitere Informationen erhalten Sie unter Schließen Sie eine Lifecycle-Aktion in einer Auto Scaling-Gruppe ab und IAM-Rollen für Anwendungen, die auf Amazon EC2-Instances ausgeführt werden.

  • Damit Lambda Amazon EC2 Auto Scaling signalisieren kann, wenn die Lifecycle-Aktion abgeschlossen ist, müssen Sie den CompleteLifecycleAction API-Aufruf zum Funktionscode hinzufügen. Sie müssen auch eine IAM-Richtlinie an die Ausführungsrolle der Funktion angehängt haben, um Lambda die Berechtigung zum Vervollständigen von Lebenszyklus-Aktionen zu erteilen. Weitere Informationen finden Sie unter Tutorial: Konfigurieren eines Lebenszyklus-Hook, der eine Lambda-Funktion aufruft.

  • Um einen Service wie Amazon SNS oder Amazon SQS zum Ausführen einer benutzerdefinierten Aktion verwenden zu können, müssen Sie bereits das SNS-Thema oder die SQS-Warteschlange erstellt haben und über den Amazon-Ressourcennamen (ARN) verfügen. Sie müssen auch bereits die IAM-Rolle erstellt haben, die Amazon EC2 Auto Scaling Zugriff auf Ihr SNS-Thema oder SQS-Ziel ermöglicht, und über deren ARN verfügen. Weitere Informationen finden Sie unter Konfigurieren eines Benachrichtigungsziels für Lebenszyklus-Benachrichtigungen.

    Anmerkung

    Wenn Sie einen Lifecycle-Hook in der Konsole hinzufügen, sendet Amazon EC2 Auto Scaling standardmäßig Benachrichtigungen über Lebenszyklusereignisse an Amazon. EventBridge Die Verwendung EventBridge eines Benutzerdatenskripts ist eine empfohlene bewährte Methode. Um einen Lifecycle-Hook zu erstellen, der Benachrichtigungen direkt an Amazon SNS, Amazon SQS oder sendet, verwenden Sie das AWS Lambda, oder ein SDK AWS CLI AWS CloudFormation, um den Lifecycle-Hook hinzuzufügen.

Konfigurieren eines Benachrichtigungsziels für Lebenszyklus-Benachrichtigungen

Sie können einer Auto-Scaling-Gruppe Lebenszyklus-Hooks hinzufügen, um benutzerdefinierte Aktionen auszuführen, wenn eine Instance in einen Wartestatus wechselt. Sie können einen Zielservice auswählen, der diese Aktionen abhängig von Ihrem bevorzugten Entwicklungsansatz ausführt.

Es gibt vier verschiedene Ansätze für die Implementierung von Benachrichtigungszielen für Lifecycle-Hooks:

  • Amazon EventBridge — Empfangen Sie die Benachrichtigungen und führen Sie die gewünschten Aktionen aus.

  • Amazon Simple Notification Service (Amazon SNS) — Erstellen Sie ein Thema für die Veröffentlichung von Benachrichtigungen. Kunden können das SNS-Thema abonnieren und veröffentlichte Nachrichten über ein unterstütztes Protokoll empfangen.

  • Amazon Simple Queue Service (Amazon SQS) — Tauschen Sie Nachrichten über ein Polling-Modell aus.

  • AWS Lambda— Rufen Sie eine Lambda-Funktion auf, die die gewünschte Aktion ausführt.

Als bewährte Methode empfehlen wir, EventBridge anstelle von Amazon SNS oder Amazon SQS als Benachrichtigungsziel zu verwenden. Die an Amazon SNS und Amazon SQS gesendeten Benachrichtigungen enthalten dieselben Informationen wie die Benachrichtigungen, an die Amazon EC2 Auto Scaling sendet. EventBridge Bisher bestand die Standardpraxis darin EventBridge, eine Benachrichtigung an SNS oder SQS zu senden und einen anderen Service in SNS oder SQS zu integrieren, um programmatische Aktionen durchzuführen. Heute stehen EventBridge Ihnen mehr Optionen für die Dienste zur Verfügung, auf die Sie abzielen können, und es wird einfacher, Ereignisse mithilfe einer serverlosen Architektur zu verarbeiten.

Denken Sie daran: Wenn Sie über ein Benutzerdatenskript in Ihrer Startvorlage- oder Startkonfiguration verfügen, das Ihre Instances beim Starten konfiguriert, müssen Sie keine Benachrichtigungen erhalten, um benutzerdefinierte Aktionen für Ihre Instances auszuführen.

In den folgenden Verfahren wird beschrieben, wie Sie Ihr Benachrichtigungsziel einrichten.

Wichtig

Die EventBridge Regel, die Lambda-Funktion, das Amazon SNS-Thema und die Amazon SQS-Warteschlange, die Sie mit Lifecycle-Hooks verwenden, müssen sich immer in derselben Region befinden, in der Sie Ihre Auto Scaling-Gruppe erstellt haben.

Leiten Sie Benachrichtigungen an Lambda weiter mit EventBridge

Sie können eine EventBridge Regel so konfigurieren, dass eine Lambda-Funktion aufgerufen wird, wenn eine Instanz in einen Wartezustand wechselt. Amazon EC2 Auto Scaling sendet eine Benachrichtigung über ein Lebenszyklusereignis EventBridge über die Instance aus, die gerade gestartet oder beendet wird, sowie ein Token, das Sie zur Steuerung der Lebenszyklusaktion verwenden können. Beispiele für diese Ereignisse finden Sie unter Ereignis-Referenz für Amazon EC2 Auto Scaling.

Anmerkung

Wenn Sie die verwenden, um eine Ereignisregel AWS-Managementkonsole zu erstellen, fügt die Konsole automatisch die IAM-Berechtigungen hinzu, die erforderlich sind, um die EventBridge Erlaubnis zum Aufrufen Ihrer Lambda-Funktion zu erteilen. Wenn Sie eine Ereignisregel mit AWS CLI erstellen, müssen Sie diese Berechtigung ausdrücklich erteilen.

Informationen zum Erstellen von Ereignisregeln in der EventBridge Konsole finden Sie im EventBridge Amazon-Benutzerhandbuch unter Erstellen von EventBridge Amazon-Regeln, die auf Ereignisse reagieren.

– oder –

Ein einführendes Tutorial, das sich an Konsolenbenutzer richtet, finden Sie unter Tutorial: Konfigurieren eines Lebenszyklus-Hook, der eine Lambda-Funktion aufruft. Dieses Tutorial zeigt Ihnen, wie Sie eine einfache Lambda-Funktion erstellen, die auf Startereignisse wartet und diese in ein CloudWatch Logs-Protokoll schreibt.

Um eine EventBridge Regel zu erstellen, die eine Lambda-Funktion aufruft
  1. Erstellen Sie mithilfe der Lambda-Konsole eine Lambda-Funktion und notieren Sie ihren Amazon-Ressourcennamen (ARN). Beispiel, arn:aws:lambda:region:123456789012:function:my-function. Sie benötigen den ARN, um ein EventBridge Ziel zu erstellen. Weitere Informationen finden Sie unter Erste Schritte mit Lambda im AWS Lambda -Entwicklerhandbuch.

  2. Um eine Regel zu erstellen, die auf Ereignisse für den Start der Instance passt, verwenden Sie den folgenden put-rule-Befehl.

    aws events put-rule --name my-rule --event-pattern file://pattern.json --state ENABLED

    Im folgenden Beispiel wird die Aktion pattern.json für eine Instance zum Starten des Lebenszyklus veranschaulicht. Ersetzen Sie den Text italics durch den Namen Ihrer Auto Scaling-Gruppe.

    { "source": [ "aws.autoscaling" ], "detail-type": [ "EC2 Instance-launch Lifecycle Action" ], "detail": { "AutoScalingGroupName": [ "my-asg" ] } }

    Wenn der Befehl erfolgreich ausgeführt wird, EventBridge antwortet er mit dem ARN der Regel. Notieren Sie diesen ARN. Sie müssen ihn in Schritt 4 eingeben.

    Um eine Regel zu erstellen, die mit anderen Ereignissen übereinstimmt, ändern Sie das Ereignismuster. Weitere Informationen finden Sie unter Wird EventBridge zur Behandlung von Auto Scaling Scaling-Ereignissen verwendet.

  3. Verwenden Sie Folgendes, um die Lambda-Funktion anzugeben, die als Ziel für die Regel verwendet werden soll:put-targets-Befehl.

    aws events put-targets --rule my-rule --targets Id=1,Arn=arn:aws:lambda:region:123456789012:function:my-function

    Im vorherigen Befehl my-rule ist dies der Name, den Sie in Schritt 2 für die Regel angegeben haben, und der Wert für den Arn Parameter ist der ARN der Funktion, die Sie in Schritt 1 erstellt haben.

  4. Um Berechtigungen hinzuzufügen, die es der Regel erlauben, Ihre Lambda-Funktion aufzurufen, verwenden Sie den folgenden Lambda add-permission-Befehl. Dieser Befehl vertraut dem EventBridge Dienstprinzipal (events.amazonaws.com) und beschränkt die Berechtigungen auf die angegebene Regel.

    aws lambda add-permission --function-name my-function --statement-id my-unique-id \ --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn arn:aws:events:region:123456789012:rule/my-rule

    Beim vorhergehenden Befehl:

    • my-functionist der Name der Lambda-Funktion, die die Regel als Ziel verwenden soll.

    • my-unique-idist ein eindeutiger Bezeichner, den Sie definieren, um die Anweisung in der Lambda-Funktionsrichtlinie zu beschreiben.

    • source-arnist der ARN der EventBridge Regel.

    Wird der Befehl erfolgreich ausgeführt, erhalten Sie eine Ausgabe ähnlich der folgenden:

    { "Statement": "{\"Sid\":\"my-unique-id\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:events:us-west-2:123456789012:rule/my-rule\"}}}" }

    Der Statement-Wert ist eine JSON-Zeichenfolgenversion der Anweisung, die der Lambda-Funktionsrichtlinie hinzugefügt wurde.

  5. Nachdem Sie diese Anweisungen befolgt haben, fahren Sie mit Fügen Sie Ihrer Auto Scaling-Gruppe Lifecycle-Hooks hinzu fort.

Benachrichtigungen über Amazon SNS erhalten

Sie können Amazon SNS dazu verwenden, ein Benachrichtigungsziel (ein SNS-Thema) für den Empfang von Nachrichten im Falle einer Lebenszyklusaktion einzurichten. Amazon SNS sendet die Benachrichtigungen dann an die abonnierten Empfänger. Solange das Abonnement nicht bestätigt ist, werden keine Benachrichtigungen, die zum Thema veröffentlicht wurden, an die Empfänger gesendet.

Einrichten von Benachrichtigungen mithilfe von Amazon SNS
  1. Erstellen Sie ein Amazon SNS-Thema mithilfe der Amazon SNS Konsole oder dem folgenden create-topic-Befehl. Stellen Sie sicher, dass sich das Thema in derselben Region befindet wie die verwendete Auto-Scaling-Gruppe. Weitere Informationen finden Sie unter Erste Schritte mit Amazon SNS im Benutzerhandbuch für Amazon Simple Notification Service.

    aws sns create-topic --name my-sns-topic
  2. Notieren Sie den Amazon-Ressourcennamen (ARN) des Themas, zum Beispiel arn:aws:sns:region:123456789012:my-sns-topic. Sie benötigen ihn, um den Lebenszyklus-Hook zu erstellen.

  3. Erstellen Sie eine IAM-Servicerolle, um Amazon EC2 Auto Scaling Zugriff auf Ihr Amazon SNS-Benachrichtigungsziel zu gewähren.

    So gewähren Sie Amazon EC2 Auto Scaling Zugriff auf Ihr SNS-Thema

    1. Öffnen Sie unter https://console.aws.amazon.com/iam/ die IAM-Konsole.

    2. Wählen Sie im Navigationsbereich auf der linken Seite Roles (Rollen).

    3. Wählen Sie Rolle erstellen aus.

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

    5. Wählen Sie für Ihren Anwendungsfall unter Use cases for other AWS services (Anwendungsfälle für andere -Dienste), EC2 Auto Scaling (EC2 Auto Scaling) und dann EC2 Auto Scaling Notification Access (Zugriff auf EC2-Auto-Scaling-Benachrichtigungen) aus.

    6. Klicken Sie zweimal auf Next (Weiter), um zur Seite Name, review, and create (Benennen, überprüfen und erstellen) zu gelangen.

    7. Geben Sie für Role Name (Name der Rolle) einen Namen für Ihre Rolle ein (z. B. my-notification-role) und wählen Sie dann Create role (Rolle erstellen).

    8. Wählen Sie auf der Seite Roles (Rollen) die gerade erstellte Rolle aus, um die Seite Summary (Übersicht) zu öffnen. Notieren Sie sich den ARN der Rolle. Beispiel, arn:aws:iam::123456789012:role/my-notification-role. Sie benötigen ihn, um den Lebenszyklus-Hook zu erstellen.

  4. Nachdem Sie diese Anweisungen befolgt haben, fahren Sie mit Lifecycle-Hooks hinzufügen (AWS CLI) fort.

Benachrichtigungen über Amazon SQS erhalten

Sie können Amazon SQS dazu verwenden, ein Benachrichtigungsziel für den Empfang von Nachrichten im Falle einer Lebenszyklusaktion einzurichten. Ein Warteschlangen-Verbraucher muss dann eine SQS-Warteschlange abfragen, um auf diese Benachrichtigungen zu reagieren.

Wichtig

FIFO-Warteschlangen sind nicht kompatibel mit Lebenszyklus-Hooks.

Einrichten von Benachrichtigungen mithilfe von Amazon SQS
  1. Mit der Amazon SQS-Konsole erstellen Sie eine SQS-Warteschlange. Stellen Sie sicher, dass sich die Warteschlange in derselben Region befindet wie die von Ihnen verwendete Auto-Scaling-Gruppe. Weitere Informationen finden Sie unter Erste Schritte mit Amazon SQS im Benutzerhandbuch für Amazon Simple Queue Service.

  2. Notieren Sie den ARN der Warteschlange, z. B. arn:aws:sqs:us-west-2:123456789012:my-sqs-queue. Sie benötigen ihn, um den Lebenszyklus-Hook zu erstellen.

  3. Erstellen Sie eine IAM-Servicerolle, um Amazon EC2 Auto Scaling Zugriff auf Ihr Amazon SQS-Benachrichtigungsziel zu gewähren.

    So gewähren Sie Amazon EC2 Auto Scaling Zugriff auf Ihre SQS-Warteschlange

    1. Öffnen Sie unter https://console.aws.amazon.com/iam/ die IAM-Konsole.

    2. Wählen Sie im Navigationsbereich auf der linken Seite Roles (Rollen).

    3. Wählen Sie Rolle erstellen aus.

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

    5. Wählen Sie für Ihren Anwendungsfall unter Use cases for other AWS services (Anwendungsfälle für andere -Dienste), EC2 Auto Scaling (EC2 Auto Scaling) und dann EC2 Auto Scaling Notification Access (Zugriff auf EC2-Auto-Scaling-Benachrichtigungen) aus.

    6. Klicken Sie zweimal auf Next (Weiter), um zur Seite Name, review, and create (Benennen, überprüfen und erstellen) zu gelangen.

    7. Geben Sie für Role Name (Name der Rolle) einen Namen für Ihre Rolle ein (z. B. my-notification-role) und wählen Sie dann Create role (Rolle erstellen).

    8. Wählen Sie auf der Seite Roles (Rollen) die gerade erstellte Rolle aus, um die Seite Summary (Übersicht) zu öffnen. Notieren Sie sich den ARN der Rolle. Beispiel, arn:aws:iam::123456789012:role/my-notification-role. Sie benötigen ihn, um den Lebenszyklus-Hook zu erstellen.

  4. Nachdem Sie diese Anweisungen befolgt haben, fahren Sie mit Lifecycle-Hooks hinzufügen (AWS CLI) fort.

Benachrichtigungen weiterleiten an AWS Lambda direkt

Sie können eine Lambda-Funktion als Benachrichtigungsziel verwenden, wenn eine Lebenszyklusaktion auftritt.

Um Benachrichtigungen weiterzuleiten an AWS Lambda direkt
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die gewünschte Lambda-Funktion.

    Informationen zum Erstellen einer neuen Lambda-Funktion finden Sie unter So erstellen Sie die Lambda-Funktion:

  3. Wählen Sie die Registerkarte „Konfiguration“ und dann „Berechtigungen“.

  4. Scrollen Sie nach unten zur Resource-based Richtlinie und wählen Sie dann Berechtigungen hinzufügen aus. Eine ressourcenbasierte Richtlinie wird verwendet, um dem Prinzipal, der in der Richtlinie angegeben ist, Berechtigungen zum Aufrufen Ihrer Funktion zu erteilen. In diesem Fall wird der Prinzipal die serviceverknüpfte Amazon EC2 Auto Scaling-Rolle sein, die der Auto-Scaling-Gruppe zugeordnet ist.

  5. In der Richtlinienanweisung konfigurieren Sie Ihre Berechtigungen:

    1. Wählen Sie AWS-Konto.

    2. Für Prinzipal geben Sie den ARN der aufrufenden serviceverknüpften Rolle ein, z. B. arn:aws:iam::<aws-account-id>:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling.

    3. Wählen Sie für Aktion die Option Lambda: InvokeFunction aus.

    4. Für Anweisungs-ID geben Sie eine eindeutige Anweisungs-ID ein, wie z. B. AllowInvokeByAutoScaling.

    5. Wählen Sie Speichern.

  6. Nachdem Sie diese Anweisungen befolgt haben, fahren Sie mit Lifecycle-Hooks hinzufügen (AWS CLI) fort.

Beispiel für Benachrichtigungsnachricht

Dieser Abschnitt enthält ein Beispiel für eine Benachrichtigung für Amazon SNS, Amazon SQS und. AWS Lambda

Während sich die Instance im Wartestatus befindet, wird eine Nachricht an Amazon SNS, Amazon SQS und das Benachrichtigungsziel veröffentlicht. AWS Lambda

Die Nachricht enthält die folgenden Informationen:

  • Origin— Ein Ort, von dem eine EC2-Instance stammt.

  • Destination— Ein Ort, an den eine EC2-Instance gesendet wird.

  • LifecycleActionToken – Das Token der Lebenszyklusaktion

  • AccountId— Die AWS-Konto ID.

  • AutoScalingGroupName – Der Name der Auto-Scaling-Gruppe.

  • LifecycleHookName – Der Name des Lebenszyklus-Hooks.

  • EC2InstanceId – Die ID der EC2-Instance.

  • LifecycleTransition – Die Art des Lebenszyklus-Hooks.

  • NotificationMetadata – Die Benachrichtigungsmetadaten.

Im Folgenden finden Sie ein Beispiel für eine Benachrichtigungsmeldung.

Service: AWS Auto Scaling Time: 2021-01-19T00:36:26.533Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Origin: EC2 Destination: AutoScalingGroup LifecycleActionToken: 71514b9d-6a40-4b26-8523-05e7ee35fa40 AccountId: 123456789012 AutoScalingGroupName: my-asg LifecycleHookName: my-hook EC2InstanceId: i-0598c7d356eba48d7 LifecycleTransition: autoscaling:EC2_INSTANCE_LAUNCHING NotificationMetadata: hook message metadata

Beispiel für Benachrichtigungsnachricht testen

Wenn Sie zum ersten Mal einen Lebenszyklus-Hook hinzufügen, wird eine Testbenachrichtigung für das Benachrichtigungsziel veröffentlicht. Im Folgenden finden Sie ein Beispiel für eine Testbenachrichtigungsnachricht.

Service: AWS Auto Scaling Time: 2021-01-19T00:35:52.359Z RequestId: 18b2ec17-3e9b-4c15-8024-ff2e8ce8786a Event: autoscaling:TEST_NOTIFICATION AccountId: 123456789012 AutoScalingGroupName: my-asg AutoScalingGroupARN: arn:aws:autoscaling:us-west-2:123456789012:autoScalingGroup:042cba90-ad2f-431c-9b4d-6d9055bcc9fb:autoScalingGroupName/my-asg
Anmerkung

Beispiele für Ereignisse, die von Amazon EC2 Auto Scaling an übermittelt wurden EventBridge, finden Sie unterEreignis-Referenz für Amazon EC2 Auto Scaling.