Comment utiliser CloudFormation pour arrêter et démarrer mes instances à des heures prédéfinies ?

Date de la dernière mise à jour : 23/09/2021

Je souhaite réduire mon utilisation d'Amazon Elastic Compute Cloud (Amazon EC2) en arrêtant et en démarrant mes instances à des heures prédéfinies.

Brève description

Vous pouvez utiliser AWS Instance Scheduler et un modèle AWS CloudFormation automatisé pour arrêter et démarrer vos instances en fonction d'une planification. Pour plus d'informations, consultez Déploiement automatisé.

Important : si vous utilisez Instance Scheduler pour les instances EC2 avec un Amazon Elastic Block Store (Amazon EBS) chiffré, alors vos instances ne peuvent pas être démarrées. Pour démarrer vos instances, vous devez octroyer à Instance Scheduler un rôle d'utilisateur clé avec une politique de clé pour chiffrer ou déchiffrer vos volumes EBS. Vous devez ajouter la politique de clé à la clé AWS Key Management Service (AWS KMS) pour permettre au rôle d'utilisateur clé d'utiliser cette clé.

Solution

Créer une pile AWS CloudFormation avec le modèle d'Instance Scheduler

La pile déploie une fonction AWS Lambda, une table Amazon DynamoDB, un événement Amazon CloudWatch Events et des métriques personnalisées Amazon CloudWatch.

1.    Ouvrez la console de gestion AWS.

2.    Ouvrez CloudFormation avec le modèle d'Instance Scheduler. Ou passez à l'étape 1. Lancez la page Pile Instance Scheduler, puis choisissez Launch Solution (Lancer la solution).

Remarque : par défaut, le modèle est lancé dans la région Virginie du Nord.

3.    Dans la barre de navigation, sélectionnez la région AWS dans laquelle vous souhaitez lancer votre pile avec le modèle, puis choisissez Next (Suivant).

4.    Dans Stack name (Nom de la pile), saisissez Ec2instanceScheduler.

5.    Dans Frequency (Fréquence), choisissez une fréquence en minute pour exécuter votre planificateur. Par exemple : 5 minutes

Remarque : la fréquence correspond au nombre de minutes qui s'écoule avant qu'Amazon CloudWatch Events ne déclenche à nouveau la fonction Lambda pour Instance Scheduler. Si vous avez un grand nombre d'instances, utilisez la fréquence la plus élevée possible pour éviter une limitation. Si la fréquence n'est pas assez rapide pour vous, vous pouvez ajuster la propriété Frequency (Fréquence) ultérieurement.

6.    Pour Enable CloudWatch Logs (Activer CloudWatch Logs), choisissez Yes (Oui).

7.    Pour Started tags (Balises démarrées), saisissez state=started.

8.    Pour Stopped tags (Balises arrêtées), saisissez state=stopped.

9.    Sélectionnez Next (Suivant).

10.    Sur la page Options, choisissez Next (Suivant).

11.    Vérifiez vos paramètres, puis sélectionnez I acknowledge that AWS CloudFormation might create IAM resources (J'accepte qu'AWS CloudFormation crée des ressources IAM).

12.    Choisissez Create (Créer).

Créer les périodes

L'exemple suivant illustre comment créer des instances qui :

  • démarrent à 9 h et s’arrêtent à 17 h du lundi au vendredi ;
  • démarrent à 9 h et s’arrêtent à 12 h le samedi.

Dans cet exemple, vous devez créer deux périodes. Pour votre propre scénario, créez le nombre de périodes approprié.

1.    Connectez-vous à l'interface de ligne de commande (CLI) d'Instance Scheduler, puis exécutez la commande suivante :

$ scheduler-cli create-period --stack Ec2instanceScheduler --region us-west-2 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri
$ scheduler-cli create-period --stack Ec2instanceScheduler --region us-west-2 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

Remarque : remplacez us-west-2 par votre propre région. Pour créer des périodes, vous pouvez également utiliser la console DynamoDB ou des ressources personnalisées. Pour plus d'informations sur les périodes, consultez Heures de démarrage et d'arrêt.

2.    Ouvrez la console DynamoDB.

3.    Choisissez Tables, puis la table de configuration.

Remarque : le modèle d'Instance Scheduler crée automatiquement deux tables DynamoDB : la table d'état et la table de configuration. La table d'état enregistre l'état des instances arrêtées et démarrées par le modèle. La table de configuration est l'endroit où vous spécifiez les périodes et faites vos planifications en fonction de vos besoins.

4.    Choisissez l'affichage Items (Éléments), puis vérifiez que les périodes mon-fri-9-5 et sat-9-12 apparaissent bien dans la table de configuration.

Créer une planification

1.    Pour créer une planification qui combine les deux périodes, connectez-vous à l'interface de ligne de commande du planificateur d’instance, puis exécutez la commande suivante :

$ scheduler-cli create-schedule --stack Ec2instanceScheduler --name m-f9-5-sat9-12 --region us-west-2 --periods mon-fri-9-5,sat-9-12 --timezone America/New_York

2.    Ouvrez la console DynamoDB.

3.    Choisissez Tables, puis la table de configuration.

4.    Choisissez l'affichage Items (Éléments), puis vérifiez que la planification m-f9-5-sat9-12 apparaît bien dans la table de configuration.

Étiqueter et tester la planification

Lorsque vous utilisez une pile CloudFormation avec Instance Scheduler, vous devez définir le paramètre TagName d'Instance Scheduler. La valeur par défaut de ce paramètre est Schedule (Planification). Vous pouvez utiliser le paramètre TagName (Nom de balise) dans votre pile pour rechercher la valeur de Schedule (Planification).

Instance Scheduler contrôle les identifications sur les instances. Si la clé d'identification d'instance correspond à l'identification du planificateur définie, alors Instance Scheduler applique la planification définie pour la valeur d'identification d'instance. Par exemple, la clé d'une balise est définie sur Schedule et la valeur sur m-f9-5-sat9-12. Dans cet exemple, les instances démarrent à 9 h et s’arrêtent à 17 h du lundi au vendredi. Les instances démarrent aussi à 9 h et s’arrêtent à 12 h le samedi.

Remarque : Les clés et valeurs de balise sont sensibles à la casse. Instance Scheduler n'arrête pas une instance en cours d'exécution si elle est démarrée manuellement en dehors de la période d'exécution. Instance Scheduler ne démarre pas non plus une instance si elle a été arrêtée manuellement pendant la période d'exécution, à moins que la planification ne soit enforced (appliquée). Pour plus d'informations, consultez la section Définitions de planification.

Utilisation de planifications prédéfinies

Outre les planifications personnalisées, vous pouvez également utiliser n'importe laquelle des planifications prédéfinies du tableau de configuration. Par exemple, voici comment tester la planification prédéfinie nommée running :

1.    Ouvrez la console Amazon EC2.

2.    Choisissez les instances arrêtées que vous souhaitez baliser.

3.    Choisissez l'affichage Tags (Balises), puis Manage Tags (Gérer les balises).

4.    Sélectionnez Add Tag (Ajouter une balise).

5.    Pour Key (Clé), saisissez Schedule (Planification).

6.    Pour Value (Valeur), saisissez running (en cours d'exécution).

7.    Choisissez Enregistrer.

8.    Actualisez la console Amazon EC2, puis attendez que la fonction Lambda se déclenche.

Remarque : lorsque la fonction Lambda se déclenche et s'exécute sans erreur, la valeur Instance State (État de l'instance) affiche le statut running (en cours d'exécution), en fonction de la planification que vous testez. Dans la console CloudWatch, vous pouvez vérifier Lambda metrics for invocations and errors (Métriques Lambda pour les appels et les erreurs).

9.    Ouvrez la console DynamoDB.

10.    Choisissez Tables, puis la table d'état.

11.    Choisissez le vue Items (Éléments), puis vérifiez que l'instance labelisée démarre.

Remarque : les données d'état sont stockées dans la table d'état.

Important : des coûts supplémentaires peuvent vous être facturés en fonction de la fréquence et de la durée de la fonction Lambda que vous utilisez. Des coûts supplémentaires peuvent également être facturés pour les tables DynamoDB ou les règles CloudWatch Events que vous créez.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?