[PYTHON] J'ai essayé de réduire les coûts en démarrant / arrêtant EC2 dans un lot avec AWS Lambda

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.

Ce que tu peux faire

** "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.

Préparation

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
...
...

Préparer la fonction Lambda à exécuter

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 .

Paramètres AWS Lambda

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 **.

Recommended Posts

J'ai essayé de réduire les coûts en démarrant / arrêtant EC2 dans un lot avec AWS Lambda
J'ai essayé d'utiliser Twitter Scraper avec AWS Lambda et cela n'a pas fonctionné.
J'ai essayé d'obtenir une AMI en utilisant AWS Lambda
Je veux AWS Lambda avec Python sur Mac!
J'ai essayé de lancer le cluster ipython au minimum sur AWS
xgboost (python) sur l'environnement d'instance EC2 Spot préparé par AWS Lambda
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
J'ai essayé de supprimer régulièrement les mauvais tweets avec l'API AWS Lambda + Twitter
J'ai essayé d'informer le serveur Zabbix d'une erreur d'exécution de la fonction AWS Lambda
J'ai créé un robot pour publier sur Twitter en grattant sur le Web un site dynamique avec AWS Lambda (suite)
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Ce que j'ai trouvé en déployant Django sur EC2
J'ai essayé d'obtenir une image en grattant
J'ai essayé de connecter AWS Lambda à d'autres services
J'ai essayé de classer les boules de dragon par adaline
Je voulais utiliser la feuille de calcul Google avec AWS lambda, alors je l'ai essayé [Partie 2]
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
Comment configurer Layer sur Lambda à l'aide d'AWS SAM
[AWS EC2] Comment installer Maven sur Amazon Linux 2
AWS Lambda prend désormais en charge Python, je l'ai donc essayé
J'ai essayé d'installer scrapy sur Anaconda et je n'ai pas pu
[Introduction à AWS] J'ai essayé de jouer avec la conversion voix-texte ♪
J'ai essayé de résumer les langues que les débutants devraient désormais apprendre par but
J'ai essayé de déboguer.
J'ai essayé AWS Iot
Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
[AWS] J'ai essayé d'utiliser EC2, RDS, Django. Construction de l'environnement à partir de 1
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
J'ai essayé d'utiliser "Syncthing" pour synchroniser des fichiers sur plusieurs PC
[Introduction à la simulation] J'ai essayé de jouer en simulant une infection corona ♬
[Django] J'ai essayé d'implémenter des restrictions d'accès par héritage de classe.
[Introduction à Pandas] J'ai essayé d'augmenter les données d'échange par interpolation de données ♬
J'ai essayé de classer MNIST par GNN (avec PyTorch géométrique)
[AWS EC2] Paramètres que vous souhaitez effectuer sur Amazon Linux 2
Création d'un environnement pour exécuter des programmes Python sur AWS EC2
J'ai essayé de classer la musique en majeur / mineur sur Neural Network
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
[Python] Permet d'importer les packages pip3 sur AWS Lambda
Exemple de script pour surveiller la charge moyenne avec CloudWatch sur AWS EC2