Que sont les modèles ARM ?What are ARM templates?

Avec la migration vers le cloud, de nombreuses équipes ont adopté des méthodes de développement agile.With the move to the cloud, many teams have adopted agile development methods. Ces équipes effectuent des itérations rapides.These teams iterate quickly. Elles doivent déployer à plusieurs reprises leurs solutions dans le cloud et savoir que leur infrastructure est dans un état fiable.They need to repeatedly deploy their solutions to the cloud, and know their infrastructure is in a reliable state. Comme l’infrastructure fait partie intégrante du processus itératif, la séparation entre les opérations et le développement a disparu.As infrastructure has become part of the iterative process, the division between operations and development has disappeared. Les équipes doivent gérer le code d’infrastructure et le code d’application à l’aide d’un processus unifié.Teams need to manage infrastructure and application code through a unified process.

Pour relever ces défis, vous pouvez automatiser les déploiements et utiliser la pratique de l’infrastructure en tant que code.To meet these challenges, you can automate deployments and use the practice of infrastructure as code. Dans le code, vous définissez l’infrastructure qui doit être déployée.In code, you define the infrastructure that needs to be deployed. Le code d’infrastructure devient partie intégrante de votre projet.The infrastructure code becomes part of your project. Tout comme le code d’application, vous stockez le code d’infrastructure dans un dépôt source et vous gérez ses versions.Just like application code, you store the infrastructure code in a source repository and version it. Toute personne de votre équipe peut exécuter le code et déployer des environnements similaires.Any one on your team can run the code and deploy similar environments.

Pour implémenter une infrastructure en tant que code pour vos solutions Azure, utilisez des modèles Azure Resource Manager (ARM).To implement infrastructure as code for your Azure solutions, use Azure Resource Manager (ARM) templates. Le modèle est un fichier JSON (JavaScript Object Notation) qui définit l’infrastructure et la configuration de votre projet.The template is a JavaScript Object Notation (JSON) file that defines the infrastructure and configuration for your project. 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.The template uses declarative syntax, which lets you state what you intend to deploy without having to write the sequence of programming commands to create it. Dans le modèle, vous spécifiez les ressources à déployer et les propriétés de ces ressources.In the template, you specify the resources to deploy and the properties for those resources.

Pourquoi choisir les modèles ARM ?Why choose ARM templates?

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 :If you're trying to decide between using ARM templates and one of the other infrastructure as code services, consider the following advantages of using templates:

  • 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.Declarative syntax : ARM templates allow you to create and deploy an entire Azure infrastructure declaratively. 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.For example, you can deploy not only virtual machines, but also the network infrastructure, storage systems and any other resources you may need.

  • 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.Repeatable results : Repeatedly deploy your infrastructure throughout the development lifecycle and have confidence your resources are deployed in a consistent manner. 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.Templates are idempotent, which means you can deploy the same template many times and get the same resource types in the same state. 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.You can develop one template that represents the desired state, rather than developing lots of separate templates to represent updates.

  • Orchestration  : Vous n’avez pas à vous soucier de la complexité des opérations de commande.Orchestration : You don't have to worry about the complexities of ordering operations. Resource Manager orchestre le déploiement de ressources interdépendantes afin qu’elles soient créées dans l’ordre approprié.Resource Manager orchestrates the deployment of interdependent resources so they're created in the correct order. 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.When possible, Resource Manager deploys resources in parallel so your deployments finish faster than serial deployments. Vous déployez le modèle par le biais d’une seule commande, plutôt que par le biais de plusieurs commandes impératives.You deploy the template through one command, rather than through multiple imperative commands.

    Comparaison de déploiements de modèles

  • Fichiers modulaires  : Vous pouvez diviser vos modèles en composants plus petits et réutilisables et les lier au moment du déploiement.Modular files : You can break your templates into smaller, reusable components and link them together at deployment time. Vous pouvez également imbriquer un modèle dans d’autres modèles.You can also nest one template inside another templates.

  • Créez une ressource Azure : Vous pouvez utiliser immédiatement les nouveaux services et fonctionnalités Azure dans les modèles.Create any Azure resource : You can immediately use new Azure services and features in templates. Dès qu’un fournisseur de ressources introduit de nouvelles ressources, vous pouvez les déployer par le biais de modèles.As soon as a resource provider introduces new resources, you can deploy those resources through templates. Vous n’avez pas besoin d’attendre la mise à jour des outils ou des modules avant d’utiliser les nouveaux services.You don't have to wait for tools or modules to be updated before using the new services.

  • Extensibilité  : Avec les scripts de déploiement, vous pouvez ajouter des scripts PowerShell ou Bash à vos modèles.Extensibility : With deployment scripts, you can add PowerShell or Bash scripts to your templates. Les scripts de déploiement étendent votre capacité à configurer des ressources pendant le déploiement.The deployment scripts extend your ability to set up resources during deployment. Un script peut être inclus dans le modèle, ou stocké dans une source externe et référencé dans le modèle.A script can be included in the template, or stored in an external source and referenced in the template. Les scripts de déploiement vous permettent d’effectuer la configuration de votre environnement de bout en bout dans un modèle ARM unique.Deployment scripts give you the ability to complete your end-to-end environment setup in a single ARM template.

  • 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).Testing : You can make sure your template follows recommended guidelines by testing it with the ARM template tool kit (arm-ttk). Ce kit de test est un script PowerShell que vous pouvez télécharger à partir de GitHub.This test kit is a PowerShell script that you can download from GitHub. Le kit d’outils vous permet de développer plus facilement une expertise à l’aide de la langue du modèle.The tool kit makes it easier for you to develop expertise using the template language.

  • 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.Preview changes : You can use the what-if operation to get a preview of changes before deploying the template. 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.With what-if, you see which resources will be created, updated, or deleted, and any resource properties that will change. L’opération de simulation vérifie l’état actuel de votre environnement et élimine la nécessité de gérer l’état.The what-if operation checks the current state of your environment and eliminates the need to manage state.

  • Validation intégrée  : Votre modèle est déployé uniquement après avoir réussi la validation.Built-in validation : Your template is deployed only after passing validation. Resource Manager vérifie le modèle avant de commencer le déploiement pour être sûr que celui-ci va réussir.Resource Manager checks the template before starting the deployment to make sure the deployment will succeed. Votre déploiement est moins susceptible de s’arrêter dans un état à moitié terminé.Your deployment is less likely to stop in a half-finished state.

  • 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.Tracked deployments : In the Azure portal, you can review the deployment history and get information about the template deployment. Vous pouvez voir le modèle qui a été déployé, les valeurs de paramètre passées et toutes les valeurs de sortie.You can see the template that was deployed, the parameter values passed in, and any output values. Les autres services d’infrastructure en tant que code ne font pas l’objet d’un suivi par le biais du portail.Other infrastructure as code services aren't tracked through the portal.

    Historique de déploiement

  • Stratégie en tant que code  : Azure Policy est une stratégie en tant qu’infrastructure de code pour automatiser la gouvernance.Policy as code : Azure Policy is a policy as code framework to automate governance. 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.If you're using Azure policies, policy remediation is done on non-compliant resources when deployed through templates.

  • Blueprints de déploiement  : Vous pouvez tirer parti des plans fournis par Microsoft pour respecter les normes réglementaires et de conformité.Deployment Blueprints : You can take advantage of Blueprints provided by Microsoft to meet regulatory and compliance standards. Ces blueprints incluent des modèles prédéfinis pour différentes architectures.These blueprints include pre-built templates for various 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.CI/CD integration : You can integrate templates into your continuous integration and continuous deployment (CI/CD) tools, which can automate your release pipelines for fast and reliable application and infrastructure updates. À 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.By using Azure DevOps and Resource Manager template task, you can use Azure Pipelines to continuously build and deploy ARM template projects. 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.To learn more, see VS project with pipelines and Tutorial: Continuous integration of Azure Resource Manager templates with 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.Exportable code : You can get a template for an existing resource group by either exporting the current state of the resource group, or viewing the template used for a particular deployment. L’affichage du modèle exporté est un moyen utile pour en découvrir plus sur sa syntaxe.Viewing the exported template is a helpful way to learn about the template syntax.

  • Outils de création  : Vous pouvez créer des modèles avec Visual Studio Code et l’extension d’outil de modèle.Authoring tools : You can author templates with Visual Studio Code and the template tool extension. 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.You get intellisense, syntax highlighting, in-line help, and many other language functions. Outre Visual Studio Code, vous pouvez également utiliser Visual Studio.In addition to Visual Studio Code, you can also use Visual Studio.

Fichier de modèleTemplate file

Dans votre modèle, vous pouvez écrire des expressions de modèle qui étendent les fonctionnalités de JSON.Within your template, you can write template expressions that extend the capabilities of JSON. Ces expressions utilisent les fonctions fournies par Resource Manager.These expressions make use of the functions provided by Resource Manager.

Le modèle comprend les sections suivantes :The template has the following sections:

  • Paramètres - Pendant le déploiement, fournissez des valeurs qui permettent d’utiliser le même modèle avec différents environnements.Parameters - Provide values during deployment that allow the same template to be used with different environments.

  • Variables - Définissez des valeurs qui sont réutilisées dans vos modèles.Variables - Define values that are reused in your templates. Elles peuvent être construites à partir de valeurs de paramètres.They can be constructed from parameter values.

  • Fonctions définies par l’utilisateur - Créez des fonctions personnalisées qui simplifient votre modèle.User-defined functions - Create customized functions that simplify your template.

  • Ressources - Spécifiez les ressources à déployer.Resources - Specify the resources to deploy.

  • Sorties - Retournez des valeurs à partir des ressources déployées.Outputs - Return values from the deployed resources.

Processus de déploiement de modèleTemplate deployment process

Quand vous déployez un modèle, Resource Manager le convertit en opérations d’API REST.When you deploy a template, Resource Manager converts the template into REST API operations. Par exemple, lorsque Resource Manager reçoit un modèle avec la définition de ressource suivante :For example, when Resource Manager receives a template with the following resource definition:

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2016-01-01",
    "name": "mystorageaccount",
    "location": "westus",
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

Il convertit la définition en opération API REST suivante, qui est envoyée au fournisseur de ressources Microsoft.Storage :It converts the definition to the following REST API operation, which is sent to the Microsoft.Storage resource provider:

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

Conception de modèleTemplate design

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.How you define templates and resource groups is entirely up to you and how you want to manage your solution. Par exemple, vous pouvez déployer votre application à trois niveaux via un modèle unique pour un groupe de ressources unique.For example, you can deploy your three tier application through a single template to a single resource group.

modèle à trois niveaux

Cependant, il est inutile de définir toute votre infrastructure dans un seul modèle.But, you don't have to define your entire infrastructure in a single template. 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.Often, it makes sense to divide your deployment requirements into a set of targeted, purpose-specific templates. Vous pouvez facilement réutiliser ces modèles pour différentes solutions.You can easily reuse these templates for different solutions. Pour déployer une solution particulière, créez un modèle de référence qui relie tous les modèles requis.To deploy a particular solution, you create a master template that links all the required templates. L’illustration suivante montre comment déployer une solution à trois niveaux via un modèle parent qui inclut trois modèles imbriqués.The following image shows how to deploy a three tier solution through a parent template that includes three nested templates.

modèle à niveaux imbriqués

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.If you envision your tiers having separate lifecycles, you can deploy your three tiers to separate resource groups. Notez que les ressources peuvent toujours être liées aux ressources dans d’autres groupes.Notice the resources can still be linked to resources in other resource groups.

modèle niveau

Pour plus d’informations sur les modèles imbriqués, consultez Utilisation de modèles liés avec Azure Resource Manager.For information about nested templates, see Using linked templates with Azure Resource Manager.

Étapes suivantesNext steps