Tutorial – apprenez à vaporiser votre blog dans les nuages grâce à BlogEngine.Net et Windows Azure

En partant de zéro, je vous propose de voir les étapes à suivre pour mettre en place une plateforme de blog basée sur l’excellent BlogEngine.Net au sein de notre plateforme de Cloud Computing Windows Azure. Le but du jeu étant de vous permettre d’arriver au résultat disponible ici : https://tektekpocket.cloudapp.net/ hébergé dans les nuages.

Pré-requis à installer sur votre machine avant toutes choses:

- Visual Studio 2008 SP1, Visual Studio 2010 Beta 1 ou Visual Web Developer 2008 SP1 (gratuit)
- Le SDK d’Azure
- Les Tools Azure pour Visual Studio 2008 SP1

Phase 1 : préparation du coté de la plateforme Windows Azure 

1 – Créez-vous un LiveID (sur www.hotmail.fr par exemple) si vous n’en n’avez pas déjà un puis associez le au portail Azure en vous rendant sur : https://www.azure.com et cliquez sur « Sign In »

3907369608

Ensuite choisissez « Windows Azure » :

3907369972

Une fois le bon LiveID (ici tektekpocket) choisit, vous pouvez l’associer au portail :

3907370084 3907370220

Ici, on vous demande un token (une sorte de clé) pour pouvoir continuer. Dans notre cas, nous ne l’avons pas encore demandé alors cliquez sur « Cancel » :

3906591695

2 – Il faut donc générer une clé pour créer une application Windows Azure. Pour cela, rendez-vous ici : https://www.microsoft.com/azure/register.mspx et cliquez sur « Register for Azure Services ». Vous serez conduit sur la plateforme Microsoft Connect :

3907370608

Remplissez les différentes informations demandées puis vous arrivez là. Cliquez sur « Clés de produits » puis « Demandez une nouvelle clé de produit » puis « Obtenir la clé » :

3906592233 3907371076 3907371280

Votre clé sera alors générée immédiatement :

3906592609

Copiez-la dans un endroit sûr, à l’abri du soleil et de l’humidité.

3 – On peut désormais retourner sur le portail pour utiliser cette clé. Pour cela, rendez-vous dans la partie « Account » puis cliquez sur « Manage My Tokens » puis entrez la clé obtenue ci-dessus dans la zone de texte. Cliquez sur « Claim Token ». Cela vous permettra d’activer l’utilisation du service de calcul (Compute) et de stockage de Windows Azure. Retournez sur « Summary » et cliquez sur le nom du projet (ici PDC08 CTP) :

3906592743

Cliquez ensuite sur « + New Service » :

3907371676

Vous arrivez sur cette page. On va commencer par créer un espace de stockage en cliquant sur « Storage Account » :

3906593017

Remplissez les champs en fonction de vos préférences puis cliquez sur « Next » :

3907371900

Donnez ensuite un nom unique (sous forme d’URL) à votre espace de stockage puis cliquez sur « Create » :

3907372044

Vous arrivez alors sur cette page récapitulative :

3906593481

Pensez à bien noter le nom de votre compte (ici tektek par exemple) et au moins la clé primaire. Nous allons nous en servir plus tard pour BlogEngine.Net. Au pire, vous pourrez toujours revenir vers cette page pour noter à nouveau l’ensemble.

4 – Une fois l’espace de stockage alloué, il faut indiquer que l’on souhaite également pouvoir utiliser la plateforme d’hébergement d’applications (Hosted Services). Pour cela, revenez à cette page et cliquez sur « Hosted Services » :

3907372284

Remplissez à nouveau les informations demandées :

3906593707 3906593859

Une fois ces étapes suivies, vous arrivez sur le portail d’administration de la plateforme d’exécution dans le nuage proposant un environnement de pré-production (Staging) et de production.

3906593923

Les nuages sont prêts à nous accueillir. Revenons quelques temps sur terre avant de s’envoler à nouveau.

Phase 2 : téléchargement de BlogEngine version Azure et exécution de la solution dans l’environnement de simulation

1 – Téléchargez une version de BlogEngine. NET modifié pour fonctionner sur le storage d’Azure (Table & Blob) ici : https://kleartouch.codeplex.com/ . A noter, pour les spécialistes, que le Membership Provider d’ASP.NET (pour l’authentification des utilisateurs) a également été porté pour fonctionner sur Azure dans le code fourni.

3906593979

2 – Une fois le fichier ZIP récupéré, il faut le « débloquer » en allant dans les propriétés :

3906594145

Sinon Visual Studio râlera un peu en disant qu’il a tendance à ne pas faire confiance au contenu. Cela n’empêche pas le bon fonctionnement, mais c’est quand même mieux de faire les choses proprement. ;-)

3 – Lancez Visual Studio 2008 en mode administrateur et ouvrir le .SLN qui va bien : BlogEngine.Azure.sln

3907372908

Note : il est important de lancer Visual Studio 2008 en mode administrateur pour pouvoir lancer la « fabrique » (l’environnement de simulation) d’Azure. Sinon, Visual Studio râlera à nouveau mais cette fois-ci vous empêchera d’aller plus loin lorsque vous tenterez d’exécuter l’application. Sacré VS !

4 – Dans la version que nous avons récupérée avec Stan, il y avait un léger souci empêchant la compilation. Pour corriger le problème, il faut enlever un thème qui semble corrompu pour l’instant. Supprimez le répertoire « n3oEco » de l’arborescence du projet BlogEngine dans la fenêtre « Solution Explorer » de Visual Studio 2008 :

3906594655

Compilez l’ensemble, vous ne devriez pas avoir d’erreurs de compilations. Vous n’aurez peut-être pas à faire de même si l’auteur du code corrige l’ensemble d’ici là (je m’en vais lui indiquer).

5 – Il faut préparer l’environnement de simulation local à pouvoir recevoir le schéma de tables retenues par BlogEngine. Tout d’abord, faites bouton-droit sur BlogEngine.Azure et cliquez sur « Create Test Storage Tables ».

3906594387

Si tout se passe bien, vous aurez ce gentil message en retour :

3907373396

Ensuite, positionnez le projet BlogEngine.Setup comme projet de démarrage :

3906594799

Lancez ensuite (si ce n’est déjà fait), l’environnement de simulation du stockage d’Azure : « Development Storage » :

3907373598

Puis vérifiez bien que la base de données « BlogEngineAzure » est celle active par défaut:

3907373670 3906595139

Pour finir, exécutez ce programme Console en appuyant sur F5 :

3907373886

6 – Repositionnez le projet BlogEngine.Azure comme projet de démarrage :

3907373954

Puis lancez le projet Web Azure avec le bon vieux F5 afin de vérifier que tout fonctionne correctement.

3906595667

Nous avons pour l’instant confirmé que la plateforme de blog BlogEngine.NET fonctionne correctement dans l’environnement de simulation d’exécution de Windows Azure appelée la « Development Fabric » disponible sur https://127.0.0.1:81. Nous utilisons également pour l’instant des données disponibles dans l’environnement de simulation de stockage d’Azure appelée donc « Development Storage » disponible sur https://127.0.01:1000 (blob) et https://127.0.0.1:1002 (table). Les données sont accessibles via REST. Nous n’utilisons pas ici les notions de queues.

Vous pouvez tenter de créer quelques posts, de modifier quelques paramétrages, etc. Login par défaut : admin/admin.

Phase 3 : exécution locale dans l’environnement de simulation mais utilisation des données « Live » depuis Windows Azure

Avant de tout basculer en production, une bonne pratique consiste à d’abord préparer la structure et les données de nos tables dans Windows Azure (et donc plus localement en simulation) mais de laisser la partie exécution (ASP.NET) en local. Cela permet ainsi de tester, débugger et ajustez quelques réglages en utilisant un jeu de tests réel en production tout en ayant une expérience de débogage immédiate et simple. Ce n’est effectivement plus le cas lorsque vous poussez votre code dans Windows Azure : pas question d’attacher notre débuggeur préféré au processus qui tournent dans les nuages !

1 – Pour cela, il faut modifier le ServiceConfiguration.cscfg du projet BlogEngine.Azure pour se connecter désormais vers Windows Azure Storage.

Voici un exemple de nouveau fichier .cscfg (pensez à bien utiliser votre clé et le nom du compte généré sur le portail Azure pour pointer vers votre propre stockage) :

<?xml version="1.0"?>

<ServiceConfiguration serviceName="BlogEngine" xmlns="https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">

  <Role name="BlogEngine">

    <Instances count="1" />

    <ConfigurationSettings>

      <Setting name="LogAllRequests" value="false" />

      <Setting name="LogFailedRequests" value="true" />

      <!--<SETTING NAME="BLOBSTORAGEENDPOINT" VALUE="https://127.0.0.1:10000" />

      <SETTING NAME="QUEUESTORAGEENDPOINT" VALUE="https://127.0.0.1:10001" />

      <SETTING NAME="TABLESTORAGEENDPOINT" VALUE="https://127.0.0.1:10002" />

      <SETTING NAME="ACCOUNTNAME" VALUE="DEVSTOREACCOUNT1" />

      <SETTING NAME="ACCOUNTSHAREDKEY" VALUE="EBY8VDM02XNOCQFLQUWJPLLMETLCDXJ1OUZFT50USRZ6IFSUFQ2UVERCZ4I6TQ/K1SZFPTOTR/KBHBEKSOGMGW==" />-->

      <Setting name="BlobStorageEndpoint" value="https://blob.core.windows.net"/>

      <Setting name="QueueStorageEndpoint" value="https://queue.core.windows.net"/>

      <Setting name="TableStorageEndpoint" value="https://table.core.windows.net"/>

      <Setting name="AccountName" value="tektek"/>

      <Setting name="AccountSharedKey" value="votreprimaryaccesskeyici"/>

    </ConfigurationSettings>

  </Role>

</ServiceConfiguration>

En jaune se trouve les parties que vous devez modifier : le nombre d’instances de serveurs Web que vous souhaitez allouer au blog, le nom du compte de votre stockage Windows Azure et la clé primaire générée précédemment. Le nombre d’instance peut être augmenté plus tard une fois le projet déployé pour pouvoir répondre dynamiquement à un pic de charge suite à une opération marketing par exemple puis ensuite être redescendu à sa valeur initiale. C’est tout l’intérêt du coté élastique proposé par une plateforme de Cloud Computing.

2 – Il faut ensuite modifier le fichier web.config du projet BlogEngine. Après cette ligne de XML :

<add key = "DefaultSessionContainerName"/>

Utilisez ces lignes à la place de celles d’origine (n’oubliez toujours pas d’y insérer vos propres informations de connexion !) :

<!--<add key = "BlobStorageEndpoint" value="https://127.0.0.1:10000"/>

<add key = "QueueStorageEndpoint" value="https://127.0.0.1:10001"/>

<add key = "TableStorageEndpoint" value="https://127.0.0.1:10002"/>

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

<add key = "AccountSharedKey" value="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="/>-->

 

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

<add key = "QueueStorageEndpoint" value="https://queue.core.windows.net"/>

<add key = "TableStorageEndpoint" value="https://table.core.windows.net"/>

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

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

3 – Il faut falloir maintenant provisionner vos tables dans le nuage pour faire pointer la plateforme de blog vers des données en production.

Pour cela, allez dans les propriétés du projet BlogEngine.Setup puis dans l’onglet Debug et entrez d’abord le nom de votre compte de stockage suivi de votre clé dans la zone de texte « Command Line arguments »

3907374284

Remettez ensuite BlogEnginer.Setup comme projet de démarrage et lancez le programme en mode console pour créer les tables dans le storage Cloud :

3906595991

Petit tip : pour analyser/débugger/comprendre le contenu et le fonctionnement du stockage Windows Azure (Table, Blob, Queue), je ne serais que trop vous recommander de télécharger 2 petits outils disponibles gratuitement sur codeplex :

- Azure Storage Explorer : https://azurestorageexplorer.codeplex.com/
- Azure Blob Explorer uniquement dédié à la manipulation des blobs (nos fichiers dans le cloud en quelques sortes) et plus à l’aise dans cette tâche que le précédemment: https://blobexplorer.codeplex.com/

Avec Azure Storage Explorer, on peut alors voir la structure des tables créées, retrouver les posts effectués, analyser les logs de BlogEngine pour trouver d’éventuels problèmes, etc… Le tout en WPF s’il vous plait !

3906596167

4 – Remettez le projet BlogEngine.Azure comme projet de démarrage et relancez le localement afin de vérifier que tout fonctionne : exécution locale, stockage Cloud. Si vous avez créé des posts dans le stockage local (Development Storage), vous ne devriez logiquement ne plus les voir car nous sommes désormais connecté au storage de Windows Azure (le vrai !).

Dernière étape : il nous faut maintenant pousser la solution (WebRole) également dans les nuages.

Phase 4 : publication du WebRole dans Azure pour une exécution complètement gérée par le cloud (Vers l’infini et au-delà !)

1 – Pour cela, rien de plus simple ! Publiez le package en faisant bouton-droit sur BlogEngine.Azure :

3907374768

2 – Ensuite, une fenêtre d’exploration de fichiers est ouverte à l’endroit où se trouve les 2 paquets à télécharger vers Windows Azure. Le portail Windows Azure est également affiché dans une nouvelle fenêtre du navigateur.

Cliquez sur le nom du projet, puis ensuite sur la partie WebRole pour revenir à cette fenêtre :

3906593923

Cliquez sur « Deploy » et remplissez cette fenêtre en copiant/collant le chemin vers chacun des 2 fichiers proposés dans l’explorateur de fichiers puis cliquez à nouveau sur « Deploy » :

3906596337 3906596427

Quelques secondes plus tard, vous revenez sur cet écran. Cliquez alors sur « Run » pour lancer les machines virtuelles que vous vous êtes octroyé dans le fichier de configuration (1 par défaut) :

3907375070

Une fois les machines démarrées et prêtes à être utilisées, vous obtiendrez cet écran :

3906596575

L’environnement de pré-production est disponible. Cliquez sur l’URL un peu étrange pour tester que la plateforme de blog fonctionne désormais correctement en mode 100% Cloud (sans IT ajouté).

3 – Pour basculer en production, il suffit de cliquer sur cet icône :

3906596671

Et dire que vous êtes d’accord :

3907375344

Voici alors l’état final de la page d’administration :

3907375452

Ensuite, imaginons qu’une nouvelle version de la plateforme de blog soit disponible, il suffit de la déployer en pré-production branchée sur les mêmes données que la production. Cela vous permet facilement de tester son comportement sur l’URL un peu spéciale avant de cliquer sur le bouton de bascule pour déployer la nouvelle version en production après avoir réalisé une série de tests pour vous assurer de ne rien casser.

De même, si votre blog rencontre (comme le mien je l’espère !) un succès inattendu induisant un ralentissement suite à un nombre important d’utilisateurs, il vous suffit simplement de cliquer sur « configure… » puis de passer le nombre d’instances Web de 1 à N afin de répondre à la charge. Le tout sera alors déployé, configuré, « load-balancé » et mis en ligne en quelques minutes. Faisons le test en passant le nombre d’instances de 1 à 2 puis en cliquant sur « Save » :

3906597093

La page d’administration nous notifie qu’une mise à jour est en cours :

3907375708

Quelques minutes plus tard…

3907375772

Nous avons bien désormais 2 serveurs Web capables de prendre les requêtes en frontal. Tout cela, sans avoir du apprendre à maîtriser un Load-Balancer, à modifier notre code, à configurer de nouvelles machines ni à republier notre application. La plateforme Azure s’est occupé de tout automatiser pour assurer le succès de votre plateforme de blogging.

Disclaimer : malgré toute la puissance et l’efficacité proposée par la plateforme de services Azure, il n’existe pas encore de moyens techniques efficaces pour blogguer à votre place et assurer le succès de votre blog de manière totalement automatique. Vos petits doigts et votre talent seront donc toujours de rigueur !

Petite note : pendant la mise à jour, votre blog peut ne plus être disponible. Ce n’est donc pas une bonne idée de le faire en production. Mieux vaut donc le faire en pré-production et ensuite basculer l’ensemble. Cela permet d’éviter d’avoir un éventuel arrêt de services.

Aller, profitez en bien : pour l’instant tout est gratuit ! :)

David, back from the Sky.