Le service Cron d'App Engine permet de configurer des tâches planifiées qui s'exécutent à des heures définies ou à intervalles réguliers. Ces tâches sont communément appelées jobs Cron. Ces jobs Cron sont automatiquement déclenchés par le service Cron d'App Engine. Par exemple, vous pouvez utiliser un job Cron pour envoyer quotidiennement un rapport par e-mail, pour mettre à jour des données en cache toutes les 10 minutes ou pour actualiser des informations récapitulatives une fois par heure.
Un job Cron envoie une requête HTTP GET
planifiée vers le point de terminaison spécifié dans l'application où le job Cron est configuré. Le gestionnaire de ce point de terminaison exécute la logique lors de l'appel.
Le service Cron d'App Engine ne peut pas être utilisé pour appeler des points de terminaison Web en dehors de l'application hôte App Engine. Vous ne pouvez pas l'utiliser pour appeler des points de terminaison App Engine à partir d'autres applications en dehors de l'application hôte.
Une requête de tâche Cron est soumise aux mêmes limites que celles des files d'attente d'envoi de tâches.
Avant de commencer
Pour déployer ou mettre à jour les planifications, votre compte requiert l'un des rôles IAM suivants :
- Propriétaire
- Éditeur
Vous pouvez définir l'autorisation sur la page "IAM" dans Google Cloud Console.
Créer une tâche Cron
- Créez le fichier
cron.yaml
dans le répertoire racine de votre application (avecapp.yaml
). Ajoutez une ou plusieurs entrées
<cron>
à votre fichier et définissez les éléments nécessaires à votre tâche, y compris les éléments<url>
et<schedule>
requis. Examinez la syntaxe et les options du fichier cron.yaml pour en savoir plus sur les éléments du fichiercron.yaml
.Dans l'exemple suivant, une tâche Cron de base s'exécutant quotidiennement a été créée :
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
La spécification cible est facultative et correspond au nom d'un service / d'une version. Le cas échéant, la cible est ajoutée au début du nom d'hôte de votre application, ce qui a pour effet d'acheminer la tâche vers ce service / cette version. Si aucune cible n'est spécifiée, la tâche s'exécute dans les versions du service
default
configurées pour le trafic.Créez un gestionnaire pour l'URL de la tâche Cron. Le gestionnaire doit exécuter toutes les tâches que vous souhaitez planifier. Il doit répondre avec un code d'état HTTP compris entre 200 et 299 (inclus) pour indiquer que l'opération a réussi. D'autres codes d'état peuvent être renvoyés et peuvent être utilisés pour relancer l'exécution de la tâche Cron.
web.xml
doit être identique à l'URL du job Cron.
Tester les tâches Cron sur le serveur de développement
Le serveur de développement local n'exécute pas automatiquement les tâches Cron. Vous pouvez envoyer des requêtes directement à l'URL de la tâche Cron pour en tester la fonctionnalité. Vous pouvez utiliser votre interface Cron locale ou l'interface de gestion des tâches planifiées pour déclencher les URL associées à vos tâches, à l'aide de curl ou d'un outil similaire.
Exécuter à nouveau les tâches Cron qui échouent
Si le gestionnaire de requêtes d'une tâche Cron renvoie un code d'état qui n'est pas compris entre 200 et 299 (inclus), App Engine considère que la tâche a échoué. Par défaut, les tâches qui ont échoué ne font pas l'objet de nouvelles tentatives, sauf si un code d'état 503 est renvoyé. Dans ce cas, elles sont relancées toutes les minutes jusqu'à ce qu'elles aboutissent ou jusqu'au renvoi d'un code d'état compris entre 200 et 299.
Pour configurer la relance des tâches qui échouent, procédez comme suit :
- Incluez un bloc
retry_parameters
dans votre fichiercron.yaml
. Choisissez et définissez les paramètres de nouvelle tentative dans le bloc
retry_parameters
.Voici un exemple de fichier
cron.yaml
contenant une seule tâche Cron configurée pour être relancée jusqu'à cinq fois (valeur par défaut) avec un intervalle initial de 2,5 secondes entre les tentatives, qui double à chaque nouvelle tentative.cron: - description: "retry demo" url: /retry schedule: every 10 mins retry_parameters: min_backoff_seconds: 2.5 max_doublings: 5
En savoir plus sur les options de nouvelle tentative de Cron
Déployer des tâches Cron
Pour déployer les tâches Cron spécifiées dans votre fichier de configuration cron.yaml
, exécutez la commande suivante :
gcloud
gcloud app deploy cron.yaml
Maven
mvn appengine:deployCron cron.yaml
Gradle
gradle appengineDeployCron cron.yaml
IDE
Si vous utilisez IntelliJ ou Eclipse, vous devez sélectionner les fichiers de configuration spécifiques à déployer à l'aide du formulaire de déploiement.
Supprimer toutes les tâches Cron
Pour supprimer toutes les tâches Cron :
Remplacez le contenu du fichier
cron.yaml
par ce qui suit :cron:
Déployez le fichier
cron.yaml
sur App Engine.
Sécuriser des URL pour Cron
Un gestionnaire Cron n'est autre qu'un gestionnaire normal défini dans le fichier app.yaml
. Vous pouvez empêcher les utilisateurs d'accéder aux URL utilisées par les tâches planifiées en n'accordant l'accès qu'aux comptes administrateurs. Les tâches planifiées peuvent accéder aux URL réservées aux administrateurs. Vous pouvez restreindre l'accès à une URL en ajoutant login: admin
à la configuration du gestionnaire dans le fichier app.yaml
.
Un exemple dans app.yaml
peut prendre la forme suivante :
application: hello-cron
version: 1
runtime: java
api_version: 1
handlers:
- url: /report/weekly
servlet: mysite.server.CronServlet
login: admin
Pour tester une tâche Cron, connectez-vous en tant qu'administrateur et accédez à l'URL du gestionnaire dans votre navigateur.
Les requêtes du service Cron contiennent également un en-tête HTTP :
X-Appengine-Cron: true
L'en-tête X-Appengine-Cron
est défini en interne par Google App Engine. Si le gestionnaire de requêtes trouve cet en-tête, il peut valider qu'il s'agit d'une requête Cron. Si l'en-tête est présent dans une requête d'utilisateur externe adressée à votre application, il est supprimé, sauf dans les requêtes des administrateurs connectés de l'application qui sont autorisés à définir l'en-tête à des fins de test.
App Engine émet des requêtes Cron à partir de l'adresse IP 0.1.0.2
. Pour les tâches Cron créées avec des versions anciennes de gcloud (antérieures à la version 326.0.0), les requêtes Cron proviennent de 0.1.0.1
.
Appeler Google Cloud Endpoints
Vous ne pouvez pas spécifier de point de terminaison Google Cloud Endpoints dans le champ url
d'une tâche Cron.
Si vous souhaitez que votre tâche Cron appelle un point de terminaison Google Cloud Endpoints, envoyez une requête à une cible diffusée par un gestionnaire dans votre application, puis appelez la classe et la méthode du point de terminaison à partir du code du gestionnaire.
Afficher les tâches Cron dans la console Google Cloud
Vous pouvez afficher les tâches Cron planifiées dans l'onglet Tâches Cron d'App Engine de Cloud Scheduler.
Vous pouvez également afficher les journaux pour savoir quand des tâches Cron ont été ajoutées ou supprimées.
En savoir plus
Consultez les informations détaillées sur la définition des tâches Cron dans la documentation de référence sur le fichier cron.yaml.