Comment puis-je créer des tâches cron sur des instances Amazon EC2 dans des environnements Elastic Beanstalk ?

Date de la dernière mise à jour : 06/04/2020

Je souhaite créer une tâche cron permettant d'exécuter un script personnalisé sur toutes les instances Amazon Elastic Compute Cloud (Amazon EC2) d'un environnement AWS Elastic Beanstalk existant.

Brève description

Vous pouvez utiliser des fichiers de configuration Elastic Beanstalk, appelés .ebextensions, pour créer des tâches cron qui s'exécutent sur toutes les instances Amazon EC2 d'un environnement Elastic Beanstalk. Dans le fichier zip de l'application Elastic Beanstalk, créez un répertoire nommé .ebextensions. Le fichier zip contient des fichiers de configuration qui s'exécutent lorsque l'application est déployée sur des instances Amazon EC2.

Remarque : les étapes ci-dessous permettent d'ajouter une tâche cron qui s'exécute, en même temps, sur toutes les instances Amazon EC2 d'un environnement Elastic Beanstalk. Si une tâche périodique doit être exécutée sur une seule instance, employez le fichier cron-leaderonly-linux.config destiné aux environnements Web. Si vous utilisez un environnement de travail dédié, définissez des tâches périodiques.

Solution

Création ou mise à jour de votre fichier de configuration

Le fichier cron-linux.config comporte deux clés : la clé files et la clé commands.

La clé files permet de spécifier l'emplacement du fichier myscript.sh sur les instances Elastic Beanstalk, ainsi que les autorisations de fichier requises. La clé commands permet de spécifier la liste des commandes à exécuter sur les instances.

Téléchargez le modèle cron-linux.config à partir du référentiel GitHub AWS.

--ou--

Créez ou mettez à jour un fichier de configuration existant en vous appuyant sur l'exemple suivant :

files:
    "/etc/cron.d/mycron":
        mode: "000644"
        owner: root
        group: root
        content: |
            * * * * * root /usr/local/bin/myscript.sh

    "/usr/local/bin/myscript.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash

            date > /tmp/date
            # Your actual script content

            exit 0

commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/mycron.bak"

Remarque : lorsque vous nommez votre fichier de configuration, tenez compte du fait que les fichiers se trouvant dans le répertoire .ebextensions sont exécutés dans l'ordre alphabétique. Vous pouvez nommer votre fichier de configuration cron-linux.config.

Le fichier cron-linux.config permet de créer un fichier cron nommé /etc/cron.d/mycron, configuré pour exécuter un script toutes les minutes. Le script myscript.sh permet d'obtenir la date, puis prend fin. Chaque fois que le fichier cron-linux.config est utilisé lors de déploiements, une sauvegarde du fichier /etc/cron.d/mycron est créée. Cette dernière est nommée /etc/cron.d/mycron.bak. La dernière commande du fichier cron-linux.config permet de nettoyer le répertoire /etc/cron.d en supprimant la sauvegarde /etc/cron.d/mycron.bak.

Pour obtenir des informations supplémentaires sur la personnalisation de votre environnement à l'aide de fichiers .ebextensions, consultez la section Personnalisation avancée d'un environnement à l'aide de fichiers de configuration .ebextensions.

Création d'un groupe source d'application

Pour ajouter le fichier de configuration au code source de votre application Web, procédez comme suit :

1.    Au niveau racine du dossier de votre application, créez un répertoire nommé .ebextensions.

2.    Déplacez le fichier cron-linux.config que vous avez créé ou mis à jour dans le dossier .ebextensions.

3.    Créez un dossier zip pour les fichiers de votre application, y compris le nouveau fichier de configuration.

L'exemple suivant illustre la structure du répertoire .ebextensions et du fichier cron-linux.config se trouvant dans le fichier zip de l'application :

|-- .ebextensions
|        |-- cron-linux.config 
|        |-- other .config files
|-- other application files