Vous avez envie de lancer automatiquement et régulièrement un script Python / Go / Node.js sans avoir de serveur ou de PC allumé 24/24 chez vous ? Découvrez comment créer un script et une tâche planifiée avec Google Cloud Platform.
Google Cloud Platform est une plateforme sans serveur de Google configurée pour exécuter des scripts répondant à des événements spécifiés, tels qu'une requête HTTP ou une mise à jour de base de données.
L'idée est de créer un script Python, qui sera donc hébergé sur Google Cloud Platform, et qui sera également exécuté automatiquement tous les jours à une heure précise, toujours via Google Cloud Platform.
Le prérequis est bien sûr d'avoir un compte Google.
Pour la suite, j'utiliserai l'acronyme GCP pour Google Cloud Platform.
Le script Python utilisé
Pour l'article, je vais utiliser un script Python dont j'ai déjà parlé sur ce blog. Il s'agit de quelques lignes de code permettant d'envoyer en notification sur le téléphone via Pushbullet, contenant la météo du jour.
Pour pouvoir exécuter un script Python via GCP, il faut absolument qu'il soit nommé main.py
et doit contenir des fonctions. Egalement, n'oubliez pas de créer un fichier requirements.txt
qui contiendra toutes les dépendances du script.
Le script ne doit contenir que des fonctions. Une seule pourra être appelée par GCP. Je dois donc commenter la dernière ligne de mon script et également ajouter un paramètre quelconque à celle-ci. Voici à quoi ressemble la fin de mon fichier :
def SendWeatherWithPushbullet(q):
pb = Pushbullet(PB_API_KEY)
weather = getWeather()
if DEVICE_ID != "":
device = pb.devices[DEVICE_ID]
push = pb.push_note(NOTIF_TITLE, weather, device=device)
else:
push = pb.push_note(NOTIF_TITLE, weather)
#SendWeatherWithPushbullet()
Pour plus de facilité, créez votre script sur votre poste, puis générez une archive ZIP de ce dernier. Vous l'importerez dans GCP ensuite.
Création d'une "Cloud function" dans Google Cloud Platform
Accédez à la console de GCP.
Si vous n'avez pas de projet, créez en un :
Poursuivez par rechercher le menu "Cloud Functions" via le moteur de recherche :
Cliquez sur le bouton "Créer une fonction" :
Dans le formulaire qui s'affiche, renseignez un nom pour cette fonction, la mémoire allouée, le déclencheur et si vous souhaitez que n'importe qui ayant l'URL puisse la lancer :
Choisissez ensuite d'importer un fichier ZIP et sélectionnez l'environnement d'éxecution souhaité (Go, Python, Node.js, ...).
Continuez en choisissant un "Bucket intermédiaire" et en renseignant le champ "Fonction à exécuter", qui correspond à la fonction de votre script Python.
Après avoir validé la création de la fonction, celle-ci va mettre quelques minutes à être intégrée à votre console. Si tout va bien, vous aurez une icône verte :
Si vous avez une erreur, cliquez sur la fonction pour avoir le détail.
Cliquez sur votre fonction fraîchement créée et rendez-vous dans l'onglet "Déclencheur". Cliquez sur le lien présent en bas pour lancer votre fonction et tester son bon fonctionnement.
Création de la tâche planifiée dans Google Cloud Platform
Nous avons donc la possibilité de lancer un script directement via une URL. Avec GCP et plus particulièrement le module "Scheduler", il est possible d'activer une tâche planifiée afin d'exécuter automatiquement le script tous les jours par exemple.
Pour cela, recherchez "Cloud scheduler" dans la barre de recherche de Google Cloud Platform :
Cliquez ensuite sur le bouton "Créer une tâche" :
Renseignez un nom pour la tâche, une description et une fréquence de lancement. La syntaxe est identique à celle de l'utilitaire cron
dans Linux. Une aide vous est proposée. Dans mon exemple, la tâche sera exécutée tous les jours à 7h du matin.
Terminez en choisissant le fuseau horaire, la cible HTTP puis renseignez l'URL de votre fonction créée avant.
Une fois créée, voici la tâche dans le listing :
Vous pouvez la tester en cliquant sur le bouton "Exécuter".
Voici le résultat le lendemain matin à 7h :