Wie verzögere ich die Beendigung einer fehlerhaften Amazon EC2-Instance, damit ich Probleme beheben kann?
Meine Amazon Elastic Compute Cloud (Amazon EC2)-Instance ist fehlerhaft und wurde beendet, bevor ich die Ursache des Problems ermittelt habe.
Kurzbeschreibung
Um eine fehlerhafte EC2-Instance vor der Beendigung zu beheben, fügen Sie einen Amazon EC2 Auto Scaling-Lifecycle-Hook hinzu, um den Status der Instance von Terminating auf Terminating:Wait zu verschieben.
Standardmäßig verbleibt eine Instance 3,600 Sekunden (1 Stunde) im Status Terminating:Wait. Um diese Zeit zu verlängern, verwenden Sie den Parameter heartbeat-timeout im API-Aufruf put-lifecycle-hook. Die maximale Zeit, für die Sie eine Instance im Status Terminating:Wait belassen können, beträgt 48 Stunden oder das 100-fache des Heartbeat-Timeouts, je nachdem, welcher Wert kleiner ist.
Lösung
Verwenden Sie die AWS-Befehlszeilenschnittstelle (AWS CLI), um einen Lifecycle-Hook zu konfigurieren.
**Hinweis:**Wenn Sie beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhalten, finden Sie weitere Informationen unter Beheben von AWS CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.
Erstellen Sie ein Amazon-SNS-Thema
Gehen Sie wie folgt vor, um ein Amazon Simple Notification Service (Amazon SNS) -Thema zu erstellen:
-
Erstellen Sie ein SNS-Thema, in dem die EC2 Auto Scaling-Gruppe Lebenszyklusbenachrichtigungen sendet. Im folgenden Beispiel wird der Befehl create-topic aufgerufen, um das Thema ASNotifications zu erstellen:
$ aws sns create-topic --name ASNotifications
Die Ausgabe gibt einen ARN zurück, der dem folgenden ähnelt:
"TopicArn": "arn:aws:sns:us-west-2:123456789012:ASNotifications"
-
Erstellen Sie ein Abonnement für das Thema. Sie müssen über ein Abonnement verfügen, um das LifecycleActionToken zu erhalten, das erforderlich ist, um das Heartbeat-Timeout des Status „Ausstehend“ zu verlängern oder die Lifecycle-Aktion abzuschließen. Im folgenden Beispiel wird mit dem Befehl subscribe ein Abonnement erstellt, das das E-Mail-Protokoll (SMTP) mit der Endpunkt-E-Mail-Adresse user@amazon.com verwendet:
$ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --protocol email --notification-endpoint user@amazon.com
IAM-Berechtigungen konfigurieren
Konfigurieren Sie eine AWS Identity and Access Management (IAM) -Rolle, die dem EC2 Auto Scaling-Gruppenservice Berechtigungen zum Senden an das SNS-Thema erteilt. Um diese Aufgabe abzuschließen, erstellen Sie eine Textdatei, die die entsprechende Richtlinie enthält. Verweisen Sie dann im Befehl create-role auf die Datei.
-
Verwenden Sie einen Texteditor (wie etwa vi), um die Textdatei zu erstellen:
$ sudo vi assume-role.txt
-
Geben Sie die folgenden Informationen in die Textdatei ein, und speichern Sie dann die Datei:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "autoscaling.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Verwenden Sie den Befehl aws iam create-role, um die IAM-Rolle AS-Lifecycle-Hook-Role anhand der in assume-role.txt gespeicherten Richtlinie zu erstellen:
$ aws iam create-role --role-name AS-Lifecycle-Hook-Role --assume-role-policy-document file://assume-role.txt
Die Ausgabe enthält den ARN der Rolle. Notieren Sie sich den ARN sowohl der IAM-Rolle als auch des SNS-Themas.
-
Fügen Sie der Rolle Berechtigungen hinzu, damit EC2 Auto Scaling SNS-Benachrichtigungen senden kann, wenn ein Lifecycle-Hook-Ereignis eintritt. Im folgenden Beispiel wird der Befehl attach-role-policy verwendet, um die verwaltete Richtlinie AutoScalingNotificationAccessRole an die IAM-Rolle AS-Lifecycle-Hook-Role anzuhängen:
$ aws iam attach-role-policy --role-name AS-Lifecycle-Hook-Role --policy-arn arn:aws:iam::aws:policy/service-role/AutoScalingNotificationAccessRole
Die vorherige verwaltete Richtlinie gewährt die folgenden Berechtigungen:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "sqs:SendMessage", "sqs:GetQueueUrl", "sns:Publish" ] } ] }
**Wichtig:**Die von AWS verwaltete Richtlinie AutoscalingNotificationAccessRole ermöglicht es EC2 Auto Scaling, Anrufe an alle SNS-Themen und Warteschlangen zu tätigen. Verwenden Sie die folgende Beispielrichtlinie, um den Zugriff von EC2 Auto Scaling auf bestimmte SNS-Themen oder Warteschlangen einzuschränken.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "arn:aws:sns:us-west-2:123456789012:ASNotifications", "Action": [ "sqs:SendMessage", "sqs:GetQueueUrl", "sns:Publish" ] } ] }
Den Lebenszyklus-Hook konfigurieren
Verwenden Sie als Nächstes den Befehl put-lifecycle-hook, um den Lebenszyklus-Hook zu konfigurieren:
aws autoscaling put-lifecycle-hook --lifecycle-hook-name AStroubleshoot --auto-scaling-group-name MyASGroup --lifecycle-transition autoscaling:EC2_INSTANCE_TERMINATING --notification-target-arn arn:aws:sns:us-west-2:123456789012:ASNotifications --role-arn arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role
**Hinweis:**Ersetzen Sie die Beispielwerte durch Ihren EC2 Auto Scaling-Gruppennamen, den SNS-Ziel-ARN und den IAM-Rollen-ARN.
Der Befehl put-lifecycle-hook vervollständigt die folgenden Funktionen:
- Benennt den Lebenszyklus-Hook (AStroubleshoot)
- Identifiziert die EC2 Auto Scaling-Gruppe, die dem Lebenszyklus-Hook zugeordnet ist (MyASGroup)
- Konfiguriert den Hook für die Lebenszyklusphase der Instance-Beendigung (EC2_INSTANCE_TERMINATING)
- Legt den ARN des SNS-Themas fest (arn:aws:sns:us-west-2:123456789012:ASNotifications)
- Legt den ARN der IAM-Rolle fest (arn:aws:iam::123456789012:role/AS-Lifecycle-Hook-Role)
Testen Sie den Lebenszyklus-Hook
Um den Lifecycle-Hook zu testen, wählen Sie zunächst eine Instance aus. Führen Sie in AWS CLI den Befehl terminate-instance-in-auto-scaling-group aus, um die Instance zu beenden. Nachdem die Instance in den Status Terminating:Wait übergegangen ist, führen Sie den Befehl record-lifecycle-action-heartbeat aus, um die Instance in diesem Zustand zu belassen. Oder führen Sie den Befehl complete-lifecycle-action aus, um die Kündigung abzuschließen:
aws autoscaling complete-lifecycle-action --lifecycle-hook-name my-lifecycle-hook --auto-scaling-group-name MyASGroup --lifecycle-action-result CONTINUE --instance-id i-0e7380909ffaab747
Ähnliche Informationen
Amazon EC2 Auto Scaling-Lebenszyklus-Hooks
Eine Rolle erstellen, um Berechtigungen an einen AWS-Dienst zu delegieren
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren