Da es eine große Anzahl von EC2-Instanzen gibt, die ich normalerweise für Entwicklung und Test verwende, verwende ich cron, um den Start und Stopp von Instanzen zu planen und sie zu möglichst geringen Kosten zu verwenden. Ich habe AWS Lambda überhaupt nicht berührt, daher dachte ich, es sei eine gute Gelegenheit, von der Cron-Charge zu migrieren. Deshalb habe ich einige Änderungen für AWS Lambda vorgenommen, damit ich sie offenlegen kann.
** "Ich möchte die für die Entwicklung usw. verwendete Instanz nur während der Geschäftszeiten starten" **, ** "Ich möchte sie regelmäßig nur an einem bestimmten Tag starten" **. Um die Instanz festzulegen, fügen Sie einfach das in die Einstellungsdatei geschriebene Tag in das Tag der Instanz ein und löschen Sie das Tag, um es freizugeben.
Da die Bibliotheken boto und pytz erforderlich sind, installieren Sie sie auf derselben Ebene wie ec2_scheduler.py.
$ pip install boto -t path/to/ec2_scheduler/
$ pip install pytz -t path/to/ec2_scheduler/
Es ist geplant, dass nur Instanzen ausgeführt werden, die dieselben Tags wie Tag-Key und Tag-Wert in der Einstellungsdatei haben. Wenn Sie die Zeitplanausführung stoppen möchten, löschen Sie einfach das Tag.
Die Einstellungselemente sind wie folgt (Dateiname kann geändert werden)
schedule.cfg
[Develop]
region: ap-northeast-1 <=Region
type: daily <=Ausführungsart(Da es nur täglich gibt, ist es so wie es ist)
tag-key: AWS-Schedule <=Name des Instanz-Tags
tag-value: Dev-Weekday <=Tag-Wert
start: 9:00 <=Anlaufen
stop: 19:00 <=Halt
skip: saturday, sunday <=Geben Sie den Tag an, der nach Tag übersprungen werden soll
timezone: Asia/Tokyo <=Zeitzonenspezifikation
↓ Sie können mehrere Zeitpläne in der Einstellungsdatei festlegen
[TestServer]
region: ap-northeast-1
...
...
lambda_function.py
# -*- coding: utf-8 -*-
from ec2_scheduler import EC2Scheduler
def lambda_handler(event, context):
access_id = 'AWS Access ID'
secret_key = 'AWS geheimer Schlüssel'
conf = 'schedule.cfg'
schedule = EC2Scheduler(access_id=access_id, secret_key=secret_key, conf=conf)
schedule.job()
Wenn Sie die Lambda-Funktion bereit haben, komprimieren Sie die vorbereitete Datei. (Im selben Verzeichnis ausführen)
cd path/to/ec2_scheduler
zip -r ec2_scheduler.zip .
Erstellen Sie eine neue Lambda-Funktion in AWS Lambda in der AWS Management Console [Lambda] ** Wählen Sie [Lambda-Funktion erstellen] -> [Python2.7] -> [Lambda-Kanarienvogel] ** [Configure event sources] ** Wählen Sie [Ereignisquellentyp] -> [CloudWatch-Ereignisse - Zeitplan] ** ** Geben Sie gegebenenfalls einen Namen in [Regelname] ** ein ** Wählen Sie den Ausführungszeitplan mit [Zeitplanausdruck] aus ** [Configure function] Ein passender Name für ** [Name] ** [Runtime] -> [Python 2.7] ** Laden Sie die zuvor vorbereitete Zip-Datei mit [Lambda-Funktionscode] hoch -> [ZIP-Datei hochladen] ** Geben Sie den Handlernamen in ** [Handler \ *] ** ein (im Beispiel "lambda_function.lambda_handler"). [Role] -> [Basic execution role] ** [Erweiterte Einstellungen] ** Nehmen Sie die entsprechenden Einstellungen vor
Der Rest sollte mit ** [Funktion erstellen] ** erstellt werden
Überprüfen Sie die Lambda-Funktion nach dem Erstellen mit Test. Der Test sollte erfolgreich sein. Sie müssen also nur das zuvor in ** [Ereignisquelle] ** festgelegte ScheduleEvent auf ** Status aktiviert ** setzen.