Que sont les modèles ARM ?

Avec la migration vers le cloud, de nombreuses équipes ont adopté des méthodes de développement agile. Ces équipes effectuent des itérations rapides. Elles doivent déployer à plusieurs reprises leurs solutions dans le cloud et savoir que leur infrastructure est dans un état fiable. Comme l’infrastructure fait partie intégrante du processus itératif, la séparation entre les opérations et le développement a disparu. Les équipes doivent gérer le code d’infrastructure et le code d’application à l’aide d’un processus unifié.

Pour relever ces défis, vous pouvez automatiser les déploiements et utiliser la pratique de l’infrastructure en tant que code. Dans le code, vous définissez l’infrastructure qui doit être déployée. Le code d’infrastructure devient partie intégrante de votre projet. Tout comme le code d’application, vous stockez le code d’infrastructure dans un dépôt source et vous gérez ses versions. Toute personne de votre équipe peut exécuter le code et déployer des environnements similaires.

Pour implémenter une infrastructure en tant que code pour vos solutions Azure, utilisez des modèles Azure Resource Manager (modèles ARM). Le modèle est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet. Le modèle utilise la syntaxe déclarative, qui vous permet d’indiquer ce que vous envisagez de déployer sans avoir à écrire la séquence de commandes de programmation pour le créer. Dans le modèle, vous spécifiez les ressources à déployer et les propriétés de ces ressources.

Conseil

Nous avons introduit un nouveau langage nommé Bicep, qui offre les mêmes fonctionnalités que les modèles ARM, mais avec une syntaxe plus facile à utiliser. Chaque fichier Bicep est automatiquement converti en modèle ARM pendant le déploiement. Si vous considérez des options d’infrastructure en tant que code, nous vous recommandons de vous pencher sur Bicep. Pour plus d’informations, voir Qu’est-ce que Bicep ?.

Pour en savoir plus sur la prise en main des modèles ARM, visionnez la vidéo suivante.

Pourquoi choisir les modèles ARM ?

Si vous essayez de choisir entre utiliser des modèles Resource Manager et l’un des autres services d’infrastructure en tant que code, tenez compte des avantages suivants de l’utilisation de modèles :

  • Syntaxe déclarative : Les modèles Resource Manager vous permettent de créer et de déployer une infrastructure Azure entière de façon déclarative. Par exemple, vous pouvez déployer non seulement des machines virtuelles, mais également l’infrastructure réseau, les systèmes de stockage et toute autre ressource dont vous pouvez avoir besoin.

  • Résultats reproductibles : Déployez votre infrastructure à plusieurs reprises tout au long du cycle de vie de développement. Vous avez ainsi l’assurance que vos ressources sont déployées de façon cohérente. Les modèles sont idempotents, ce qui signifie que vous pouvez déployer le même modèle plusieurs fois et obtenir les mêmes types de ressources dans le même état. Vous pouvez développer un modèle qui représente l’état souhaité, plutôt que de développer un grand nombre de modèles distincts pour représenter des mises à jour.

  • Orchestration : Vous n’avez pas à vous soucier de la complexité des opérations de commande. Resource Manager orchestre le déploiement de ressources interdépendantes afin qu’elles soient créées dans l’ordre approprié. Lorsque cela est possible, Resource Manager déploie des ressources en parallèle afin que vos déploiements se terminent plus rapidement que les déploiements en série. Vous déployez le modèle par le biais d’une seule commande, plutôt que par le biais de plusieurs commandes impératives.

    Diagramme montrant la différence entre un déploiement impératif et un déploiement déclaratif.

  • Fichiers modulaires : Vous pouvez diviser vos modèles en composants plus petits et réutilisables et les lier au moment du déploiement. Vous pouvez également imbriquer un modèle dans un autre modèle.

  • Créez une ressource Azure : Vous pouvez utiliser immédiatement les nouveaux services et fonctionnalités Azure dans les modèles. Dès qu’un fournisseur de ressources introduit de nouvelles ressources, vous pouvez les déployer par le biais de modèles. Vous n’avez pas besoin d’attendre la mise à jour des outils ou des modules avant d’utiliser les nouveaux services.

  • Extensibilité : Avec les scripts de déploiement, vous pouvez ajouter des scripts PowerShell ou Bash à vos modèles. Les scripts de déploiement étendent votre capacité à configurer des ressources pendant le déploiement. Un script peut être inclus dans le modèle, ou stocké dans une source externe et référencé dans le modèle. Les scripts de déploiement vous permettent d’effectuer la configuration de votre environnement de bout en bout dans un modèle ARM unique.

  • Test : Vous pouvez vérifier que votre modèle suit les recommandations en le testant avec le kit d’outils de modèle ARM (arm-ttk). Ce kit de test est un script PowerShell que vous pouvez télécharger à partir de GitHub. Le kit d’outils vous permet de développer plus facilement une expertise à l’aide de la langue du modèle.

  • Aperçu des modifications : Vous pouvez utiliser l’opération de simulation pour obtenir un aperçu des modifications avant de déployer le modèle. Avec la simulation, vous pouvez voir quelles ressources seront créées, mises à jour ou supprimées ainsi que les propriétés de ressource qui seront modifiées. L’opération de simulation vérifie l’état actuel de votre environnement et élimine la nécessité de gérer l’état.

  • Validation intégrée : Votre modèle est déployé uniquement après avoir réussi la validation. Resource Manager vérifie le modèle avant de commencer le déploiement pour être sûr que celui-ci va réussir. Votre déploiement est moins susceptible de s’arrêter dans un état à moitié terminé.

  • Déploiements suivis : Dans le portail Azure, vous pouvez consulter l’historique des déploiements et obtenir des informations sur le déploiement des modèles. Vous pouvez voir le modèle qui a été déployé, les valeurs de paramètre passées et toutes les valeurs de sortie. Les autres services d’infrastructure en tant que code ne font pas l’objet d’un suivi par le biais du portail.

    Capture d’écran du Portail Azure montrant l’historique des déploiements.

  • Stratégie en tant que code : Azure Policy est une stratégie en tant qu’infrastructure de code pour automatiser la gouvernance. Si vous utilisez des stratégies Azure, la correction des stratégies est effectuée sur des ressources non conformes quand elles sont déployées par le biais de modèles.

  • Blueprints de déploiement : Vous pouvez tirer parti des plans fournis par Microsoft pour respecter les normes réglementaires et de conformité. Ces blueprints incluent des modèles prédéfinis pour différentes architectures.

  • Intégration CI/CD : Vous pouvez intégrer des modèles dans vos outils d’intégration et de déploiement continus (CI/CD), qui peuvent automatiser vos pipelines de mise en production en vue d’effectuer des mises à jour rapides et fiables des applications et des infrastructures. À l’aide de la tâche de modèle Resource Manager et Azure DevOps, vous pouvez utiliser Azure Pipelines pour générer et déployer des projets de modèle Azure Resource Manager en continu. Pour plus d’informations, consultez Projet VS avec Azure Pipelines et le Tutoriel : Intégration continue de modèles Azure Resource Manager avec Azure Pipelines.

  • Code exportable : Vous pouvez obtenir un modèle pour un groupe de ressources existant en exportant l’état actuel du groupe de ressources ou en consultant le modèle utilisé pour un déploiement particulier. L’affichage du modèle exporté est un moyen utile pour en découvrir plus sur sa syntaxe.

  • Outils de création : Vous pouvez créer des modèles avec Visual Studio Code et l’extension d’outil de modèle. Vous bénéficiez d’IntelliSense, de la mise en surbrillance de la syntaxe, de l’aide en ligne et de nombreuses autres fonctions de langage. Outre Visual Studio Code, vous pouvez également utiliser Visual Studio.

Fichier de modèle

Dans votre modèle, vous pouvez écrire des expressions de modèle qui étendent les fonctionnalités de JSON. Ces expressions utilisent les fonctions fournies par Resource Manager.

Le modèle comprend les sections suivantes :

  • Paramètres - Pendant le déploiement, fournissez des valeurs qui permettent d’utiliser le même modèle avec différents environnements.

  • Variables - Définissez des valeurs qui sont réutilisées dans vos modèles. Elles peuvent être construites à partir de valeurs de paramètres.

  • Fonctions définies par l’utilisateur - Créez des fonctions personnalisées qui simplifient votre modèle.

  • Ressources - Spécifiez les ressources à déployer.

  • Sorties - Retournez des valeurs à partir des ressources déployées.

Processus de déploiement de modèle

Quand vous déployez un modèle, Resource Manager le convertit en opérations d’API REST. Par exemple, lorsque Resource Manager reçoit un modèle avec la définition de ressource suivante :

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2022-09-01",
    "name": "mystorageaccount",
    "location": "centralus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "StorageV2"
  },
]

Il convertit la définition en opération API REST suivante, qui est envoyée au fournisseur de ressources Microsoft.Storage :

PUT
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/mystorageaccount?api-version=2022-09-01
REQUEST BODY
{
  "location": "centralus",
  "sku": {
    "name": "Standard_LRS"
  },
  "kind": "StorageV2",
  "properties": {}
}

Notez que la apiVersion que vous définissez dans le modèle pour la ressource est utilisée comme version d’API pour l’opération REST. Vous pouvez déployer le modèle à plusieurs reprises et être sûr qu’il continuera à fonctionner. En utilisant la même version d’API, vous n’avez pas à vous soucier des changements cassants qui peuvent être introduits dans les versions ultérieures.

Pour déployer un modèle, utilisez l’une des options suivantes :

Conception de modèle

La manière dont vous définissez les modèles et les groupes de ressources dépend entièrement de vous et de la façon dont vous voulez gérer votre solution. Par exemple, vous pouvez déployer votre application à trois niveaux via un modèle unique pour un groupe de ressources unique.

Diagramme montrant le déploiement d’une application à trois niveaux à l’aide d’un unique modèle.

Cependant, il est inutile de définir toute votre infrastructure dans un seul modèle. Il peut être judicieux de diviser les exigences de votre déploiement dans un ensemble de modèles ciblés destinés à un usage particulier. Vous pouvez facilement réutiliser ces modèles pour différentes solutions. Pour déployer une solution particulière, créez un modèle principal qui relie tous les modèles requis. L’illustration suivante montre comment déployer une solution à trois niveaux via un modèle parent qui inclut trois modèles imbriqués.

Diagramme montrant le déploiement d’une application à trois niveaux à l’aide d’un modèle imbriqué.

Si vos niveaux vont avoir des cycles de vie distincts, vous pouvez déployer les trois niveaux dans des groupes de ressources séparés. Notez que les ressources peuvent toujours être liées aux ressources dans d’autres groupes.

Diagramme montrant le déploiement d’une application à trois niveaux à l’aide d’un groupe de ressources distinct.

Pour plus d’informations sur les modèles imbriqués, consultez Utilisation de modèles liés avec Azure Resource Manager.

Partager des modèles

Après avoir créé votre modèle, vous souhaiterez peut-être le partager avec d’autres utilisateurs de votre organisation. Les specs de modèle vous permettent de stocker un modèle en tant que type de ressource. Vous utilisez le contrôle d’accès en fonction du rôle pour gérer l’accès à la spec de modèle. Les utilisateurs disposant d’un accès en lecture à la spec de modèle peuvent la déployer, mais pas la modifier.

Cette approche signifie que vous pouvez partager en toute sécurité des modèles qui répondent aux normes de votre organisation.

Étapes suivantes