Explorer la structure du modèle Azure Resource Manager

Effectué

Dans cette unité, vous allez découvrir comment utiliser des modèles Azure Resource Manager (modèles ARM) pour implémenter l’infrastructure en tant que code. Vous allez explorer les sections d’un modèle ARM, vous découvrez comment déployer votre modèle ARM sur Azure et vous explorez en détail la section ressources du modèle ARM.

Qu’est-ce que l’Infrastructure as Code ?

L’IaC (Infrastructure as Code) permet de décrire, par le biais du code, l’infrastructure dont vous avez besoin pour votre application.

Avec l’infrastructure en tant que code, vous pouvez gérer à la fois le code de votre application et tout ce dont vous avez besoin pour déployer votre application dans un référentiel de code central. Les avantages de l’infrastructure en tant que code sont les suivants :

  • Configurations cohérentes
  • Scalabilité améliorée
  • Déploiements plus rapides
  • Meilleure traçabilité

Cette vidéo explique l’infrastructure en tant que code :

Qu’est-ce qu’un modèle ARM ?

Les modèles ARM sont des fichiers JavaScript Object Notation (JSON) qui définissent l’infrastructure et la configuration de votre déploiement. Le modèle utilise une syntaxe déclarative. La syntaxe déclarative est un moyen de générer la structure et les éléments qui soulignent les ressources qui ressembleront sans décrire le flux de contrôle. La syntaxe déclarative est différente de la syntaxe impérative, qui utilise des commandes que l’ordinateur doit exécuter. Les scripts impératifs se concentrent sur la spécification de chaque étape du déploiement des ressources.

Les modèles ARM vous permettent de déclarer ce que vous envisagez de déployer sans avoir à écrire la séquence des commandes de programmation pour le créer. Dans un modèle ARM, vous spécifiez les ressources et les propriétés de ces ressources. Azure Resource Manager utilise ensuite ces informations pour déployer les ressources de façon organisée et cohérente.

Avantages de l’utilisation des modèles ARM

Les modèles ARM vous permettent d’automatiser les déploiements et d’utiliser la pratique de l’infrastructure en tant que code (IaC). Le code du modèle devient partie intégrante de vos projets d’infrastructure et de développement. Tout comme le code de l’application, vous pouvez stocker les fichiers IaC dans un référentiel source et la mettre en version.

Les modèles ARM sont idempotents, ce qui signifie que vous pouvez déployer plusieurs fois le même modèle et récupérer les mêmes types de ressource dans le même état.

Resource Manager orchestre le déploiement des ressources afin qu’elles soient créées dans le bon ordre. Quand c’est possible, les ressources sont également créées en parallèle, de sorte que les déploiements de modèle ARM sont effectués plus rapidement que les déploiements par script.

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

Resource Manager a également une validation intégrée. Il vérifie le modèle avant de commencer le déploiement pour garantir que le déploiement va s’effectuer correctement.

Si vos déploiements deviennent plus complexes, vous pouvez scinder vos modèles ARM en composants plus petits et réutilisables. Vous pouvez lier ensemble ces modèles plus petits au moment du déploiement. Vous pouvez également imbriquer des modèles dans d’autres modèles.

Dans le portail Azure, vous pouvez examiner votre historique des déploiements et obtenir des informations sur l’état du déploiement. Le portail affiche des valeurs pour tous les paramètres et toutes les sorties.

Vous pouvez également intégrer vos modèles ARM dans des outils d’intégration continue et de déploiement continu (CI/CD) comme Azure Pipelines, qui peuvent automatiser vos pipelines de mise en production pour des mises à jour rapides et fiables des applications et de l’infrastructure. En utilisant les tâches du modèle ARM et Azure DevOps, vous pouvez générer et déployer en continu vos projets.

Structure des fichiers du modèle ARM

Lorsque vous écrivez un modèle ARM, vous devez comprendre toutes les parties qui composent le modèle et ce qu’elles font. Les fichiers de modèle ARM sont constitués des éléments suivants :

Élément Description
schema Une section obligatoire qui définit l’emplacement du fichier du schéma JSON qui décrit la structure des données JSON. Le numéro de version que vous utilisez dépend de l’étendue du déploiement et de votre éditeur JSON.
contentVersion Une section obligatoire qui définit la version de votre modèle (par exemple 1.0.0.0). Vous pouvez utiliser cette valeur pour documenter les modifications importantes apportées à votre modèle pour être sûr de déployer le modèle approprié.
apiProfile Une section facultative qui définit une collection de versions d’API pour les types de ressources. Vous pouvez utiliser cette valeur pour éviter d’avoir à spécifier les versions d’API pour chaque ressource dans le modèle.
parameters Une section facultative où vous définissez des valeurs fournies lors du déploiement. Ces valeurs peuvent être fournies par un fichier de paramètres, par des paramètres de ligne de commande ou dans le portail Azure.
variables Une section facultative où vous définissez des valeurs utilisées pour simplifier les expressions de langage de gabarit.
functions Une section facultative où vous pouvez définir des fonctions définies par l’utilisateur qui sont disponibles dans le modèle. Les fonctions définies par l’utilisateur peuvent simplifier votre modèle quand des expressions compliquées y sont utilisées de façon répétée.
resources Une section obligatoire qui définit les éléments réels que vous voulez déployer ou mettre à jour dans un groupe de ressources ou un abonnement.
output Une section facultative où vous spécifiez les valeurs qui seront retournées à la fin du déploiement.

Déployer un modèle ARM sur Azure

Vous pouvez déployer un modèle ARM sur Azure de l’une des manières suivantes :

  • Déployer un modèle local
  • Déployer un modèle lié
  • Déployer dans un pipeline de déploiement continu

Ce module est essentiellement consacré au déploiement d’un modèle ARM local. Dans des modules Learn futurs, vous découvrirez comment déployer une infrastructure plus compliquée et comment l’intégrer à Azure Pipelines.

Pour déployer un modèle local, il faut que Azure PowerShell ou Azure CLI soit installé localement.

Connectez-vous d’abord à Azure en utilisant Azure CLI ou Azure PowerShell.

az login

Ensuite, définissez votre groupe de ressources. Vous pouvez utiliser un groupe de ressources déjà défini ou en créer un avec la commande suivante. Vous pouvez obtenir les valeurs de localisation disponibles à partir de : az account list-locations (CLI) ou Get-AzLocation (PowerShell). Vous pouvez configurer le lieu par défaut en utilisant az configure --defaults location=<location>.

az group create \
  --name {name of your resource group} \
  --location "{location}"

Pour démarrer un déploiement de modèle au niveau du groupe de ressources, utilisez la commande Azure CLI az deployment group create ou la commande Azure PowerShell New-AzResourceGroupDeployment.

Conseil

La différence entre az deployment group create et az group deployment create est que az group deployment create est une ancienne commande à déconseiller qui sera remplacée par az deployment group create. Il est donc recommandé d’utiliser az deployment group create pour déployer les ressources dans l’étendue du groupe de ressources.

Les deux commandes nécessitent le groupe de ressources, la région et le nom du déploiement pour pouvoir l’identifier facilement dans l’historique de déploiement. Pour des raisons pratiques, les exercices créent une variable qui stocke le chemin du fichier de modèle. Cette variable vous permet d’exécuter plus facilement les commandes de déploiement, car vous n’êtes pas obligé de retaper le chemin chaque fois que vous déployez. Voici un exemple :

Pour exécuter cette commande de déploiement, vous devez disposer de la dernière version d’Azure CLI.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

Utilisez des modèles liés pour déployer des solutions complexes. Vous pouvez scinder un modèle en plusieurs modèles et les déployer via un modèle principal. Quand vous déployez le modèle principal, celui-ci déclenche le déploiement du modèle lié. Vous pouvez stocker et sécuriser le modèle lié en utilisant un jeton SAS.

Un pipeline CI/CD automatise la création et le déploiement de projets de développement, qui incluent des projets de modèle ARM. Les deux pipelines les plus fréquemment utilisés pour le déploiement de modèles sont Azure Pipelines et GitHub Actions.

Vous trouverez plus d’informations sur ces deux types de déploiement dans d’autres modules.

Ajouter des ressources au modèle

Pour ajouter une ressource à votre modèle, vous devez connaître le fournisseur de ressources et ses types de ressources. La syntaxe de cette combinaison se présente sous la forme de {fournisseur-de-ressources}/{type-de-ressources}. Par exemple, pour ajouter une ressource de compte de stockage à votre modèle, vous avez besoin du fournisseur de ressources Microsoft.Storage. L’un des types pour ce fournisseur est storageAccount. Par conséquent, votre type de ressource sera affiché comme Microsoft.Storage/storageAccounts. Vous pouvez utiliser une liste de fournisseurs de ressources pour les services Azure pour rechercher les fournisseurs dont vous avez besoin.

Une fois que vous avez défini le fournisseur et le type de ressource, vous devez comprendre les propriétés de chaque type de ressource que vous voulez utiliser. Pour plus d’informations, consultez Définir des ressources dans les modèles Azure Resource Manager. Affichez la liste dans la colonne de gauche pour rechercher la ressource. Notez que les propriétés sont triées par version de l’API.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

Voici un exemple de certaines des propriétés listées dans la page Comptes de stockage :

Screenshot of a Microsoft documentation page showing some of the storage account properties.

Pour notre exemple de stockage, votre modèle peut se présenter comme suit :

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}