Déployer des ressources à l’aide de modèles Resource Manager et d’Azure PowerShellDeploy resources with ARM templates and Azure PowerShell

Cet article explique comment utiliser Azure PowerShell avec les modèles Azure Resource Manager (ARM) pour déployer vos ressources dans Azure.This article explains how to use Azure PowerShell with Azure Resource Manager templates (ARM templates) to deploy your resources to Azure. Si vous n’avez pas une bonne connaissance des concepts de déploiement et de gestion des solutions Azure, consultez Vue d’ensemble du déploiement de modèles.If you aren't familiar with the concepts of deploying and managing your Azure solutions, see template deployment overview.

PrérequisPrerequisites

Il vous faut un modèle à déployer.You need a template to deploy. Si vous n’en avez pas déjà un, téléchargez et enregistrez un exemple de modèle à partir du référentiel de modèles de démarrage rapide Azure.If you don't already have one, download and save an example template from the Azure Quickstart templates repo. Le nom du fichier local utilisé dans cet article est c:\MyTemplates\azuredeploy.json .The local file name used in this article is c:\MyTemplates\azuredeploy.json .

Vous devez installer Azure PowerShell et vous connecter à Azure :You need to install Azure PowerShell and connect to Azure:

Si vous n’avez pas installé PowerShell, vous pouvez utiliser le Cloud Shell.If you don't have PowerShell installed, you can use the Cloud Shell. Pour plus d’informations, consultez Déployer des modèles Azure Resource Manager à partir de Cloud Shell.For more information, see Deploy ARM templates from Cloud Shell.

Étendue du déploiementDeployment scope

Vous pouvez cibler votre déploiement au niveau d’un groupe de ressources, d’un abonnement, d’un groupe d’administration ou d’un locataire.You can target your deployment to a resource group, subscription, management group, or tenant. Les commandes à utiliser diffèrent en fonction de l’étendue du déploiement.Depending on the scope of the deployment, you use different commands.

Pour chaque étendue, l’utilisateur qui déploie le modèle doit disposer des autorisations nécessaires pour créer des ressources.For every scope, the user deploying the template must have the required permissions to create resources.

Déployer un modèle localDeploy local template

Vous pouvez déployer un modèle à partir de votre ordinateur local ou d’un modèle stocké en externe.You can deploy a template from your local machine or one that is stored externally. Cette section décrit le déploiement d’un modèle local.This section describes deploying a local template.

Si vous effectuez un déploiement vers un groupe de ressources qui n’existe pas, vous devez commencer par créer ce dernier.If you're deploying to a resource group that doesn't exist, create the resource group. Le nom du groupe de ressources ne peut contenir que des caractères alphanumériques, des points, des traits de soulignement, des traits d'union et des parenthèses.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. Il peut comprendre jusqu’à 90 caractères.It can be up to 90 characters. Le nom ne peut pas se terminer par un point.The name can't end in a period.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Pour déployer un modèle local, utilisez le paramètre -TemplateFile dans la commande de déploiement.To deploy a local template, use the -TemplateFile parameter in the deployment command. L’exemple suivant montre également comment définir une valeur de paramètre provenant du modèle.The following example also shows how to set a parameter value that comes from the template.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json

Le déploiement peut prendre plusieurs minutes.The deployment can take a few minutes to complete.

Déployer un modèle distantDeploy remote template

Au lieu de stocker les modèles Resource Manager sur votre ordinateur local, vous pouvez les stocker dans un emplacement externe.Instead of storing ARM templates on your local machine, you may prefer to store them in an external location. Vous pouvez stocker des modèles dans un dépôt de contrôle de code source (par exemple, GitHub).You can store templates in a source control repository (such as GitHub). Vous pouvez aussi les stocker dans un compte de stockage Azure pour mettre en place un accès partagé dans votre organisation.Or, you can store them in an Azure storage account for shared access in your organization.

Si vous effectuez un déploiement vers un groupe de ressources qui n’existe pas, vous devez commencer par créer ce dernier.If you're deploying to a resource group that doesn't exist, create the resource group. Le nom du groupe de ressources ne peut contenir que des caractères alphanumériques, des points, des traits de soulignement, des traits d'union et des parenthèses.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. Il peut comprendre jusqu’à 90 caractères.It can be up to 90 characters. Le nom ne peut pas se terminer par un point.The name can't end in a period.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Pour déployer un modèle externe, utilisez le paramètre -TemplateUri.To deploy an external template, use the -TemplateUri parameter.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

L’exemple précédent nécessite un URI accessible publiquement pour le modèle, ce qui convient pour la plupart des scénarios, sachant que votre modèle ne doit pas inclure de données sensibles.The preceding example requires a publicly accessible URI for the template, which works for most scenarios because your template shouldn't include sensitive data. Si vous avez besoin de spécifier des données sensibles (par exemple, un mot de passe d’administrateur), passez cette valeur en tant que paramètre sécurisé.If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. Toutefois, si vous souhaitez gérer l’accès au modèle, envisagez d’utiliser des spécifications de modèle.However, if you want to manage access to the template, consider using template specs.

Nom du déploiementDeployment name

Lors du déploiement d’un modèle ARM, vous pouvez attribuer un nom au déploiement.When deploying an ARM template, you can give the deployment a name. Ce nom peut vous aider à récupérer le déploiement à partir de l’historique de déploiement.This name can help you retrieve the deployment from the deployment history. Si vous n’attribuez pas de nom au déploiement, le nom du fichier de modèle est utilisé.If you don't provide a name for the deployment, the name of the template file is used. Par exemple, si vous déployez un modèle nommé azuredeploy.json et que vous ne spécifiez pas de nom de déploiement, le déploiement est nommé azuredeploy.For example, if you deploy a template named azuredeploy.json and don't specify a deployment name, the deployment is named azuredeploy.

Chaque fois que vous exécutez un déploiement, une entrée est ajoutée à l’historique de déploiement du groupe de ressources avec le nom du déploiement.Every time you run a deployment, an entry is added to the resource group's deployment history with the deployment name. Si vous exécutez un autre déploiement et que vous lui attribuez le même nom, l’entrée précédente est remplacée par le déploiement actuel.If you run another deployment and give it the same name, the earlier entry is replaced with the current deployment. Si vous souhaitez conserver des entrées uniques dans l’historique de déploiement, attribuez un nom unique à chaque déploiement.If you want to maintain unique entries in the deployment history, give each deployment a unique name.

Pour créer un nom unique, vous pouvez assigner un numéro aléatoire.To create a unique name, you can assign a random number.

$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix

Vous pouvez aussi ajouter une valeur de date.Or, add a date value.

$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"

Si vous exécutez des déploiements simultanés dans le même groupe de ressources avec le même nom de déploiement, seul le dernier déploiement aboutit.If you run concurrent deployments to the same resource group with the same deployment name, only the last deployment is completed. Les déploiements de même nom qui n’arrivent pas à terme sont remplacés par le dernier déploiement.Any deployments with the same name that haven't finished are replaced by the last deployment. Par exemple, si vous exécutez un déploiement nommé newStorage qui déploie un compte de stockage nommé storage1 et que, dans le même temps, vous exécutez un autre déploiement nommé newStorage qui déploie un compte de stockage nommé storage2, vous ne déployez qu’un seul compte de stockage.For example, if you run a deployment named newStorage that deploys a storage account named storage1, and at the same time run another deployment named newStorage that deploys a storage account named storage2, you deploy only one storage account. Le compte de stockage qui en résulte est nommé storage2.The resulting storage account is named storage2.

En revanche, si vous exécutez un déploiement nommé newStorage qui déploie un compte de stockage nommé storage1 et que, aussitôt terminé, vous exécutez un autre déploiement nommé newStorage qui déploie un compte de stockage nommé storage2, vous disposez de deux comptes de stockage :However, if you run a deployment named newStorage that deploys a storage account named storage1, and immediately after it completes you run another deployment named newStorage that deploys a storage account named storage2, then you have two storage accounts. un nommé storage1 et l’autre nommé storage2.One is named storage1, and the other is named storage2. Cependant, l’historique de déploiement ne présente qu’une seule entrée.But, you only have one entry in the deployment history.

Quand vous spécifiez un nom unique pour chaque déploiement, vous pouvez les exécuter simultanément sans conflit.When you specify a unique name for each deployment, you can run them concurrently without conflict. Si vous exécutez un déploiement nommé newStorage1 qui déploie un compte de stockage nommé storage1 et que, dans le même temps, vous exécutez un autre déploiement nommé newStorage2 qui déploie un compte de stockage nommé storage2, vous disposez de deux comptes de stockage et l’historique de déploiement présente deux entrées.If you run a deployment named newStorage1 that deploys a storage account named storage1, and at the same time run another deployment named newStorage2 that deploys a storage account named storage2, then you have two storage accounts and two entries in the deployment history.

Pour éviter les conflits lors de déploiements simultanés et faire en sorte que l’historique de déploiement présente des entrées uniques, attribuez un nom unique à chaque déploiement.To avoid conflicts with concurrent deployments and to ensure unique entries in the deployment history, give each deployment a unique name.

Déployer une spec de modèleDeploy template spec

Au lieu de déployer un modèle local ou distant, vous pouvez créer une spécification de modèle. La spécification de modèle est une ressource de votre abonnement Azure qui contient un modèle ARM.Instead of deploying a local or remote template, you can create a template spec. The template spec is a resource in your Azure subscription that contains an ARM template. Elle facilite le partage sécurisé du modèle avec les utilisateurs de votre organisation.It makes it easy to securely share the template with users in your organization. Vous utilisez le contrôle d’accès Azure en fonction du rôle (Azure RBAC) pour accorder l’accès à la spécification de modèle. Actuellement, cette fonctionnalité est uniquement disponible en tant que version préliminaire.You use Azure role-based access control (Azure RBAC) to grant access to the template spec. This feature is currently in preview.

Les exemples suivants montrent comment créer et déployer une spécification de modèle. Ces commandes sont disponibles seulement si vous vous êtes inscrit pour la préversion.The following examples show how to create and deploy a template spec. These commands are only available if you've signed up for the preview.

Tout d’abord, créez la spécification de modèle en fournissant le modèle ARM.First, create the template spec by providing the ARM template.

New-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0 `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateJsonFile ./mainTemplate.json

Ensuite, recevez l’ID de la spécification de modèle et déployez-le.Then, get the ID for template spec and deploy it.

$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Version.Id

New-AzResourceGroupDeployment `
  -ResourceGroupName demoRG `
  -TemplateSpecId $id

Pour plus d’informations, consultez Spécification de modèle Azure Resource Manager (préversion).For more information, see Azure Resource Manager template specs (Preview).

Prévisualiser les modificationsPreview changes

Avant de déployer votre modèle, vous pouvez afficher un aperçu des modifications que le modèle apportera à votre environnement.Before deploying your template, you can preview the changes the template will make to your environment. Utilisez l’opération de simulation pour vérifier que le modèle apporte les changements prévus.Use the what-if operation to verify that the template makes the changes that you expect. Cette opération vérifie aussi que le modèle est exempt d’erreurs.What-if also validates the template for errors.

Passer les valeurs de paramètrePass parameter values

Pour passer les valeurs de paramètre, vous pouvez utiliser des paramètres inline ou un fichier de paramètres.To pass parameter values, you can use either inline parameters or a parameter file.

Paramètres inlineInline parameters

Pour passer les paramètres inline, indiquez les noms des paramètres au moyen de la commande New-AzResourceGroupDeployment.To pass inline parameters, provide the names of the parameter with the New-AzResourceGroupDeployment command. Par exemple, pour passer une chaîne et un tableau à un modèle, utilisez :For example, to pass a string and array to a template, use:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString "inline string" `
  -exampleArray $arrayParam

Vous pouvez également récupérer le contenu d’un fichier et fournir ce contenu en tant que paramètre inline.You can also get the contents of file and provide that content as an inline parameter.

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

Obtenir une valeur de paramètre à partir d’un fichier est utile lorsque vous devez fournir des valeurs de configuration.Getting a parameter value from a file is helpful when you need to provide configuration values. Par exemple, vous pouvez fournir des valeurs cloud-init pour une machine virtuelle Linux.For example, you can provide cloud-init values for a Linux virtual machine.

Si vous avez besoin de transmettre un tableau d’objets, créez des tables de hachage dans PowerShell et ajoutez-les à un tableau.If you need to pass in an array of objects, create hash tables in PowerShell and add them to an array. Transmettez ce tableau en tant que paramètre lors du déploiement.Pass that array as a parameter during deployment.

$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleArray $subnetArray

Fichiers de paramètresParameter files

Au lieu de passer des paramètres en tant que valeurs inline dans votre script, il peut s’avérer plus facile d’utiliser un fichier JSON qui contient les valeurs des paramètres.Rather than passing parameters as inline values in your script, you may find it easier to use a JSON file that contains the parameter values. Le fichier de paramètres peut être un fichier local ou un fichier externe avec un URI accessible.The parameter file can be a local file or an external file with an accessible URI.

Pour plus d’informations sur le fichier de paramètres, consultez Créer un fichier de paramètres Resource Manager.For more information about the parameter file, see Create Resource Manager parameter file.

Pour transmettre un fichier de paramètres local, utilisez le paramètre TemplateParameterFile  :To pass a local parameter file, use the TemplateParameterFile parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

Pour transmettre un fichier de paramètres externe, utilisez le paramètre TemplateParameterUri  :To pass an external parameter file, use the TemplateParameterUri parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.parameters.json

Étapes suivantesNext steps