Gibt es eine einfache Möglichkeit, AWS EC2-Instanzen täglich zu einer bestimmten Zeit zu starten und zu stoppen? Dies könnte mir eine Menge Geld für meine Entwicklungs- und Testserver sparen.
Gibt es eine einfache Möglichkeit, AWS EC2-Instanzen täglich zu einer bestimmten Zeit zu starten und zu stoppen? Dies könnte mir eine Menge Geld für meine Entwicklungs- und Testserver sparen.
Aktualisieren
AWS hat ein Tool namens " Instance Scheduler " veröffentlicht, das eine vollständige Konfigurationsanleitung enthält, die von dieser Seite aus verlinkt ist. Es scheint eine Erweiterung des EC2-Schedulers zu sein, den ich unten beschreibe, mit ein paar weiteren Funktionen, aber es ist im Wesentlichen dasselbe.
Die nachstehende Anleitung wird weiterhin funktionieren, aber es ist wahrscheinlich besser, sich den Instanzplaner für Neuinstallationen anzusehen.
Ursprünglicher Beitrag
AWS verfügt über ein Tool namens EC2 Scheduler , mit dem Sie das Starten und Stoppen von EC2-Instanzen sehr flexibel steuern können.
Mit dem Tool können Sie beim Einrichten des Tools Standardstart- und -stoppzeiten definieren, die Sie später ändern können. Sie können auswählen, welche Instanzen gesteuert werden, und Sie können mithilfe von Tags unterschiedliche Start- und Stoppzeiten für jede Instanz angeben.
Obwohl es ein großartiges Tool ist, ist die Dokumentation etwas vage und verwirrend. Es ist, als ob die Dokumentation von einem Ingenieur geschrieben wurde, der das Tool geschrieben hat und alles darüber weiß, anstatt von einem technischen Redakteur.
Hinweis : Wenn Sie Feedback oder Korrekturen haben, sind Kommentare willkommen. Wenn Sie eine Frage haben, die auf dieser basiert, beginnen Sie bitte Ihre eigene Frage.
Was ist EC2 Scheduler?
Dieses Tool ist eine Lambda-Funktion, die mit Cloudwatch Events und DynamoDB zusammenarbeitet. Die Bereitstellung erfolgt mithilfe einer Cloudformation-Vorlage, die auch die erforderlichen IAM-Rollen und -Richtlinien einrichtet. Über die Architektur können Sie hier lesen .
Einsatz
Beginnen Sie, indem Sie auf diese Seite gehen und auf "Lösung starten" klicken. Im Moment ist der direkte Link hier , aber es könnte sich ändern.
Wählen Sie oben in der Konsole die Region aus, in der die Ressourcen bereitgestellt werden sollen. Das Skript steuert EC2-Instanzen in jeder Region, wird jedoch in einer Region ausgeführt.
Kennzeichnen von EC2-Instanzen
Dies wird in der Dokumentation hier behandelt , aber es ist nicht so einfach, wie es sein könnte.
Sie steuern, welche Instanzen gestartet und gestoppt werden, indem Sie Ihre Instanzen markieren.
Im einfachsten Fall müssen Sie jede EC2-Instanz kennzeichnen, die gemäß dem Zeitplan gestartet und gestoppt werden soll. Suchen Sie dazu Ihre EC2-Instanz in der Konsole, klicken Sie auf Tags und erstellen Sie dieses Tag
So aktivieren Sie das Kopieren und Einfügen:
Wenn Sie möchten, dass eine bestimmte Instanz nach einem anderen Zeitplan gestartet und gestoppt wird, fügen Sie dem Tag-Schlüssel und dem Wert zusätzliche Informationen hinzu. Wenn Sie beispielsweise möchten, dass eine Instanz um 1500 UTC beginnt und am Dienstag, Donnerstag und Freitag um 2400 UTC endet, geben Sie Folgendes ein.
Schlüssel: Scheduler: ec2-startstop: late Wert: 1500; 2400; utc; Di, Do, Fr
Beachten Sie, dass das Wort "spät" eine beliebige Zeichenfolge sein kann, "spät" hat keine besondere Bedeutung.
Mit diesem Tool können Sie UTC in Ihre Ortszeit umrechnen .
Mit dem Tag-Editor können Sie Tag- Masseninstanzen erstellen. Auf diese Weise können Sie leichter Bulk-Tags einrichten, die nützlich sein können, wenn Sie unterschiedliche Einstellungen für Entwickler, Test und Produktion vornehmen möchten. Ich bezweifle, dass Sie dies für die Produktion verwenden würden.
CloudFormation-Parameter
Wenn Sie die CloudFormation-Vorlage ausführen, müssen Sie viele Parameter eingeben. Die meisten können Sie standardmäßig belassen. Hier sind einige der wichtigsten Parameter
Berechtigungen, Richtlinien und Rollen
Der Abschnitt Berechtigungen / IAM-Rolle in der CloudFormation-Vorlage ist ein roter Faden - das heißt, er ist weitgehend irrelevant. Es gibt nur die Rolle an, die zum Ausführen des CloudFormation-Skripts verwendet wird. Es spielt keine Rolle für die erstellten Ressourcen oder die Rolle, die beim Ausführen der Lambda-Funktion verwendet wird. Rückblickend ist das klar, aber es war mir nicht klar, als ich anfing.
Unabhängig von der Rolle, in der Sie dieses Skript ausführen, werden in IAM die gleichen Rollen- und Inline-Berechtigungen erstellt. Die Lambda-Funktion wird mit einer vom Skript erstellten "ec2-Scheduler-Rolle" ausgeführt.
Ich habe meine Richtlinien unten aufgeführt, falls sie für jemanden hilfreich sind.
CloudWatch-Ereignisse und -Metriken
Wenn Sie Protokolle Ihrer Lambda-Funktion anzeigen möchten, wechseln Sie zu Cloudwatch Events. Die Protokollierung ist ziemlich gut. Es gibt auch Metriken, sodass Sie sehen können, wann es ausgeführt wird, wie lange es dauert usw.
Zusätzlich
Der Code für die Lambda-Funktion ist auf Github verfügbar .
Richtlinien
Diese sind im Allgemeinen nicht erforderlich, könnten aber für jemanden sein, also werde ich sie einschließen.
Richtlinie für die IAM-Rolle
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:DeleteRole",
"dynamodb:*",
"lambda:*",
"SNS:Publish",
"events:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "S3:GetObject",
"Resource": [
"arn:aws:s3:::solutions-us-west-2",
"arn:aws:s3:::solutions-us-west-2/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012"
]
}
]
}
Vertrauensrichtlinie für die IAM-Rolle
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Wenn Sie Instanzen nur starten und stoppen möchten, verwenden Sie den Lambda-Service. Es wird davon ausgegangen, dass Sie eine bestimmte Instanz-ID steuern möchten. Sie können mehrere Instanzen steuern, indem Sie mehrere durch Komma getrennte IDs hinzufügen. (Bsp .: "i-3453453", "i-45656745"). Sie finden die ID Ihrer Instanz im Abschnitt Instanzen der AWS-Konsole.
In der Lambda-Konsole
Code unten
Code unten
Denken Sie daran, die Regions- und Instanzwerte durch Ihre eigenen zu ersetzen.
Code unten
Planen Sie die Funktionen
Hier erstellen Sie ein CloudWatch-Ereignis, das nachts Ihre Lambda-Funktion auslöst
Hinweis: Cron-Ausdrücke werden in UTC ausgewertet. Stellen Sie sicher, dass Sie den Ausdruck für Ihre bevorzugte Zeitzone anpassen. Hier ist ein Beispiel, das die Funktion jeden Tag um 08:00 Uhr (GMT / UTC) ausführt:
Um Ihre Instanzen am Morgen neu zu starten, wiederholen Sie diese Schritte und verwenden Sie Ihre bevorzugte Startzeit. Wenn Sie eine E-Mail-Nachricht senden möchten, wenn die Funktionen fehlschlagen, können Sie ein SNS-Thema einrichten und das Senden dieser Nachricht unter Debuggen im Fenster zur Erstellung von Lmbda-Funktionen konfigurieren.
Die Quelle für all dies finden Sie hier: AWS-Dokumentation
quelle