Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Tâches planifiées sous Windows Azure partie I

Poster un commentaire

Windows Azure propose plusieurs façons de gérer les tâches planifiées:

  1. Azure Worker role
  2. Les WebJobs (Tâches Web)
  3. Le Scheduler (planificateur)
  4. Azure Mobile Service Scheduler
  5. Service Bus

 

Ce blog est divisé en plusieurs parties. Nous allons dans celle-ci explorer les Azure Worker Role et les WebJobs.

 

Les worker roles

Lorsqu’un Worker Role démarre il lance une méthode Run qui elle même entretient une boucle while.

Nous avons donc toute latitude pour installer des threads qui peuvent lancer des traitements périodiques ou tout ce que l’on peut imaginer.

Voici un exemple possible qui est un peu l’exemple canonique du thread à déclenchement planifié:

http://msdn.microsoft.com/fr-fr/library/swx5easy.aspx

 

Les WebJobs

Les WebJob, encore en mode aperçu, sont spécifiques aux Web Sites.

Donc pour tester on va créer un Web Site quelconque.

Un WebJob est simplement un fichier .zip contenant un fichier de type:

  • .cmd, .bat, .exe
  • .ps1 (PowerShell)
  • .sh (bash)
  • .php (PHP)
  • .py (Python
  • .js (Node)

Le fichier contient également les dépendances nécessaires.

L’algorithme de lancement d’un job est le suivant:

  1. Windows Azure recherche le premier fichier dont le nom répond au modèle:
    run.{une des extensions précédentes}
  2. Si pas trouvé, Windows Azure recherche le premier fichier portant une des extensions précédemment définies.
  3. Si pas trouvé, alors la tâche n’est pas exécutable.

 

Pour tester nous allons créer le fichier .bat suivant:

@echo Test Web Job

echo WebJob terminé

 

Ce n’est pas bien ambitieux, mais on s’en contentera pour faire des essais.

Une tâche peut être lancée selon 3 modes:

  1. A la demande
  2. En continu
  3. Planifié

 

Nous allons les détailler un par un.

 Mode à la demande

  • Dans le portail Windows Azure, sélectionner le Web Site qui sera la cible du Web Job et aller dans l’onglet Web Job:

2014-06-01_11-06-25

  • Cliquer sur Add Job, la fenêtre suivante s’ouvre:

2014-06-01_11-09-15

On va commencer par le mode A la demande.

  • Faire OK

Une fois la tâche créée:

2014-06-01_11-12-48

Allez sur la page des logs des tâches:

2014-06-01_11-13-56

A ce stade il est normal que le logs soit vide. On peut remarquer que la commande lancée a été correctement retrouvée dans le .zip. Pour finir l’exploration de l’environnement, cliquer sur WebJobs:

2014-06-01_11-17-38

Revenons au tableau de bord des WebJob. On remarque que sur la barre d’outils s’affiche:

2014-06-01_11-19-48

  • Cliquer sur Run Once

Vous avez exécuté votre premier WebJob:

2014-06-01_11-21-17Prenez le temps de parcourir les logs pour voir les différences.

 Mode en continue

Important: La tâche, pour s’exécuter en mode continue, doit implémenter elle-même une boucle sans fin. Evidemment notre tâche de tests n’est pas idéale. Mais cela ne changera rien au principe.

 

Créez comme précédemment une tâche qui s’exécute en continue:

2014-06-01_11-25-20

On peut lancer et arrêter une tâche en continue en la sélectionnant, puis en cliquant sur Stop/Start:

2014-06-01_11-26-47

 

Note: En mode continue, la tâche n’est exécutée que si le site est actif et lancé.

 

 Mode planifié

Nous allons maintenant créer une tâche planifiée.

Le formulaire est différent. Une région est demandée tout d’abord:

2014-06-01_11-34-53Et un deuxième formulaire suit:

2014-06-01_11-37-15On peut choisir une tâche récurrente ou une tâche lancée une seule fois.

  • Faire OK

Vous n’avez plus qu’à constater que ça marche!

2014-06-01_11-40-46Tandis que du côté des logs:

2014-06-01_11-45-39

Note: selon que vous sélectionnez minutes, heure, semaine… comme paramètre Every, l’affichage du formulaire va évoluer. Je vous laisse le soin d’explorer ces différentes options.

Notez aussi que même en mode planifié, vous disposez de la commande Run Once.

Cette commande apparaît également lorsqu’une tâche Continue est à l’arrêt.

 

Les jobs planifiés disposent de quelques possibilités de paramétrage supplémentaires:

2014-06-01_11-52-16

  •  On clique sur Schedule, le formulaire suivant apparaît:

2014-06-01_11-54-04

Diverses information sur la tâche sont affichées comme sa date de prochaine exécution ou l’historique des exécutions.

  • Cliquer sur le nom du job qui nous intéresse:

2014-06-01_12-01-31

Et si on fait défiler l’écran:

2014-06-01_12-02-33

On peut ainsi reparamétrer la planification.

 

 

Une dernière chose. Si vous vous rendez dans les formulaires de logs que nous avons exploré en début de ce chapitre:

2014-06-01_12-12-50

  • Cliquez sur un des logs:

2014-06-01_12-15-00

Vous verrez apparaître des détails sur l’exécution et en particulier les sorties de la tâche. Cela peut être utile pour déboguer une tâche.

 Déployer un WebJob

Outre la création d’un job via le portail comme nous venons de le faire, une tâche peut aussi être déployée. Les tâches sont enregistrées dans le répertoire du site suivant:

\App_Data\jobs\{job type}\{job name}

  •  job type: continuous, triggered (à la demande ou planifié)
  • job name: nom de la tâche

Le répertoire contient ce que l’on mettrait dans le fichier .zip.

Pour déployer notre tâche il est par exemple possible de se connecter en Ftp sur le site et de déployer ce répertoire. Windows Azure détecte automatiquement la tâche et la lance. Créons un Web Site dans Visual Studio avec par exemple:

2014-06-01_21-28-16Déployons le site et on voit:

2014-06-01_21-30-27

Le déploiement en mode triggered se fait donc en mode A la demande. Pour l’instant il ne semble pas y avoir de moyen de déployer une tâche planifiée.

 En savoir plus

Le SDK des Web Job est plus riche que la présentation qui vient d’en être faite. Par exemple:

 

  • Si vous souhaitez mettre en place une mécanique qui réagit à l’arrêt inattendu d’une tâche:

http://blog.amitapple.com/post/2014/05/webjobs-graceful-shutdown/#.U4uB9XmKCpo

  • Pour être notifié lorsqu’une tâche se termine:

http://blog.amitapple.com/post/2014/03/webjobs-notification/#.U4uCXHmKCpo

  • Déploiement d’une tâche avec Git:

http://blog.amitapple.com/post/73574681678/git-deploy-console-app/#.U4uDI3mKCpo

 

 Bibliographie

 

http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/getting-started-with-windows-azure-webjobs

 

 

 

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s