Découverte de Azure Resource Manager

Introduction

Aujourd’hui je vous proposes une présentation de Azure Resource Manager qui pour faire simple est le nouveau modèle de gestion des ressources au niveau de Microsoft Azure.

Au cours de cette présentation nous verrons dans un premier temps la problématique à laquelle permet de répondre Azure Resource Manager ainsi qu’une présentation des différents composants et concept relatif à Azure Resource Manager. Dans une seconde partie nous verrons comment au travers de l’utilisation de templates, déployer des ressources Azure en utilisant l’architecture ARM (Azure Resource Manager). Mais ne perdons plus de temps et entrons dans le vif du sujet.

Ancien mode de gestion des ressources

Quand on arrive sur le portail après quelque temps d’utilisation de Microsoft Azure, et l’instanciation plusieurs services, la première chose qui vous vient à l’idée c’est : « C’est le bordel ». En effet pour peu que vous ayez quelques projets, pour lesquels vous devez faire de l’administration, vous perdez énormément de temps dans la recherche des composants. Vous pouvez vous faire une idée en regardant l’image ci-dessous montrant la liste des instances de services de votre abonnement Azure telle qu’elle est présentée au niveau du portail actuel.

blog ai3 Resource-Manager-Presentation-1 Découverte de Azure Resource Manager

La deuxième chose qui est dommageable est la gestion des autorisations. En effet, imaginez que vous hébergez plusieurs projets au niveau de votre abonnement avec pour chacun d’eux une équipe projet différente, avec cette version du portail il vous ait impossible de pouvoir gérer les accès de façon granulaire afin de limiter les accès aux différents éléments de votre abonnement. En gros quand vous avez accès à la console d’administration Azure vous avez le droit de faire tout ce que vous voulez.

Un autre point important concerne l’estimation des coûts de vos projets sur Azure. En effet avec la version courante du portail, il n’y a aucun point d’entrée permettant d’avoir une vision sur les coûts estimés d’une solution déployée.

Un dernier point concerne le déploiement de ressources qui n’offrait aucune facilité et limitait la mise en place de processus d’automatisation des déploiements.

Azure ressource Manager

Afin de pouvoir pallier aux différents problèmes exposés précédemment, Microsoft a décider de modifier profondément l’architecture de gestion des ressources au niveau de Azure connue sous le nom de Azure Resource Manager.

Azure Ressource Manager permet de regrouper des ressources au sein d’un groupe logique connu sous le nom de groupe de ressources (Ressources Group). Chaque ressource (instance de services) que vous allez créer au niveau d’Azure devra appartenir à un groupe de ressource, et ce groupe de ressources sera unique pour celle-ci.

Concernant la gestion des accès aux ressources, l’architecture basée sur Resource Manager permet de gérer les éléments de manière beaucoup plus granulaire. Il vous ait maintenant possible de limité l’accès d’un utilisateur à un ou des groupes de ressources ou encore à un ou plusieurs ressources. Si vous désirez plus d’informations concernant la gestion des accès aux ressources vous pouvez allez voir l’article que j’ai rédigé à ce sujet ici.

Pour régler le problème lié à l’estimation des coûts, groupe vous avez, via le panneau dédié à votre groupe de ressources, directement accès aux informations concernant le coût estimé de chacune des ressources faisant partie du groupe que vous avez sélectionné. Vous pouvez voir un exemple, de cette fonctionnalité, au travers de l’image ci-dessous.

blog ai3 Resource-Manager-Presentation-2 Découverte de Azure Resource Manager

Cette nouvelle organisation permet aussi de définir des dépendances entre des ressources permettant de définir un ordre lors du déploiement d’une instance de service au niveau de Azure. Par exemple une instance de machine virtuelle aura besoin au préalable de la définition d’un compte de stockage, pour les disques virtuels, ainsi qu’un réseau virtuel.

Azure Ressource Manager permet aussi de mettre en place des déploiements de façon répétés. Pour le mise en place des déploiements, Azure Ressource Manager s’appuie sur la définition de template, permettant de définir la configuration des différents éléments devant être déployés au niveau d’Azure.

Enfin Azure Ressource Manager se base sur le système de Role Based Access Control (RBAC) afin de gérer de manière affinée les accès aux différentes ressources. Pour plus d’informations concernant RBAC, vous pouvez lire l’article se trouvant ici.

Après cette rapide introduction, je vous proposes de voir un peu comment s’architecture Azure Ressource Manager.

Architecture Azure Resource Manager

Toutes les interactions avec Azure Resource Manager, que se soit avec Visual Studio, le portail Azure, ou PowerShell, se fait via des appels à l’API Web exposée par ARM. Chaque service Azure, utilisable avec ARM, propose un provider qui expose un point d’entrée REST permettant d’interagir avec lui. Parmi ces provider en trouve (liste non exhaustive) : Web App, Search, My SQL, SQL DB …. Chaque provider va exposer un ensemble d’opérations permettant d’interagir avec les ressources qu’il expose.

Ce modèle peut aussi être utilisé ce modèle afin de proposer la même expérience via l’utilisation du Marketplace Azure.

Afin de pouvoir être utilisé par ARM, les composants Azure exposent un provider connu sous le nom de Azure Ressource Provider permettant de déployer une ressource via ARM.

Au moment de l’écriture de cet article tous les composant Azure ne bénéficie par encore de ce provider, comme par exemple Azure AD, ce qui explique le fait de l’existence des deux portails Azure.

Il est aussi a noté que tous les Resource Provider ne sont pas disponible dans tous les DataCenters Azure, c’est la cas par exemple du service Azure KeyVault.

blog ai3 Architecture-Azure-Resource-Manager Découverte de Azure Resource Manager

Après cette rapide revue de l’architecture de Azure Resource Manager, je vous propose de nous lancer dans l’étude de la structure des templates ARM. Pour rappel, ces templates permettent la mise en place de déploiements automatique au niveau de la plateforme Azure. Cette partie n’est pas la plus intéressante, mais elle est obligatoire pour avoir une bonne compréhension du reste de l’article.

Structure d’un template Azure Resource Manager

La définition d’un modèle ARM est établie via l’utilisation d’un fichier au format JSON. Afin de pouvoir être consommée par le moteur Azure Resource Manger, ce fichier se doit de respecter un certain formalisme dont les règles sont établies via la définition d’un schéma. Vous pouvez voir dans l’image ci-dessous un exemple de template ARM vide.

blog ai3 Azure-Resource-Manager-Template Découverte de Azure Resource Manager

La première chose définissant un template est son schéma de déploiement, qui se trouve au début du fichier, et qui permet au moteur ARM de savoir comment valider la structure du fichier.

Le champ contentVersion permet de définir la version du fichier de configuration. Celui-ci peut être utilisé par exemple lors d’un projet afin de suivre l’évolution des numéro de version de votre application et faire ainsi suivre la version de votre template avec la version de votre application.

Définition de paramètres et de variables

Le champs parameters permet de définir les paramètres qui seront utilisés lors du déploiement de votre solution. Cela permettra par exemple de définir le nom de votre application Web dans le cadre du déploiement d’un application Web.

blog ai3 Azure-Resource-Manager-Template1 Découverte de Azure Resource Manager

Un paramètre est composé des éléments suivants :

  • Un nom
  • Un type qui permettra de typer le paramètre.
  • Une valeur par défaut (defaultValue) qui vous permettra de définir une valeur par défaut à votre paramètre.
  • allowedValues est utilisé sur certains paramètres qui n’acceptent qu’un certain nombre de valeur. Ce champs permet de donner les différentes valeurs acceptées par le paramètre. Avec ce type de paramètre, si vous passez une valeur inattendue, une exception sera levée par le moteur ARM lors du déploiement.
  • metadata
    • Contient un champs description permettant de donner une description du paramètre.

Afin de pouvoir passer des valeurs à ces différents paramètres, on peut associer à notre fichier template, un autre fichier, lui aussi au format JSON, qui contiendra les valeurs des différents paramètres.

Structure du fichier de paramètres.

La première ligne définissant le schéma permettant de valider le contenu du fichier.

La définition des différents paramètres avec pour chaque paramètre, le nom de celui-ci, et ensuite la valeur affectée à ce paramètre. Vous pouvez voir un exemple de fichier paramètre avec l’image ci-dessous.

NB : Si au niveau de votre fichier template, vous avez des paramètres de type secureString, vous ne pourrez pas utiliser le fichier de paramètres pour affecter des valeurs à ceux-ci.

blog ai3 Azure-Resource-Manager-Template2 Découverte de Azure Resource Manager

Le champs variables (partie non obligatoire) permet comme son nom l’indique de définir des variables que vous pourrez utilisées dans votre template.

Définition de ressources

Le champs resources contiendra la définition des différentes ressources que vous allez déployer via votre template.

Chacune des ressources contenues dans le fichier template sera composée des éléments suivants :

  • Un nom
  • Un type
  • Définition du numéro de version de l’API utilisée pour créer la ressource
  • La localisation où sera installée la ressource
  • Les dépendances de la ressource si il y en a
  • Un ensemble de propriétés spécifique au type de ressource que vous installée.

blog ai3 Azure-Resource-Manager-Template3 Découverte de Azure Resource Manager

Enfin le champs Outputs vous permettra de définir des valeurs de sortie qui seront utilisés pour vous donnez des informations lors de vos déploiements.

Si vous désirez plus d’informations concernant la structure des fichiers template vous pouvez vous rendre à l’adresse suivante : https://github.com/Azure/azure-resource-manager-schemas, cette adresse vous sera utile lors de vos début pour avoir les informations utiles sur les différentes possibilités lors de la définition de vos templates.

Voilà la partie concernant la structuration d’un template est maintenant terminée, nous allons de ce pas passer à la pratique et voir comment créer un template à l’aide de Visual Studio.

Création d’un template Azure Resource Manager avec Visual Studio

Ouvrez Visual studio et créez une nouvelle solution vide. Ensuite ajoutez un nouveau projet de type « Azure Resource Group » au niveau de votre solution.

blog ai3 Creation-template-ARM-avec-VS-Step1 Découverte de Azure Resource Manager

Une nouvelle fenêtre s’ouvre vous permettant de sélectionner le type de template qui vous servira de base. Choisissez le type de template vide et cliquez sur OK.

blog ai3 Creation-template-ARM-avec-VS-Step2 Découverte de Azure Resource Manager

Dans le cadre de cet article nous partirons sur un template vide, auquel nous allons ajouter des ressources afin de déployer un serveur de base de données, et une base de données de tests. Si vous explorer le projet venant d’être créé, vous pourrez constater que celui-ci contient les éléments suivants :

  • Un premier fichier JSON qui contiendra la définition de votre déploiement avec les différents composants associés à celui-ci.
  • Un deuxième fichier JSON contenant les paramètres qui seront utilisés pour le déploiement, et qui contiendra la définition des différents paramètres devant être définis pour la mise en place des différents composants.
  • Vous aurez enfin, un script Power Shell qui vous permettra de déployer votre solution. Ce script prend en paramètres les deux fichiers JSON énumérés précédemment afin d’effectuer le déploiement.

blog ai3 Creation-template-ARM-avec-VS-Step3 Découverte de Azure Resource Manager

Nous allons maintenant ajouter notre première ressource dans notre template. Pour ce faire, ouvrez le fichier JSON contenant le template vide et faites un clic droit sur le nœud resources du panneau de gauche, venant de s’ouvrir, et sélectionnez l’option Add New Resource.

blog ai3 Creation-template-ARM-avec-VS-Step4 Découverte de Azure Resource Manager

Creation d’une instance SQL Server

Au niveau de la nouvelle fenêtre, sélectionner le type de ressource SQL Server et donner lui un nom. Cliquez ensuite sur le bouton « Add » pour valider votre choix.

blog ai3 Creation-template-ARM-avec-VS-Step5 Découverte de Azure Resource Manager

Visual Studio va alors générer le contenu adéquate concernant notre instance de serveur SQL Server. Comme vous pouvez le voir, dans l’image ci-dessous, le nom de l’instance est basée sur le contenue d’une variable qui effectue une concaténation. Dans le but d’avoir la main sur le nom de l’instance, et de pouvoir utilisé ce template pour de multiple déploiement, nous allons modifier ceci en ajoutant un paramètre au template. Celui-ci sera utilisé pour renseigner le nom de notre instance de serveur.  Pour se faire, ajouter un nouveau paramètre au niveau du fichier template, et modifiez la propriété name de la ressource afin que celui-ci pointe vers notre nouveau paramètre.

blog ai3 Creation-template-ARM-avec-VS-Step6 Découverte de Azure Resource Manager

Après modification, votre template devrait ressembler à l’exemple que vous pouvez voir dans l’image ci-dessous.

blog ai3 Creation-template-ARM-avec-VS-Step7 Découverte de Azure Resource Manager

Creation d’une instance SQL Database

Ceci étant fait, nous allons maintenant un nouvelle instance de base de données à notre serveur. Pour se faire effectuer la même opération que lors de l’ajout de la précédente ressource, et sélectionnez le type de ressource SQL Database. Comme vous pouvez le constater, Visual Studio détecte le fait qu’une instance de server SQL existe au niveau de votre template et vous propose par défaut de baser l’installation de cette ressource dessus. Cliquez sur le bouton « Add » pour valider la création de cette base de données.

blog ai3 Creation-template-ARM-avec-VS-Step8 Découverte de Azure Resource Manager

Vous pouvez voir si vous regarder l’arborescence des ressources, sur le panneau de gauche, que la base de données a été automatiquement déclarée comme ressource dépendante de notre ressource de type instance SQL Server. Ceci permet au moteur ARM de savoir qu’il doit dans un premier temps déployer la ressource de type SQL Server avant de déployer la ressource de type base de donnée associée à ce serveur.

blog ai3 Creation-template-ARM-avec-VS-Step9 Découverte de Azure Resource Manager

Notre template est maintenant prêt, et nous allons donc pouvoir passer au déploiement de celui-ci. Cette dernière étape marque la fin de cet article. Nous verrons dans un prochain article comment déployer ce template en utilisant différentes façon.

Dernière chose, vous pourrez trouvez la solution Visual Studio ici.

 

David Moïsa.

 

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.