Puisqu'il existe un grand nombre d'instances EC2 que j'utilise habituellement pour le développement et les tests, j'utilise cron pour planifier le démarrage et l'arrêt des instances, et je les utilise au coût le plus bas possible. Je n'ai pas du tout touché à AWS Lambda, j'ai donc pensé que c'était une bonne opportunité de migrer à partir du lot cron, j'ai donc apporté quelques modifications pour AWS Lambda, donc je vais l'exposer.
** "Je souhaite démarrer l'instance utilisée pour le développement, etc. uniquement pendant les heures ouvrables" **, ** "Je souhaite la démarrer régulièrement uniquement un jour spécifique" ** Pour définir l'instance, placez simplement la balise écrite dans le fichier de paramètres dans la balise de l'instance et supprimez la balise pour la libérer.
Puisque les bibliothèques boto et pytz sont nécessaires, installez-les dans la même couche que ec2_scheduler.py.
$ pip install boto -t path/to/ec2_scheduler/
$ pip install pytz -t path/to/ec2_scheduler/
Seules les instances avec les mêmes balises que la clé de balise et la valeur de balise dans le fichier de paramètres sont planifiées pour être exécutées. Si vous souhaitez arrêter l'exécution de la planification, supprimez simplement la balise.
Les éléments de réglage sont les suivants (le nom du fichier peut être modifié)
schedule.cfg
[Develop]
region: ap-northeast-1 <=Région
type: daily <=Type d'exécution(Puisqu'il n'y a que du quotidien, c'est comme ça)
tag-key: AWS-Schedule <=Nom de la balise d'instance
tag-value: Dev-Weekday <=Valeur de la balise
start: 9:00 <=Commencez
stop: 19:00 <=Arrêtez
skip: saturday, sunday <=Spécifiez le jour à sauter par jour
timezone: Asia/Tokyo <=Spécification du fuseau horaire
↓ Plusieurs programmes peuvent être définis dans le fichier de configuration
[TestServer]
region: ap-northeast-1
...
...
lambda_function.py
# -*- coding: utf-8 -*-
from ec2_scheduler import EC2Scheduler
def lambda_handler(event, context):
access_id = 'ID d'accès AWS'
secret_key = 'Clé secrète AWS'
conf = 'schedule.cfg'
schedule = EC2Scheduler(access_id=access_id, secret_key=secret_key, conf=conf)
schedule.job()
Une fois que la fonction Lambda est prête, compresser le fichier préparé. (Exécuter dans le même répertoire)
cd path/to/ec2_scheduler
zip -r ec2_scheduler.zip .
Créer une nouvelle fonction Lambda dans AWS Lambda dans AWS Management Console [Lambda] ** Sélectionnez [Créer une fonction Lambda] -> [Python2.7] -> [lambda canary] ** [Configure event sources] ** Sélectionnez [Type de source d'événement] -> [CloudWatch Events --Schedule] ** ** Saisissez un nom dans [Nom de la règle] ** selon le cas ** Sélectionnez le calendrier d'exécution avec [Expression de planification] ** [Configure function] Un nom approprié pour ** [Nom] ** [Runtime] -> [Python 2.7] ** Téléchargez le fichier zip préparé à l'avance avec [Code de fonction Lambda] -> [Télécharger un fichier .ZIP] ** Mettez le nom du gestionnaire dans ** [Handler \ *] ** ("lambda_function.lambda_handler" dans l'exemple) [Role] -> [Basic execution role] ** [Paramètres avancés] ** Définissez les paramètres appropriés
Le reste doit être créé avec ** [Créer une fonction] **
Après avoir créé la fonction Lambda, vérifiez-la avec Test. Le test doit être réussi, il vous suffit donc de définir le ScheduleEvent défini précédemment dans ** [Event source] ** sur ** State Enabled **.