Synchronisation entre un répertoire local et un conteneur Azure

L’utilisation d’un outil permettant une synchronisation différentielle pour maintenir une cohérence entre 2 serveurs ou entre des solutions locales on-premise et dans le Cloud comme Windows Azure peut s’avérer très utile voir indispensable pour le transfert des données (ouvertes) de manière optimisée.

Cependant qu’en est-il de ces outils de préférence accessibles à tous et simples d’utilisation, compatibles avec Windows Azure à l’heure actuelle ?

Nous retrouvons aujourd’hui un gros panel d’outils tel que CloudBerry, permettant d’envoyer des fichiers vers un containeur Azure et inversement. Seulement rares sont ceux qui permettent une synchronisation unidirectionnelle ou bidirectionnelle, différentielle, par lot et autorisant l’automatisation de cette tâche récurrente. C’est donc après quelques recherches que nous avons trouvé un outil répondant en partie à nos besoins, en l’occurrence AzureBlobSync, un outil sous licence libre disponible sur la forge CodePlex. Basé sur la technologie Microsoft Sync Framework, AzureBlobSync permet de synchroniser un répertoire local et un conteneur Azure via l’invite de commande.

Ne disposant pas de l’ensemble des fonctionnalités désirées, à savoir la possibilité de définir un type de synchronisation (unidirectionnelle, bidirectionnelle, gestion des collisions), nous proposons aujourd’hui au travers de ce billet une nouvelle version offrant la possibilité de définir :

  1. Le type de synchronisation souhaité dans les paramètres de la ligne de commande ;
  2. Et une configuration simplifiée des comptes de stockage via un fichier de configuration.

Pour mémoire, Microsoft Sync Framework est un kit de développement mettant à disposition une plateforme de synchronisation complète qui permet la collaboration et l’accès hors connexion aux applications supportant tout type de données. Dans notre cas, la synchronisation sera fondée sur des fichiers.

Voyons à présent comment utiliser ce nouvel AzureBlobSync. Les sources et le binaire correspondant sont disponibles en pièce jointe de ce billet dans le fichier archive éponyme proposé.

Après avoir copié le fichier AzureBlobSync.zip en local, double-cliquez sur celui-ci pour décompresser son contenu dans l'emplacement de votre choix sur votre disque dur. Ouvrez ensuite depuis cet emplacement le fichier AzureBlobSync.exe.config situé sous le dossier Bin avec votre éditeur de texte favori et saisissez les identifiants du compte de stockage :

  • AccountName : Nom du compte de stockage sur lequel doit avoir lieu la synchronisation ;
  • AccountSharedKey : Clé d’accès primaire ;
  • AccountStorageURL : Url blob du compte de stockage de la forme https://[nomducompte].blob.core.windows.net.

Exemple :

<?xml version="1.0"?>

<configuration>

  <appSettings>

    <add key="AccountName" value="ogdifranceconfig"/>

    <add key="AccountSharedKey" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=="/>

    <add key="AccountStorageURL" value="https://ogdifranceconfig.blob.core.windows.net"/>

  </appSettings>

</configuration>

La configuration d’AzureBlobSync étant à présent terminée, passons à l’utilisation de l’outil en ligne de commande.

Ouvrez un invite de commande dans le dossier Bin puis appuyez sur la touche ENTREE pour afficher les paramètres disponibles.

image

Ces paramètres sont au nombre de trois :

  • -container : Nom du conteneur Azure stocké dans le blob storage ;
  • -path : Chemin absolu vers le répertoire local à synchroniser ;
  • -syncdirection : Type de synchronisation à utiliser lors du lancement du programme.

Ce dernier paramètre rend en charge 4 options :

  1. Upload : Synchronisation unidirectionnelle du répertoire local vers le conteneur Azure
  2. Download : Synchronisation unidirectionnelle du conteneur Azure vers le répertoire local
  3. DownloadUpload : Synchronisation bidirectionnelle entre le répertoire local et le conteneur Azure. Cette option résout les conflits de modification en donnant la priorité aux fichiers locaux.
  4. UploadDownload : Synchronisation bidirectionnelle entre le répertoire local et le conteneur Azure. Cette option résout les conflits de modification en donnant la priorité aux fichiers distants présents dans le conteneur Azure.

Exemples de synchronisation

Terminons ce billet par des exemples concrets mettant en scène une synchronisation dans un premier temps unidirectionnelle et dans un second temps bidirectionnelle sur la plateforme OGDI DataLab.

Nous allons prendre, dans ces exemples, le cas d’une synchronisation des données stockées sur OGDI DataLab dans le containeur converteddata du compte de stockage de la configuration OGDI DataLab. Ce containeur contient les jeux de données téléchargés aux formats csv et xml.

L’objectif ici est de récupérer les fichiers lors d’un ajout ou d’une modification pour les envoyer sur un serveur distant et permettre un transfert simplifié et optimisé des données.

Synchronisation unidirectionnelle : Windows Azure vers Local

AzureblobSync .exe–container converteddata –path "C:\TEMP\OGDIDataLab\AzureData"–syncdirectionDownload

Les fichiers sont rapatriés depuis le conteneur Azure une première fois dans leur totalité puis, lors des prochaines synchronisations, aura lieu une synchronisation différentielle. Seulement les fichiers modifiés ou ajoutés sur Windows Azure seront alors récupérés.

Synchronisation bidirectionnelle avec priorité aux données distantes

AzureblobSync .exe–container converteddata –path "C:\TEMP\OGDIDataLab\AzureData"–syncdirectionDownloadAndUpload

Les fichiers sont rapatriés depuis le conteneur Azure une première fois dans leur totalité puis les fichiers locaux sont envoyés dans le conteneur Azure. Lors des prochaines synchronisations aura lieu une synchronisation différentielle qui donnera la priorité aux fichiers présents sur Windows Azure en récupérant les fichiers modifiés ou ajoutés et enfin téléchargera sur Windows Azure les fichiers locaux.

AzureBlobSync.zip