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

Lecture de 9 minute(s)
0

Je souhaite utiliser Instance Scheduler sur 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 d’Instance Scheduler sur AWS.

Important : si vous utilisez Instance Scheduler pour des instances d’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 à Instance Scheduler un rôle d’utilisateur de clés avec une politique de clés pour le chiffrement ou pour le déchiffrement de volumes EBS. Vous devez ajouter la politique de clé à la clé AWS Key Management Service (AWS KMS) pour autoriser le rôle d’utilisateur de clés à utiliser cette clé.

Résolution

Installer Instance Scheduler

Suivez les instructions pour installer l’interface de la ligne de commande (CLI) du planificateur d’instance 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éer 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 d’Instance Scheduler. Vous pouvez également passer à l’Étape 1. Lancez la page pile du hub d’Instance Scheduler 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 pile, nommez votre pile.
  5. Pour Nom de balise d’Instance Scheduler, vous pouvez conserver la valeur par défaut comme Plan ou la personnaliser.
  6. Pour Fréquence, choisissez une fréquence d’exécution de votre planificateur en minutes. Vous pouvez par exemple choisir 5 minutes.
    Remarque : la vitesse est le nombre de minutes qui s’écoulent avant qu’EventBridge ne relance la fonction Lambda pour Instance Scheduler. 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 régler la propriété Fréquence ultérieurement.
  7. Pour Activer des métriques CloudWatch, choisissez Oui.
  8. Pour Activer des journaux CloudWatch, choisissez Oui.
  9. (Facultatif) Pour Balises lancées, saisissez state=started.
  10. (Facultatif) Pour Balises arrêtées, saisissez state=stopped.
  11. Pour la planification intercomptes, indiquez le paramètre Rôles intercomptes. Saisissez les ARN de chaque rôle des comptes secondaires, séparés par des virgules. Si vous ne souhaitez pas appliquer la planification intercomptes, laissez le paramètre vide.
  12. Pour tous les autres paramètres, personnalisez la pile selon 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éer les périodes

Pour créer des périodes, vous pouvez utiliser la CLI du planificateur d’instances, la console DynamoDB ou des ressources personnalisées. Pour plus d’informations sur les durées, consultez Heures de début et de fin.

L’exemple suivant vous montre 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 approprié de périodes.

Utilisation de la CLI d’Instance Scheduler

Connectez-vous à la 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 : remplacezyour_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 console DynamoDB

  1. Ouvrez la console DynamoDB.
  2. Choisissez Tables, puis choisissez la table de configuration.
    Remarque : le modèle d’Instance Scheduler crée automatiquement deux tables DynamoDB : état et configuration. La table d’état enregistre l’état d’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’objets 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 selon vos besoins.

Créer un plan

Pour créer un plan, utilisez la CLI 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 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 le plan

Lorsque vous utilisez une pile CloudFormation avec Instance Scheduler, vous devez définir le paramètre Nom de balise d’Instance Scheduler. La valeur par défaut de ce paramètre est Plan.

Instance Scheduler surveille les balises sur les instances. Si la clé de balise d’instance correspond à la balise définie du planificateur, Instance Scheduler applique le plan défini pour la valeur de balise d’instance. Par exemple, la clé d’une balise est définie sur Plan 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. Instance Scheduler n’arrête pas les instances en cours d’exécution si elles sont démarrées manuellement hors de la période d’exécution. Instance Scheduler 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 le plan est actif. Pour plus d’informations, consultez Définitions du plan.

Utiliser des plans prédéfinis

Outre les plans personnalisés, vous pouvez également utiliser l’un des plans prédéfinis de la table de configuration. Par exemple, les étapes suivantes testent le plan prédéfini nommé en cours d’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 Plan.
  6. Pour Valeur, saisissez en cours d’exécution.
  7. Choisissez Enregistrer.
  8. Actualisez la console Amazon EC2, puis attendez le lancement de la fonction Lambda.
    Remarque : lorsque la fonction Lambda est lancée et s’exécute sans erreur, État d’instance s’affiche comme En cours d’exécution, selon le plan 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 table et confirmez que l’instance marquée a démarré. Les données d’état sont stockées dans la table d’état.
    Important : des frais supplémentaires peuvent vous être facturés selon la vitesse et 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 pour les règles EventBridge que vous créez.

Pour la planification intercomptes : 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 de CloudFormation aws-instance-scheduler-remote. Ce modèle crée le rôle qui permet à l’Instance Scheduler du compte principal de gérer les instances du compte secondaire.

Remarque : vous devez fournir l’ARN de rôle sous forme de paramètre de la pile d’Instance Scheduler dans le compte principal. Veillez à créer ou à 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 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élection de modèle, vérifiez que vous avez bien sélectionné le bon modèle, puis choisissez Suivant.
  4. Sur la page Spécifier les détails, nommez votre pile distante.
  5. Dans 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 pile, puis copiez la valeur CrossAccountRole.
  11. À partir du 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 intercomptes, collez la valeur CrossAccountRole.
  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