Wie stoppe und starte ich Amazon-EC2-Instances in regelmäßigen Abständen mit Lambda?
Ich möchte meine Amazon-Elastic-Compute-Cloud-Instances (Amazon EC2) automatisch beenden und starten, um meine Amazon-EC2-Nutzung zu reduzieren.
Kurzbeschreibung
Verwende AWS Lambda und Amazon EventBridge, um EC2-Instances automatisch zu stoppen und zu starten.
Hinweis: Die folgende Lösung ist eine einfache Beispiellösung. Verwende für eine erweiterte Lösung den Instance Scheduler auf AWS. Weitere Informationen findest du unter Automatisieren des Startens und Stoppens von AWS-Instances.
Gehe wie folgt vor, um mit Lambda EC2-Instances in regelmäßigen Abständen zu stoppen und zu starten:
- Erstelle eine benutzerdefinierte AWS-Richtlinie für Identity and Access Management (IAM) und eine Ausführungsrolle für deine Lambda-Funktion.
- Erstelle Lambda-Funktionen, die deine EC2-Instances stoppen und starten.
- Teste deine Lambda-Funktion.
- Erstelle EventBridge-Zeitpläne, die die Funktion nach einem Zeitplan ausführen.
Manchmal stoppt eine Lambda-Funktion eine Instance und kann sie nicht erneut starten. Dies tritt auf, wenn ein Amazon Elastic Block Store (Amazon EBS)-Volume verschlüsselt ist und die Lambda-Rolle nicht autorisiert ist, den Verschlüsselungsschlüssel zu verwenden. Weitere Informationen findest du unter Erforderliche AWS-KMS-Schlüsselrichtlinie für die Verwendung mit verschlüsselten Volumes.
Lösung
Voraussetzung: Rufe die IDs der EC2-Instances ab, die du stoppen und starten möchtest.
Eine IAM-Richtlinie und eine Rolle für die Lambda-Funktion erstellen
Führe die folgenden Schritte aus:
-
Verwende den JSON-Richtlinieneditor, um eine IAM-Richtlinie zu erstellen. Gib das folgende JSON-Richtliniendokument in den Richtlinieneditor ein:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ] } -
Erstelle eine IAM-Rolle für Lambda.
Hinweis: Wenn du ein Amazon Elastic Block Store (Amazon EBS)-Volume verwendest, ist möglicherweise eine zusätzliche Konfiguration erforderlich. Wenn das Amazon EBS-Volume mit einem vom Kunden verwalteten AWS Key Management Service (AWS KMS)-Schlüssel verschlüsselt ist, füge der IAM-Richtlinie kms:CreateGrant hinzu.
Lambda-Funktionen erstellen, die deine EC2-Instances stoppen und starten
Führe die folgenden Schritte aus:
-
Öffne die Lambda-Konsole und wähle Funktion erstellen aus.
-
Wähle Autor von Grund auf neu.
-
Füge unter Grundinformationen die folgenden Informationen hinzu:
Gib unter Funktionsname einen Namen ein, der die Funktion beschreibt, z. B. StopEC2Instances oder StartEC2Instances.
Wähle für Runtime Python 3.9.
Erweitere unter Berechtigungen die Option Standardausführungsrolle ändern.
Wähle unter Ausführungsrolle die Option Bestehende Rolle verwenden aus.
Wähle unter Existierende Rolle die IAM-Rolle aus. -
Wähle Funktion erstellen aus.
-
Wähle die Registerkarte Code aus.
-
Gib auf der Registerkarte lambda_funciton.py unter Codequelle den folgenden Code in den Code-Editor für stop_instances ein:
import boto3 region = 'us-west-1' instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))Gib für start_instances den folgenden Code in den Code-Editor ein:
import boto3 region = 'us-west-1' instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.start_instances(InstanceIds=instances) print('started your instances: ' + str(instances))Hinweis: Ersetze us-west-1 durch die AWS-Region, in der sich deine Instances befinden, und InstanceIds durch die IDs der Instances, die du stoppen und starten möchtest.
-
Wähle Bereitstellen aus.
-
Wähle die Registerkarte Konfiguration, dann Allgemeine Konfiguration und dann Bearbeiten.
-
Stelle Timeout auf 10 Sekunden ein und wähle dann Speichern.
Lambda-Funktion testen
Führe die folgenden Schritte aus:
- Öffne die Lambda-Konsole und wähle dann Funktionen.
- Wähle eine der Funktionen aus.
- Wähle die Registerkarte Code aus.
- Wähle im Abschnitt Codequelle die Option Test aus.
- Wähle im Dialogfeld Testereignis konfigurieren die Option Neues Testereignis erstellen aus.
- Gib einen Ereignisnamen ein, und wähle dann Erstellen aus.
**Hinweis:**Ändere nicht den JSON-Code für das Testereignis. - Wähle Test aus, um die Funktion auszuführen.
- Wiederhole die Schritte 1-7 für die andere Funktion.
Status der Instances überprüfen
Amazon-EC2-Konsole
Überprüfe vor und nach dem Testen den Status der Instances, um sicherzustellen, dass die Funktionen funktionieren.
CloudTrail
Du kannst AWS CloudTrail auch verwenden, um dich zu vergewissern, dass die Lambda-Funktion die Instance gestoppt oder gestartet hat.
Führe die folgenden Schritte aus:
- Öffne die CloudTrail-Konsole.
- Wähle im Navigationsbereich die Option Ereignisverlauf aus.
- Wähle in der Dropdown-Liste Suchattribute die Option Ereignisname aus.
- Gib in der Suchleiste StopInstances ein, um die Ergebnisse zu überprüfen. Gib dann StartInstances ein.
Wenn es keine Ergebnisse gibt, hat die Lambda-Funktion die EC2-Instances nicht gestoppt oder gestartet.
Erstellen von EventBridge-Regeln, die die Lambda-Funktionen ausführen
Führe die folgenden Schritte aus:
- Öffne die EventBridge-Konsole.
- Wähle Regel erstellen aus.
- Gib einen Namen für die Regel ein, z. B. StopEC2Instances oder StartEC2Instances.
- (Optional) Gib unter Beschreibung eine Beschreibung für die Regel ein.
- Wähle als Regeltyp die Option Zeitplan und dann die Option Weiter im EventBridge-Scheduler aus.
- Wähle unter Zeitplanmuster für Vorkommen die Option Wiederkehrender Zeitplan aus.
- Wähle als Zeitplantyp entweder Rate-basierter Zeitplan oder Cron-basierter Zeitplan aus und führe dann einen der folgenden Schritte aus:
Gib für den Rate-basierten Zeitplan einen Ratenwert ein, und wähle dann ein Zeitintervall in Minuten, Stunden oder Tagen aus.
-oder-
Gib für einen Cron-basierten Zeitplan einen Ausdruck ein, der Lambda mitteilt, wann deine Instance gestoppt oder gestartet werden muss.
**Hinweis:**Cron-Ausdrücke werden in UTC ausgewertet. Stelle sicher, dass du den Ausdruck für deine bevorzugte Zeitzone anpasst. - Wähle auf der Seite Ziele auswählen die Lambda-Funktion aus der Dropdown-Liste Ziel aus.
- Wähle als Funktion die Funktion aus, die deine Instances stoppt oder startet.
- Wähle Zur Überprüfung und Erstellung überspringen und dann Erstellen.
Hinweis: Du kannst auch Regeln erstellen, die auf Ereignisse in deinem AWS-Konto reagieren.
Ähnliche Informationen
Tutorial: Eine geplante EventBridge-Regel für AWS Lambda-Funktionen erstellen
- Themen
- ServerlessCompute
- Tags
- AWS Lambda
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 3 Jahren
AWS OFFICIALAktualisiert vor 4 Monaten
AWS OFFICIALAktualisiert vor 2 Jahren