Comment puis-je utiliser le planificateur d'instances avec CloudFormation pour planifier des instances EC2 ?

Lecture de 9 minute(s)
0

Je souhaite utiliser le planificateur d'instances AWS 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 du planificateur d'instances AWS.

Important : Si vous utilisez le planificateur d'instance pour des instances EC2 avec un Amazon Elastic Block Store (Amazon EBS) chiffré, vous ne pourrez pas démarrer vos instances. Pour démarrer vos instances, vous devez accorder au planificateur d'instances un rôle d'utilisateur clé avec une stratégie de clé pour le chiffrement ou le déchiffrement des volumes EBS. Vous devez ajouter la stratégie de clé à la clé AWS Key Management Service (AWS KMS) pour autoriser le rôle d'utilisateur clé à utiliser cette clé.

Résolution

Installer le planificateur d'instances

Suivez les instructions pour installer l'interface de ligne de commande du planificateur d'instances (CLI) si vous ne l'avez pas encore fait.

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

$ scheduler-cli --version

Créez une pile CloudFormation avec le modèle de planificateur d'instance

La pile déploie alors 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 de planificateur d'instance. Vous pouvez également passer à l'étape 1. Lancez la page Pile du hub du planificateur d'instance et choisissez Lancer la solution.
    Remarque : Le modèle est lancé par défaut dans la région USA Est (Virginie du Nord).
  3. Dans la barre de navigation, sélectionnez la région AWS où vous souhaitez lancer votre pile avec le modèle, puis cliquez sur Suivant.
  4. Pour Nom de la pile, nommez votre pile.
  5. Pour Nom de balise du planificateur d'instances, vous pouvez conserver la valeur par défaut comme Plan ou la personnaliser.
  6. Pour Fréquence, choisissez une fréquence en minutes pour exécuter votre planificateur. Vous pouvez par exemple choisir 5 minutes.
    Remarque : La fréquence est le nombre de minutes qui s'écoulent avant qu'EventBridge ne lance à nouveau la fonction Lambda pour le planificateur d'instances. Si les instances sont nombreuses, utilisez la fréquence maximale pour éviter toute limitation. Si la fréquence est trop faible pour vos besoins, vous pouvez ajuster la propriété Fréquence ultérieurement.
  7. Pour Activer les métriques CloudWatch, choisissez Oui.
  8. Pour Activer les journaux CloudWatch, choisissez Oui.
  9. (Facultatif) Pour Balises démarrées, saisissez état=démarré.
  10. (Facultatif) Pour Balises Arrêtées, saisissez état=arrêté.
  11. Pour la planification inter-comptes, indiquez le paramètre Rôles inter-comptes. Saisissez les ARN de chaque rôle des comptes secondaires, séparés par des virgules. Si vous ne souhaitez pas appliquer la planification inter-comptes, laissez le paramètre vide.
  12. Pour tous les autres paramètres, personnalisez la pile en fonction de vos besoins.
  13. Sélectionnez Suivant.
  14. Sur la page Options, choisissez Suivant.
  15. Vérifiez vos paramètres, puis sélectionnez Je reconnais qu'AWS CloudFormation pourrait créer des ressources IAM.
  16. Choisissez Créer.

Créez des périodes

Pour créer des périodes, vous pouvez utiliser l'interface de ligne de commande du planificateur d'instances, la console DynamoDB ou les ressources personnalisées. Pour plus d'informations sur les périodes de temps, reportez-vous à Heures de début et de fin.

Dans l'exemple suivant, vous verrez comment créer des instances qui :

  • démarrent à 9 heures et s'arrêtent à 17 heures du lundi au vendredi
  • démarrent à 9 heures et s'arrêtent à 12 heures le samedi

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

Utilisation de l'interface de ligne de commande du planificateur d'instances

Connectez-vous à l'interface de ligne de commande du planificateur d'instances, 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_nom_de_pile** par le nom de la 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 choisissez la table de configuration.
    Remarque : Le modèle de planificateur d'instances crée automatiquement deux tables DynamoDB : état et configuration. La table d'état enregistre l'état des instances que le modèle arrête et démarre. La table de configuration vous permet de spécifier les périodes et les horaires correspondant à vos besoins.
  3. Choisissez Explorer les éléments de la table.
  4. Choisissez Créer un élément.
  5. Choisissez la vue JSON, puis utilisez le modèle de notation d'objet JavaScript (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. Veillez à modifier les modèles en fonction de vos besoins.

Créer une planification

Pour créer une planification, utilisez l'interface de ligne de commande du planificateur d'instances, la console DynamoDB ou des ressources personnalisées.

Utilisation de l'interface de ligne de commande du planificateur d'instances

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 choisissez la table de configuration.
  3. Choisissez Explorer les éléments de la table.
  4. Choisissez 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"  
    \]  
  }  
}

Marquer l'instance et tester la planification

Lorsque vous utilisez une pile CloudFormation avec le planificateur d'instance, vous devez définir le paramètre Nom de balise du planificateur d'instances. La valeur par défaut de ce paramètre est Planifier.

Le planificateur d'instances surveille les balises sur les instances. Si la clé de la balise de l'instance correspond à la balise définie du planificateur, le planificateur d'instances applique la planification définie pour la valeur de la balise de l'instance. Par exemple, la clé d'une balise est définie sur Planification et la valeur est définie sur m-f9-5-sat9-12. Dans cet exemple, les instances démarrent à 9 heures et s'arrêtent à 17 heures du lundi au vendredi. Elles démarrent également à 9 heures et s'arrêtent à 12 heures le samedi.

Remarque : Les clés et les valeurs des balises sont sensibles à la casse. Le planificateur d'instances n'arrête pas les instances en cours d'exécution si elles sont démarrées manuellement en dehors de la période d'exécution. Le planificateur d'instances ne démarre pas non plus une instance si celle-ci est arrêtée manuellement pendant la période d'exécution, sauf si la planification est activée. Pour plus d'informations, reportez-vous à Définitions de la planification.

Utiliser des planifications prédéfinies

Outre les planifications personnalisées, vous pouvez également utiliser l'une des planifications prédéfinies de la table de configuration. Par exemple, les étapes suivantes testent la planification prédéfinie dénommée Exécution :

  1. Ouvrez la console Amazon EC2.
  2. Choisissez les instances arrêtées que vous souhaitez baliser.
  3. Choisissez la vue Balises, puis cliquez sur Gérer les balises.
  4. Choisissez Ajouter une balise.
  5. Pour Clé, saisissez Planification.
  6. Pour Valeur, saisissez Exécution.
  7. Choisissez Enregistrer.
  8. Actualisez la console Amazon EC2, puis attendez que la fonction Lambda soit lancée.
    Remarque : Lorsque la fonction Lambda est lancée et s'exécute sans erreur, l'État de l'instance s'affiche comme en cours d'exécution, selon la planification que vous testez. Dans la console CloudWatch, vous pouvez vérifier les métriques Lambda pour les invocations et les erreurs.
  9. Ouvrez la console DynamoDB.
  10. Choisissez Tables, puis choisissez la table d'état.
  11. Choisissez Explorer les éléments de la table et confirmez que l'instance balisée est démarrée. 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 vous être facturés pour les tables DynamoDB ou les règles EventBridge que vous créez.

Pour la planification inter-comptes : Lancer la pile distante dans les comptes secondaires

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

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

  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 l'utiliser plus tard.
    Remarque : Le modèle est lancé par défaut dans la région USA Est (Virginie du Nord).
  2. Dans la barre de navigation, sélectionnez la région AWS où vous souhaitez lancer votre pile avec le modèle, puis cliquez sur Suivant.
  3. Sur la page Sélectionner le modèle, vérifiez que vous avez sélectionné le bon modèle, puis choisissez Suivant.
  4. Sur la page Spécifier les détails, nommez votre pile distante.
  5. Sous Paramètres, vérifiez et modifiez le paramètre Compte primaire. Indiquez le numéro de compte du compte principal.
  6. Sélectionnez Suivant.
  7. Sur la page Options, choisissez Suivant.
  8. Vérifiez vos paramètres, puis sélectionnez Je reconnais qu'AWS CloudFormation pourrait créer des ressources IAM.
  9. Choisissez Créer.
  10. Choisissez l'onglet Sorties de la pile, puis copiez la valeur CrossAccountRole.
  11. Depuis le compte principal, choisissez votre pile CloudFormation, puis cliquez sur Mettre à jour.
  12. Sur la page Mettre à jour la pile, choisissez Utiliser le modèle actuel.
  13. Dans le paramètre Rôles inter-comptes, collez la valeur Rôle inter-comptes.
  14. Choisissez Suivant, puis sélectionnez Je reconnais qu'AWS CloudFormation peut créer des ressources IAM.
  15. Choisissez Mettre à jour la pile.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an