Azure WebJobs Part 3 : Activer un Job avec un Blob

Dans cette troisième partie, nous allons voir comment lancer le traitement d’un job à partir d’un nouveau blob dans notre espace de stockage.

Le scénario est le suivant, j’ai un Web Role qui héberge une gateway. J’ai de nombreux logs IIS qui sont stockés dans des blobs et je voudrais pouvoir faire des requêtes sur les données. Pour cela, je dois d’abord lire les blobs et envoyer les lignes qu’il contient dans une table Azure sur laquelle je pourrais faire mes requêtes.

Continue reading

Posted in Azure, Français | Tagged , , | Leave a comment

Azure WebSites–WebJobs en disponibilité générale

 

Ca y est, il y a un mois, le SDK des WebJobs passait en version 1.0.0RC. Depuis hier, le SDK est passé en mode Disponibilité Générale.

 

Pour rappel, les WebJobs (ou Tâches Web en français), vous permettent de créer des programmes ou méthodes qui ont la possibilité :

  • de tourner en tache de fond sur votre site web
  • d’être déclencher par une insertion dans une table azure, un blob
  • d’écouter sur une souscription de Service Bus
  • d’être déclencher par les taches planifiés (Scheduler Azure)

Un Dashboard complet permet d’avoir accès aux logs et exécution des méthodes. Enfin le mode AlwaysOn des Sites Web ou ils sont hébergés permet de s’assurer que les process de traitement soit toujours disponibles.

Toutes les ressources intéressantes se trouvent ici !

Posted in Azure, Français | Tagged , , | Leave a comment

Azure WebJobs Part 2 : Activer un job à partir d’une queue

Je remarque que j’ai complètement zappé de terminer mes tutos des webJobs. La version release 1.0 du SDK vient de sortir c’est donc une bonne occasion pour rattraper mon retard, surtout que certains choses ont changé et d’autre choses se sont améliorés sur le SDK.

Dans cette deuxième partie, nous allons voir comment déclencher un WebJob à partir d’une file d’attente de stockage Azure (Azure Queue Storage). Pour cela nous aurons besoin d’utiliser le SDK Web Job Azure disponible en package Nuget

Nous restons dans le scénario initiale qui est de déclencher une purge d’une base de données.

Création de l’application Console

Dans un premier temps , le sdk nous permet de configurer dans le corps de la méthod Main un host d’exécution. Ce host sera responsable d’analyser le code de notre application pour déterminer les différentes méthodes et points d’entrée de nos Jobs.

Cela se fait avec les deux déclarations suivantes :

 
var host = new JobHost(); 
host.RunAndBlock(); 

 

Le sdk a besoin de différentes chaines de connexion pour fonctionner, il y en a au moins 3 :

  • la chaine de connexion pour le dashboard :
  • la chaine de connexion
    • pour écouter sur des blobs ou  sur des queue storage
    • pour écouter sur des souscription de service bus

Par défaut, vous devez donc ajouter dans votre fichier de configuration les appSettings suivant :

  • AzureWebJobsDashboard
  • AzureWebJobsStorage
  • AzureWebJobsServicebus

Il est ensuite possible de spécifier les connexions que l’on souhaite dans le constructeur de la class JobHost.

Ce code va analyser les classes publiques ainsi que les méthodes publiques et statiques de notre assembly  afin de mettre en place des listeners sur les Queues Storage ou encore les Blob Storage.

Dans cette exemple, nous nous intéresseront au Queue :

 
public static void ListenToQueue([QueueTrigger("sqlpurge")] Table table) 
{ 
  var connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 
  var queryString = String.Format("DELETE FROM dbo.{0} where [DateTimeUtc] < convert(datetime2,'{1}') ", table.Name,DateTime.UtcNow.AddMinutes(-3000).ToString("O")); 
  using (var connection = new SqlConnection( connectionString)) 
    { 
      var command = new SqlCommand( queryString, connection); 
      connection.Open(); 
      var query = command.ExecuteNonQuery(); 
      Console.WriteLine("Job éxecuté @ {0} : nombre de ligne supprimée : {1}", DateTime.UtcNow, query); 
    } 
} 

la signature de la méthode avec l’attribut QueueTrigger(Name), nous permet d’indiquer que nous souhaitons écouter sur une Queue de Storage Azure.

Dès qu’un message sera publier dans la Queue qui a le nom “SQLPurge”, il sera traduit par le SDK en objet de type Table et nous pourrons directement l’utiliser. L’objet de type Table est le suivant.

 
 
/// Ex: { "Name" : "Logs" } 
public class Table 
{ 
  public string Name { get; set; } 
} 

On peut lancer le WebJob en débug local sur la machine (on ne peut pas par contre se brancher sur l’émulateur Azure Storage) :

image

La méthode a bien été trouvée.

Nous allons donc publier le message au format JSON dans la queue :

image

Nous voyons qu’il est bien reçu par la méthode et parsé pour avoir un objet .Net.

Il est possible de configurer le délai de polling dans la queue mais par défault, depuis la version 1.0rc du SDK ce délai est de 1min.

Cette configuration est effectué au démarrage du host avec la classe suivante :

 
new JobHostQueuesConfiguration() 
{ 
  BatchSize = 10, 
  MaxDequeueCount = 1, 
  MaxPollingInterval = TimeSpan.FromMinutes(1) 
} 
Posted in Azure, Français | Tagged , | 1 Comment

Azure Hybrid Connexion : erreur à la configuration

Aujourd’hui, je me suis intéressé aux connexion hybride disponible sur Azure. J’ai eu un petit soucis lors de la configuration, chaque fois que je souhaitais rajouté un endpoint de communication ou monitorer mes connections hybrides depuis mon manager (Get-HybridConnection, etc…), j’avais une erreur du type :

Install failed! Exception: System.Management.Automation.CmdletInvocationException: Une ou plusieurs erreurs se sont produites. —> System.AggregateException: Une ou plusieurs erreurs se sont produites. —> System.Net.Http.HttpRequestException: An error occurred while sending the request. —> System.Net.WebException: Impossible de se connecter au serveur distant —> System.Net.Sockets.SocketException: Aucune connexion n’a pu être établie car l’ordinateur cible l’a expressément refusée 127.0.0.1:9352

 

Egalement, les commandes powershell se branche sur le service Hybrid Connection Listener. Le Listener peut se connecter mais les opérations de management ne sont pas possible:

image

Après quelques recherches, je vois qu’il existe un journal d’évènements qui s’est mis en place sur la plateforme (Microsoft/ServiceBus/Client/Operational) :

image

 

Dans le journal d’évènement, je vois une erreur beaucoup plus explicite :

HybridConnectionManager Management Server error: HTTP n’a pas pu inscrire l’URL http://+:9352/. Le processus n’a pas de droits d’accès à cet espace de noms (pour plus d’informations, voir http://go.microsoft.com/fwlink/?LinkId=70353).

Je suis sur une plateforme Windows 8.1 avec l’ACL d’activé, je dois donc penser à bien déclarer mes urls et mes espaces de noms authorisés. Un petit tour sur la commande dos en mode administrateur pour faire un netsh :

netsh http add urlacl url=http://+:9352/ user=”Tout le monde” (everyone, en fonction de la langue)

Après surtout, il faut penser à redémarrer le listener Hybrid Connection pour prendre en compte la nouvelle configuration des URLACL :

net stop HybridConnectionManager

net start HybridConnectionManager

et hop le tour est joué :

image

Posted in Azure, Français, Microsoft | Tagged , | Leave a comment

Authentification dans le Service Bus Azure : ACS vs Shared Access Signature (SAS)

 

Récemment, une question est tombée sur la liste de diffusion MVP concernant l’authentification au niveau du service pour le Service Relais, les publications dans les Topics et les souscriptions.

Je me permets donc de vous faire un petit résumé dans ce billet (issue de la discussion ainsi que du post de Brent Stineman que vous pouvez lire ici)

Pour ceux qui utilise le service bus depuis longtemps, vous avez déjà dû utiliser le portail Access Control Service pour configurer vos droits d’authentification au service bus. Le lien pour accéder à ce portail ACS était accessible depuis les informations de connexion au niveau global de votre espace de nom de service bus.

 

Continue reading

Posted in Français | Tagged , | Leave a comment

Azure WebJobs Part 1 : Créer son premier azure web job

Aujourd’hui, nous allons voir comment créer un simple WebJobs à partir d’un process de type console. Pour rappel, le WebJobs supporte les types de scripts suivant :

  • cmd, .bat, .exe
  • .sh
  • .php (avec l’utilisation de Php)
  • .py (avec l’utilisation de Python)
  • .js (avec l’utilisation de Nodejs)
  • powershell

Le but du webjob est d’illustrer le scénario suivant :

Purger la base de données SQL de log d’un web site en gardant une rétention de N Jours.

Nous allons donc créer un petit programme console permettant de se connecter à la base de données et faire la purge de la table de log.

Continue reading

Posted in Azure, Français, Microsoft | Tagged , , | 1 Comment

A la découverte des Windows Azure Web Jobs (Intro)

Aujourd’hui partons à la découverte des Web Jobs de la plateforme Azure. Kezako? Traditionnellement, lorsque vous avez besoin de mettre en place des taches de fond dans vos architectures azure, vous développez des scripts C# que vous exécutez dans un worker rôle . Dans un Site Web, on peut également avoir besoin d’exécuter des taches de fond, pour créer des flux RSS par exemple, ou recalculer des statistiques de navigation. Les Web Jobs sont la pour nous faciliter la vie dans la création de taches de fond ou l’exécution de scripts. Leur atouts est de grandement simplifier l’expérience du développeur. Continue reading

Posted in Azure, Français, Microsoft, Tutoriel | Tagged , , , , , | Leave a comment