Comment utiliser Instance Scheduler avec CloudFormation pour planifier des instances EC2 ?

Date de la dernière mise à jour : 11/04/2022

Je souhaite utiliser AWS Instance Scheduler avec AWS CloudFormation pour planifier des instances Amazon Elastic Compute Cloud (Amazon EC2).

Brève description

Utilisez les modèles CloudFormation pour automatiser le déploiement d'AWS Instance Scheduler.

Remarque : actuellement, vous ne pouvez pas utiliser les modèles dans les régions AWS Asie-Pacifique (Jakarta) et Asie-Pacifique (Osaka).

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

Résolution

Installez l'interface de ligne de commande (CLI) d'Instance Scheduler.

Pour vérifier que l'installation est réussie, exécutez la commande suivante :

$ scheduler-cli --version

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

La pile déploie une fonction AWS Lambda, une table Amazon DynamoDB, une règle Amazon EventBridge 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 de la pile Instance Scheduler et choisissez Launch Solution (Lancer la solution).
    Remarque : le modèle est lancé dans la région USA Est (Virginie du Nord) par défaut.
  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. Pour Stack name (Nom de la pile), nommez votre pile.
  5. Pour Instance Scheduler TagName, vous pouvez conserver la valeur par défaut en tant que Schedule (Planification) ou la personnaliser.
  6. Dans Frequency (Fréquence), choisissez une fréquence en minutes pour exécuter votre planificateur. Par exemple : 5 minutes.
    Remarque : la fréquence est le nombre de minutes qui s'écoulent avant qu'EventBridge n'initie à nouveau la fonction Lambda pour Instance Scheduler. Si vous avez un grand nombre d'instances, alors 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.
  7. Pour Enable CloudWatch Logs (Activer CloudWatch Logs), choisissez Yes (Oui).
  8. Pour Started tags (Identifications démarrées), saisissez state=started.
  9. Pour Stopped tags (Identifications arrêtées), saisissez state=stopped.
  10. Pour la planification entre comptes, indiquez le paramètre Cross-account roles (Rôles entre comptes). Insérez les ARN pour chaque rôle à partir des comptes secondaires, séparés par des virgules. Si vous n'utilisez pas la planification entre comptes, laissez le paramètre vide.
  11. Pour tous les autres paramètres, personnalisez la pile en fonction de vos besoins.
  12. Choisissez Next (Suivant).
  13. Sur la page Options, choisissez Next (Suivant).
  14. Vérifiez vos paramètres, puis sélectionnez I acknowledge that AWS CloudFormation might create IAM resources (J'accepte qu'AWS CloudFormation peut créer des ressources IAM).
  15. Choisissez Create (Créer).

Créer des périodes

Pour créer des périodes, vous pouvez utiliser l'interface de ligne de commande d'Instance Scheduler, la console DynamoDB ou des ressources personnalisées. Pour plus d'informations sur les périodes, voir Heures de démarrage et d'arrêt.

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

Utilisation de la CLI d'Instance Scheduler

Connectez-vous à l'interface de ligne de commande (CLI) d'Instance Scheduler, puis exécutez les commandes suivantes :

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

Remarque : remplacez votre_stack_name par le nom de pile que vous avez choisi à l'étape 4 et eu-west-1 par votre propre région.

Utilisation de la console DynamoDB

  1. Ouvrez la console DynamoDB.
  2. 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 stocke l'état des instances que le modèle arrête et démarre. La table de configuration est l'endroit où vous spécifiez les périodes et les planifications en fonction de vos besoins.
  3. Choisissez Explore Table Items (Explorer les éléments de la table).
  4. Ensuite, choisissez Create item (Créer un élément)
  5. Choisissez la vue JSON, puis utilisez le modèle JSON suivant :
{
  "type": {
    "S": "period"
  },
  "name": {
    "S": "mon-fri-9-5"
  },
  "begintime": {
    "S": "9:00"
  },
  "endtime": {
    "S": "16:59"
  },
  "weekdays": {
    "SS": [
      "mon-fri"
    ]
  }
}

Remarque : le modèle JSON précédent crée la première période. Utilisez un modèle JSON similaire pour la deuxième période. Assurez-vous de modifier les modèles en fonction de vos besoins.

Créer une planification

Pour créer une planification, vous pouvez utiliser l'interface de ligne de commande d'Instance Scheduler, la console DynamoDB ou des ressources personnalisées.

Utilisation de la CLI d'Instance Scheduler

Exécutez la commande suivante :

$ scheduler-cli create-schedule --stack your_stack_name --name m-f9-5-sat9-12 --region eu-west-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

Utilisation de la console DynamoDB

  1. Ouvrez la console DynamoDB.
  2. Choisissez Tables, puis la table de configuration.
  3. Choisissez Explore Table Items (Explorer les éléments de la table).
  4. Ensuite, choisissez Create Item (Créer un élément).
  5. Choisissez la vue JSON, puis utilisez le modèle JSON suivant :
{
  "type": {
    "S": "schedule"
  },
  "name": {
    "S": "m-f9-5-sat9-12"
  },
  "timezone": {
    "S": "UTC"
  },
  "periods": {
    "SS": [
      "mon-fri-9-5"
    ]
  }
}

Étiqueter l'instance et tester la planification

Lorsque vous utilisez une pile CloudFormation avec Instance Scheduler, vous devez définir le paramètre Instance Scheduler TagName. La valeur par défaut de ce paramètre est Schedule (Planification).

Instance Scheduler surveille 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 identification est définie sur Schedule (Planification) 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 les valeurs des identifications sont sensibles à la casse. Instance Scheduler n'arrête pas des instances en cours d'exécution si elles sont démarrées 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 appliquée. Pour plus d'informations, voir Définitions de la planification.

Utiliser les planifications prédéfinies

Outre les planifications personnalisées, vous pouvez également utiliser n'importe laquelle des planifications prédéfinies contenues dans la table de configuration. Par exemple, les étapes suivantes permettent de tester la planification prédéfinie nommée running (en cours d'exécution) :

  1. Ouvrez la console Amazon EC2.
  2. Choisissez les instances arrêtées que vous souhaitez étiqueter.
  3. Choisissez l'affichage Tags (Identifications), puis Manage Tags (Gérer les identifications).
  4. Choisissez Add Tag (Ajouter une identification).
  5. Pour Key (Clé), saisissez Schedule (Planification).
  6. Pour Value (Valeur), saisissez running (en cours d'exécution).
  7. Choisissez Save (Enregistrer).
  8. Actualisez la console Amazon EC2, puis attendez que la fonction Lambda soit initiée.
    Remarque : lorsque la fonction Lambda est initiée 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 rechercher des appels et des erreurs dans les métriques Lambda.
  9. Ouvrez la console DynamoDB.
  10. Choisissez Tables, puis la table d'état.
  11. Choisissez Explore Table Items (Explorer les éléments de la table) et confirmez que l'instance labélisée est démarrée.
    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 frais supplémentaires peuvent également vous être facturés pour les tables DynamoDB ou les règles EventBridge que vous créez.

Pour la planification entre comptes : lancer la pile distante dans les comptes secondaires

Pour planifier des instances dans des comptes secondaires à l'aide d'Instance Scheduler, déployez le modèle CloudFormation aws-instance-scheduler-remote. Ce modèle crée le rôle qui permet à Instance Scheduler de gérer les instances du compte secondaire à partir du compte principal.

Remarque : vous devez fournir l'ARN du rôle en tant que paramètre pour la pile d'Instance Scheduler dans le compte principal. Assurez-vous de créer ou de mettre à jour votre pile d'Instance Scheduler avec le bon paramètre.

  1. Ouvrez la console de gestion AWS du compte secondaire et lancez le modèle CloudFormation aws-instance-scheduler-remote. Vous pouvez également télécharger le modèle pour une utilisation ultérieure.
    Remarque : le modèle est lancé dans la région USA Est (Virginie du Nord) par défaut.
  2. 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).
  3. Sur la page de sélection du modèle, vérifiez que vous avez sélectionné le bon modèle, puis choisissez Next (Suivant).
  4. Sur la page de spécification des détails, attribuez un nom à votre pile distante.
  5. Sous Parameters (Paramètres), passez en revue les détails et modifiez le paramètre du compte principal. Saisissez le numéro de compte du compte principal.
  6. Choisissez Next (Suivant).
  7. Sur la page Options, choisissez Next (Suivant).
  8. Vérifiez vos paramètres, puis sélectionnez I acknowledge that AWS CloudFormation might create IAM resources (J'accepte qu'AWS CloudFormation peut créer des ressources IAM).
  9. Choisissez Create (Créer).
  10. Choisissez l'onglet Outputs (Sorties) de la pile, puis copiez la valeur CrossAccountRole.
  11. Dans le compte principal, choisissez votre pile CloudFormation, puis Update (Mettre à jour).
  12. Sur la page de mise à jour de la pile, choisissez Use current template (Utiliser le modèle actuel).
  13. Dans le paramètre Cross-account roles (Rôles inter-comptes), collez la valeur CrossAccountRole.
  14. Choisissez Next (Suivant), puis sélectionnez I acknowledge that AWS CloudFormation might create IAM resources (J'accepte qu'AWS CloudFormation peut créer des ressources IAM).
  15. Choisissez Update Stack (Mettre à jour la pile).

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


Avez-vous besoin d'aide pour une question technique ou de facturation ?