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.
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.
Pour commencer, nous allons créer une VM Windows Server 2012 R2 et lui ajouter des disques.
La définition de notre VM dans le modèle de déploiement se présente comme ci-dessous :
Pour ajouter des disques, on ajoute un bloc « dataDisks » dans la propriété « storageProfile » :
Si l’on déployait notre groupe de ressources à ce stade, les 2 disques supplémentaires seraient bien visibles mais inutilisables.
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).
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.
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.
Le modèle json est mis à jour, une ressource de type extension DSC a été ajoutée à la VM.
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.
Leurs valeurs peuvent ensuite être attribuées via le fichier json de paramètres ou lors du déploiement.
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.
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.
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.
Une fois le déploiement effectué, le nouveau portail Azure affiche le groupe de ressources.
En accédant à notre VM, nous pouvons voir que les disques sont bien utilisables et que IIS a bien été installé.
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.