Windows Azure : Connecter un rôle PAAS à une instance de type IAAS

09 janvier 2013

Windows AzureWindows Azure est depuis le mois de juin 2012 une plateforme Cloud riche qui permet à la fois d’utiliser des services en mode Platform As A Service (PAAS), qu’en mode Infrastructure As A Service (IAAS).  Dans ce tutoriel, je vais vous montrer comment connecter une application de type PAAS, soit un site Web hébergé dans un Cloud Service à une instance MongoDb hébergée sur une machine Linux en mode IAAS. Nous allons donc dans cet article, identifier les différentes briques d’Azure que nous avons besoin, et nous allons voir comment les mettre en place pour obtenir le résultat escompté.

De quoi avons-nous besoin ?

A mon avis, tout projet Azure doit commencer par cette question, puisqu’à ce jour, il existe énormément de services sur la plateforme, cependant il n’est pas utile de tous les utiliser au sein d’un même projet.

Il nous faut donc :

  • 1 Cloud Service qui hébergera un Web Role pour se connecter à notre base MongoDb
  • 1 machine virtuelle tournant sous linux qui hébergera MongoDb
  • 1 réseau privé virtuel afin de connecter le Web Role et notre machine virtuelle sans à avoir à passer par l’extérieur du réseau.

Nous aurons par ailleurs besoin, d’un compte de stockage afin de stocker notre machine virtuelle et l’application que nous allons déployer.

Etape n°1 : Création du réseau privé virtuel

Il faut donc vous rendre sur le portail Windows Azure  : https://manage.windowsazure.com  , ensuite dans la partie réseau, vous allez créer un groupe d’affinité.

Création d'un groupe d'affinité. Au passage, pour rappel le groupe d’affinité permet à Windows Azure de “regrouper” vos services au plus près. Ainsi les différentes instances ou compte de stockage que vous allez créer au sein de ce groupe d’affinité seront proches au sein du DataCenter. Bien entendu cela ne diminue pas le service de disponibilité de l’application.

Maintenant que nous avons créé ce groupe d’affinité, nous pouvons créer un réseau virtuel, donc toujours dans la partie réseau, vous allez ajouter un nouveau réseau virtuel.

Cela se passe en 3 étapes, la première consiste à nommer son réseau virtuel, et à lui définir son groupe d’affinité, comme on peut le voir ci-dessous :

Création d'un réseau virtuel - Etape 1

La seconde étape vous permet de définir les adressages de vos machines au sein de votre réseau.

Création d'un réseau virtuel - Etape 2

Comme on peut le voir, dans mon cas je me réserve jusqu’à la possibilité d’avoir 255 machines dans mon sous ensemble Front.

La dernière étape vous permet d’ajouter un serveur DNS personnalisé à votre réseau virtuel, et aussi à le connecter à votre réseau local.

create virtual network 3

Ici, nous n’avons pas besoin de le relier à un réseau local, nous n’utiliserons donc pas cette fonctionnalité.

Par contre, nous avons besoin d’un accès à internet pour télécharger mongodb, et faire les différentes updates de linux, j’ai donc ajouté le DNS de Google.

Vous pouvez maintenant valider la création de votre réseau, cependant attention, actuellement il n’est pas possible de modifier des réseaux virtuels, par exemple pour ajouter un serveur DNS ou changer les plages d’adresses IP. Pour le modifier il faut en recréer un et redéployer tous vos services.

Etape n°2 : Création de la machine Linux

Pour cette étape nous n’allons pas utiliser le portail Windows Azure, puisque celui-ci ne permet pas de créer une machine virtuelle sous Linux tout en l’ajoutant à un réseau virtuel. Pour cela il faut que nous utilisions PowerShell, à noter que vous pouvez utiliser ce langage de script pour toutes vos interactions avec Windows Azure.

Pour installer ce dernier, je vous conseille fortement de passer par le logiciel Web Platform Installer, même pour les autres briques de Windows Azure.

On va donc créer un script powershell que l’on puisse réutiliser par la suite, je vais donc vous donner celui que j’ai conçu pour cet exemple :

/*
    Déclaration des variables
*/

$dclocation = 'West Europe'

$adminuser = 'MYLOGIN'
$adminpassword = 'MYPASSWORD'

$subid = 'MSDN-MVP'
$cloudservicename = 'wwomongodb'
$vmname = 'mongodb'
$affinitygroup = 'mongonetwork'
$imagename = 'b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-12_10-amd64-server-20121218-1-en-us-30GB'
$subnet = 'BackEnd'
$vnetname = 'mongonetwork'
$storage = 'mymongostorage'

/*
    Import de mon fichier publish settings
*/
Import-AzurePublishSettingsFile 'C:\Credentials Azure.publishsettings'

/*
    Modification de mon abonnement par défaut
*/
Set-AzureSubscription -DefaultSubscription 'MSDN MVP'
Set-AzureSubscription -SubscriptionName 'MSDN MVP' -CurrentStorageAccount $storage

/*
    Création des paramètres de la VM
*/
$vm = New-AzureVMConfig -Name $vmname -InstanceSize ExtraSmall -ImageName $imagename |
        Add-AzureProvisioningConfig -Linux -LinuxUser $adminuser -Password $adminpassword |
        Set-AzureSubnet -SubnetNames $subnet

/*
    Création de la VM
*/
New-AzureVM -ServiceName $cloudservicename -AffinityGroup $affinitygroup -VNetName $vnetname -VMs $vm

Au passage, vous pouvez voir comme astuce, que j’ai changé la valeur par défaut de mon abonnement Azure, sinon il utilise un autre compte, sur lequel je n’ai déjà plus de crédit. Et ainsi toutes les opérations que j’effectue par la suite de ce script sont liées à ce compte.

L’ISO que j’utilise provient de la gallerie de Windows Azure, pour récupérer ce dernier, il vous suffit d’ouvrir une console PowerShell, et de taper la commande Get-AzureVMImage afin de retrouver la liste de tous les isos disponibles sur le portail.

Liste des isos disponibles dans la gallerie

A noter, qu’il faudrait vérifier la disponibilité des noms des machines, ce que je ne fais pas ici.

Maintenant, vous pouvez aller sur le portail et vérifier que votre machine virtuelle est bien connectée, et surtout que cette dernière soit bien enregistré dans votre réseau virtuel comme on peut le voir ci dessous :

Liste des machines du sous réseau BeckEnd

Etape n°3 : Installation de MongoDB

Pour cela il vous faut vous connecter à votre machine virtuelle, avec un client SSH tel que PuTTy. Cependant attention, lorsque vous allez vous connecter, il ne faut pas utiliser le port 22, car celui-ci a été routé sur un autre port public lorsque vous avez mis votre machine dans votre réseau virtuel.

Connexion avec Putty

Pour le reste de l’installation, soit vous pouvez suivre ce tutoriel, soit suivre celui-ci, vu que j’utilise leurs commandes.

Avant de commencer à l’installer, il vous faut mettre à jour les outils de management de votre distribution linux, ce n’est pas obligatoire, mais cependant je vous le conseille fortement. Pour cela, il vous suffit de taper la commande suivante :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

Après il vous faut déclarer le lien vers le site de 10gen, et mettre celui ci dans le fichier 10gen.list. Je vous conseille d’utiliser vim via cette commande suivante :

sudo vim /etc/apt/sources.list.d/10gen.list

Il vous faudra après ajouter cette ligne dans votre fichier, puis de quitter (commande :wq)

deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

Une mise à jour des packages linux s’impose donc !

sudo apt-get update

Ensuite, il n’y a plus qu’à réaliser une installation de mongodb via cette commande :

sudo apt-get install mongodb-10gen

Je vous conseille par la suite de redémarrer votre instance mongodb.

sudo service mongodb restart

Et pour finir je vous suggère de faire un test d’insertion et de lecture de vos données.

will@mongodb:~$ mongo --shell
MongoDB shell version: 2.2.2
connecting to: test
type "help" for help
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see

http://docs.mongodb.org/

Questions? Try the support group

http://groups.google.com/group/mongodb-user

> db.test.save( { a: 42 })
> db.test.find()
{ "_id" : ObjectId("50eb45b129761696796ab69d"), "a" : 42 }

Etape n°4 : Création de votre Cloud Service

Il faut donc commencer par créer le rôle que vous souhaitez, pour moi ce sera un simple Web Role.
On va commencer par s’occuper de sa configuration pour l’ajouter dans le réseau, et bien entendu vu que cette fonctionnalité est relativement jeune sur Azure, il n’y a pas encore d’outils tout faits pour cela ! Mais bon, ce n’est pas ce qui nous empêche de l’utiliser !

Alors pour cela, il vous faut éditer le fichier de configuration Azure que vous voulez modifier, dans mon cas le fichier ServiceConfiguration.Cloud.cscfg et d’y ajouter la configuration réseau que vous désirez :

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="ConnectPAASAndIAAS" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
  <Role name="MyWebRole">
    <Instances count="1" />
    <ConfigurationSettings>
    </ConfigurationSettings>
  </Role>
  <NetworkConfiguration>
    <VirtualNetworkSite name="mongonetwork" />
    <AddressAssignments>
      <InstanceAddress roleName="MyWebRole">
        <Subnets>
          <Subnet name="FrontEnd" />
        </Subnets>
      </InstanceAddress>
    </AddressAssignments>
  </NetworkConfiguration>
</ServiceConfiguration>

Ensuite vous allez pouvoir développer la brique MongoDb qui vous intéresse, par exemple dans le cas de mon test, j’ai uniquement modifié ma page d’accueil.

public ActionResult Index()
{
    var cnxString = "mongodb://10.0.1.4";
    var client = new MongoClient(cnxString);

    var server = client.GetServer();
    var database = server.GetDatabase("test");

    var collection = database.GetCollection("test");

    ViewBag.Message = collection.AsQueryable().First().ToJson();

    return View();
}

A noter que ce code ne marchera pas dans un environnement de développement ou dans un Cloud Service qui n’est pas dans votre réseau virtuel, ainsi cela permet de bien isoler vos environnements.

Avant de déployer via Visual Studio, je vous conseille fortement de créer un Cloud Service avec le même groupe d’affinité que votre réseau virtuel, car il n’est pas possible de le faire via votre environnement de développement favori.

Création de votre service Cloud

Vous pouvez maintenant déployer, et ensuite tester en accédant au site Web.
Résultat du test

De plus si on regarde dans la configuration du réseau on peut voir que mon Web Role y apparaît aussi maintenant.
Liste des machines

Pour conclure

Dans ce tutorial, nous avons vu comment utiliser des réseaux virtuels sous Windows Azure, mais surtout nous avons vu comment connecter une machine de type PAAS à une machine de type IAAS pour utiliser un service tel que MongoDB, sans pour autant que votre instance NoSQL ne soit accessible de l’extérieur d’Azure !

Wilfried Woivré (16 Posts)

MVP Windows Azure – Soat Expert .Net / Azure

Animateur de la communauté Windows Azure France : https://facebook.com/groups/zecloud


Une réponse à Windows Azure : Connecter un rôle PAAS à une instance de type IAAS

  1. Ping : Connecter un rôle PAAS à une instance de type IAAS - Windows Azure France - Site Home - MSDN Blogs

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>