Infrastructure As Code : PowerShell DSC et Azure Resource Manager

Dans le nouveau portail Azure, le concept de groupe de ressources est apparu. Un groupe de ressources permet de gérer les ressources d’une même application en même temps en les réunissant dans un groupe logique. Azure Resource Manager est la nouvelle fonctionnalité qui permet de créer et de gérer ces groupes.

Azure Resource Manager se base sur des modèles au format JSON qui définissent le déploiement et la configuration du groupe de ressources de façon déclarative.

Dans le cas d’un déploiement de VMs, il est intéressant de compléter notre déploiement avec la configuration automatisée de ces machines. Pour cela, on connaît déjà PowerShell DSC (cf. article sur PowerShell DSC).

Afin d’intégrer complètement notre script PowerShell DSC à notre déploiement Azure Resource Manager, nous allons définir une extension PowerShell DSC pour notre VM. Le script PowerShell DSC sera ainsi exécuté pendant le déploiement du groupe de ressources.

Dans l’exemple ci-dessous, nous allons créer une VM Windows Server 2012 R2 et lui ajouter des disques. Le script PowerShell DSC se chargera d’initialiser, de créer un volume et de formater chacun des disques.

 

Création d’un projet Azure Resource Group

Visual Studio, avec le SDK Azure 2.6, facilite la création de modèles de déploiement Azure Resource Manager.

AzureResourceGroup_NewProject

En créant un projet « Azure Resource Group », une base de script de déploiement en PowerShell est fournie ainsi que deux fichiers json (modèle de déploiement et paramètres de déploiement).

Lors de la création du projet, il est possible de sélectionner un template pour avoir des ressources déjà prédéfinies. En choisissant un template vide, nous pouvons quand même facilement définir des ressources supplémentaires.

VS_ARM_NewResource

Pour commencer, nous allons créer une VM Windows Server 2012 R2 et lui ajouter des disques.

VS_ARM_NewVM

La définition de notre VM dans le modèle de déploiement se présente comme ci-dessous :

VS_ARM_VM_JsonDetail

Pour ajouter des disques, on ajoute un bloc « dataDisks » dans la propriété « storageProfile » :

VS_ARM_NewDataDisks

Si l’on déployait notre groupe de ressources à ce stade, les 2 disques supplémentaires seraient bien visibles mais inutilisables.

DisksVM

 

Publication du script PowerShell DSC

Afin d’initialiser, de créer une partition et de formater les disques, nous allons créer un script PowerShell DSC. Pour une extension de VM avec Azure Resource Manager, seule la partie Configuration doit être fournie.

Le module xDisk, fourni dans le Windows PowerShell DSC Resource Kit, permet de réaliser ces opérations sur les disques.

Le script installera également la feature Web-Server (IIS).

Disk_DSCScript

Ce script doit être publié dans un compte de stockage Azure pour pouvoir être utilisé en tant qu’extension de VM. Il faut donc prévoir un compte de stockage hors du groupe de ressources que l’on crée.

La commande PowerShell suivante crée un conteneur « windows-powershell-dsc » dans le compte de stockage par défaut de la souscription Azure et upload un zip contenant le script PowerShell DSC et les modules nécessaires.

Azure_PublishDSC

 

Extension PowerShell DSC

On peut maintenant ajouter une extension PowerShell DSC à notre VM.

Visual Studio nous permet de créer l’extension simplement en choisissant la VM concernée.

VS_ARM_ExtensionDSC

 

Le modèle json est mis à jour, une ressource de type extension DSC a été ajoutée à la VM.

VS_ARM_ExtensionDSCScript

 

Déploiement

Pour déployer notre groupe de ressources, tous les paramètres doivent bien être définis dans le modèle de déploiement.

VS_ARM_ResourcesList

Leurs valeurs peuvent ensuite être attribuées via le fichier json de paramètres ou lors du déploiement.

VS_ARM_DSCParameters

Pour utiliser le script PowerShell DSC, il faut bien définir :

  • L’URL du module (modulesURL ci-dessus): URL du zip uploadé précédemment
  • La fonction du script PowerShell DSC qu’il faut appeler (cellenzaDSCConfigurationFunction ci-dessus)

Pour pouvoir accéder au blob contenant notre script PowerShell DSC, nous devons générer un token lors du déploiement. Puisque le déploiement se fait également via Visual Studio à l’aide du script PowerShell fourni, nous allons modifier ce script pour récupérer un token.

La commande « New-AzureResourceGroup » qui démarre la création du groupe de ressources, prend en paramètre le token, non défini dans le fichier de paramètre.

VS_ARM_DSCDeployScript

Nous sommes maintenant prêts à déployer notre groupe de ressources. Lors du déploiement, il faut définir le nom du groupe de ressources et éventuellement éditer les paramètres.

VS_ARM_NewResourceGroup

L’ensemble du déploiement, VM avec ses disques ainsi que la configuration définie par PowerShell DSC, a duré 20 min. Visual Studio indique si le déploiement s’est bien effectué et liste les ressources déployées.

VS_ARM_Succeed

Une fois le déploiement effectué, le nouveau portail Azure affiche le groupe de ressources.

Azure_TestResourceGroup

En accédant à notre VM, nous pouvons voir que les disques sont bien utilisables et que IIS a bien été installé.

Result

 

Conclusion

Nous avons vu comment ajouter simplement une extension PowerShell DSC à une VM dans un modèle de déploiement Azure Resource Manager. En 20 min, notre VM est déployée, ses disques sont prêts à être utilisés et IIS est installé.

Intégrer la configuration de la VM au déploiement Azure Resource Manager permet de déployer en une fois une VM directement utilisable.

Pas de commentaire

Laisser un commentaire

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