Exercice - Déployer vos modèles ARM

Effectué

Notes

La première fois que vous activez un bac à sable et que vous acceptez les conditions d’utilisation, votre compte Microsoft est associé à un nouvel annuaire Azure appelé Microsoft Learn Sandbox (Bac à sable Microsoft Learn). Vous êtes ajouté à un abonnement spécial nommé Abonnement Concierge.

Ici, vous déployez un modèle Azure Resource Manager (ARM) à partir de votre ordinateur et à partir d’un dépôt GitHub en spécifiant un URI.

Important

Cet exercice utilise les Outils Azure Resource Manager pour Visual Studio Code. Veillez à installer cette extension dans Visual Studio Code.

Configurer votre environnement avec l’abonnement Bac à sable Microsoft Learn

Pour effectuer chaque déploiement de cette unité, vous devez vous connecter à votre compte Azure à partir du terminal Visual Studio Code.

Veillez à vous connecter au même compte que celui qui a activé le bac à sable (sandbox).

Connexion à Azure

  1. À partir du terminal dans Visual Studio Code, exécutez la commande suivante pour vous connecter à Azure. L’exécution de cette commande ouvre un navigateur qui vous permet de vous connecter à votre compte.

    Connect-AzAccount
    
  2. Une fois que vous êtes connecté, vous voyez dans le terminal une liste des abonnements associés à ce compte. Si vous avez activé le bac à sable, l’abonnement Concierge doit figurer dans cette liste.

  3. Vérifiez le nom de l’abonnement. La commande suivante liste vos abonnements, leurs noms et leurs ID dans un format de tableau facile à lire. Recherchez Concierge Subscription.

    Get-AzSubscription
    
  4. Remplacez votre abonnement actif par l’abonnement Concierge.

    $context = Get-AzSubscription -SubscriptionName "Concierge Subscription" | Set-AzContext
    

Définir le groupe de ressources par défaut

Vous devez maintenant définir le groupe de ressources créé pour vous dans le bac à sable (sandbox) comme groupe de ressources par défaut. Pour effectuer cette opération, vous devez d’abord obtenir le nom du groupe de ressources en exécutant la commande suivante.

Get-AzResourceGroup | where-object ResourceGroupName -match "learn" | Set-AzDefault

Dans cette commande, utilisez le nom de ressource que vous avez obtenu avec la commande précédente. (Il doit ressembler à ceci : learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Cette commande vous permet d’omettre ce paramètre dans le reste des commandes Azure PowerShell de cet exercice.

Notes

Normalement, quand vous utilisez une commande PowerShell ou Azure CLI pour déployer un modèle, vous devez spécifier le nom du groupe de ressources cible. En exécutant la commande précédente, nous avons défini le contexte de notre déploiement. Nous avons spécifiez le nom de notre groupe de ressources de bac à sable en exécutant la commande PowerShell Set-AzDefault :

Set-AzDefault -ResourceGroupName {Resource Group Name}

Déployer un modèle local

Dans l’exercice suivant, vous allez déployer un modèle à partir de votre ordinateur local. Le nom du groupe de ressources que vous utilisez normalement lors du déploiement dans votre propre environnement n’est pas nécessaire ici, car nous avons déjà défini le groupe de ressources par défaut dans la section précédente.

  1. Pour démarrer, copiez le contenu du code de modèle suivant et collez-le dans un fichier, dans un répertoire local. Par exemple, utilisez C:\JSON\maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Après avoir enregistré le fichier localement, vous pouvez utiliser la commande PowerShell pour le déployer au niveau du groupe de ressources dont nous avons parlé dans la dernière unité. Par exemple, exécutez la commande New-AzResourceGroupDeployment.

    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-"+"$today"
    
    New-AzResourceGroupDeployment `
    -Name $DeploymentName `
    -TemplateFile $templateFile
    

    Une fois l’opération terminée, vos résultats doivent ressembler à cet exemple.

    DeploymentName          : DeployLocalTemplate-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:50:04 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Déployer le même modèle local avec des valeurs de paramètres

Dans l’exercice précédent, vous avez déployé votre modèle en utilisant la valeur par défaut du paramètre. Quand vous déployez un modèle ARM local, vous devrez peut-être passer des valeurs de paramètre. Vous pouvez utiliser des paramètres inline ou un fichier de paramètres.

Pour transmettre des paramètres inline à votre déploiement, vous devez fournir les noms du paramètre avec l’applet de commande New-AzResourceGroupDeployment. Dans l’exercice suivant, vous allez passer les paramètres en tant que paramètres inline et sous la forme d’un fichier de paramètres.

  1. En utilisant le même modèle que dans l’exercice précédent, construisez une table de hachage qui contiendra les valeurs pour les paramètres de modèle requis.

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-2-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterObject $parameters
    

    Une fois l’opération terminée, vos résultats doivent ressembler à ceci :

    DeploymentName          : DeployLocalTemplate-2-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:51:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    

    Plutôt que de passer les paramètres en tant que valeurs inline dans votre script, il peut être plus facile d’utiliser un fichier JSON contenant les valeurs des paramètres. Le fichier de paramètres peut être un fichier local ou un fichier externe/distant avec un URI accessible. Pour plus d’informations sur le fichier de paramètres, consultez Créer un fichier de paramètres Resource Manager.

  2. Pour passer un fichier de paramètres local, nous utilisons le paramètre TemplateParameterFile dans la même commande qu’auparavant. Mais tout d’abord, vous devez créer et enregistrer votre fichier de paramètres.

    1. Étant donné que nous utilisons Visual Studio Code avec l’extension Outils Azure Resource Manager, vous pouvez ouvrir le modèle ARM que vous avez enregistré localement et cliquer sur le lien Sélectionner/créer un fichier de paramètres....

    2. Sélectionnez Nouveau dans le menu, puis sélectionnez Uniquement les paramètres requis. L’extension crée un fichier de paramètres basé sur le modèle actuellement ouvert.

    Capture d’écran montrant les sélections à effectuer pour créer un fichier de paramètres dans Visual Studio Code.

  3. Utilisez la commande PowerShell suivante avec le paramètre TemplateParameterFile.

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $templateFile="C:\JSON\maintemplate.json"
    $TemplateParameterFile= "C:\JSON\maintemplate.parameters.json"
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-3-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateFile $templateFile `
        -TemplateParameterFile $TemplateParameterFile
    

    Après le déploiement, vos résultats doivent ressembler à l’exemple suivant.

    DeploymentName          : DeployLocalTemplate-3-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:54:40 p.m.
    Mode                    : Incremental
    TemplateLink            :
    Parameters              :
                              Name             Type                       Value
                              ===============  =========================  ==========
                              vnetName         String                     VNet-001
                              costCenterIO     String                     12345
                              ownerName        String                     John Smith
    
    Outputs                 :
    DeploymentDebugLogLevel :
    
    

Déployer un modèle externe ou distant

Dans certains cas, vous devez effectuer le déploiement à partir d’un emplacement externe ou distant, et non pas à partir d’un modèle sur votre ordinateur local. Vous pouvez stocker des modèles dans un dépôt de contrôle de code source (par exemple, GitHub). Vous pouvez aussi les stocker dans un compte de stockage Azure pour mettre en place un accès partagé dans votre organisation.

  1. Pour déployer un modèle externe, utilisez le paramètre TemplateUri.

    Dans l’exercice suivant, vous allez déployer un modèle ARM à partir d’un dépôt GitHub. Le dépôt étant public, vous n’avez pas à vous soucier du déploiement d’un modèle nécessitant un jeton de signature d’accès partagé (SAS). Pour plus d’informations sur l’utilisation d’un emplacement distant privé ou sécurisé, consultez Déployer un modèle privé avec un jeton SAS.

    L’URI de modèle pour cet exercice est https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Il s’agit d’un modèle concis qui déploiera un compte de stockage de base dans votre environnement bac à sable.

  2. La commande PowerShell est exactement la même que pour un modèle local. La seule différence est que le paramètre -TemplateUri remplace le paramètre -TemplateFile.

    Utilisez le code suivant pour effectuer le déploiement dans le bac à sable fourni :

    $parameters = @{vnetName = "VNet-001"; costCenterIO = "12345"; ownerName = "John Smith"}
    $today=Get-Date -Format "MM-dd-yyyy"
    $DeploymentName="DeployLocalTemplate-4-"+"$today"
    
    New-AzResourceGroupDeployment `
        -Name $DeploymentName `
        -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    Les résultats ressemblent à la capture d’écran suivante. Ils indiquent les détails de l’emplacement du modèle.

    DeploymentName          : DeployLocalTemplate-4-08-24-2020
    ResourceGroupName       : learn-03f041a7-cd17-4f50-9c81-5f6678feb217
    ProvisioningState       : Succeeded
    Timestamp               : 2020-08-24 5:56:55 p.m.
    Mode                    : Incremental
    TemplateLink            :
                              Uri            :
                              https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
                              ContentVersion : 1.0.0.0
    
    Parameters              :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountType    String                     Standard_LRS
                              location              String                     westus
    
    Outputs                 :
                              Name                  Type                       Value
                              ====================  =========================  ==========
                              storageAccountName    String                     storepgxosadmbq77e
    
    DeploymentDebugLogLevel :
    
    

Notes

Cette section a été écrite à l’aide de commandes Azure CLI dans le sous-système Windows Linux (WSL2) sur Windows 10. Les commandes sont les mêmes, que vous utilisiez Azure CLI dans un interpréteur de commandes PowerShell, CMD ou Bash. Toutefois, la manière dont les variables sont adressées peut différer.

Connexion à Azure

  1. À partir du terminal dans Visual Studio Code, exécutez la commande suivante pour vous connecter à Azure. L’exécution de cette commande ouvre un navigateur qui vous permet de vous connecter à votre compte.

    az login
    
  2. Une fois que vous êtes connecté, vous voyez dans le terminal une liste JSON des abonnements associés à ce compte. Si vous avez activé le bac à sable, l’abonnement Concierge doit figurer dans cette liste.

  3. Obtenir l’ID d’abonnement. L’exécution de la commande suivante liste vos abonnements et leurs ID. L’ID d’abonnement est la troisième colonne. Recherchez Concierge Subscription et copiez la troisième colonne. Elle doit se présenter comme aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    az account list -o table
    
  4. Modifiez votre abonnement actif par l’abonnement concierge. Veillez à remplacer {Your subscription ID} par l’ID de l’abonnement Concierge que vous avez obtenu dans la commande précédente.

    az account set -s {Your subscription ID}
    

Définir le groupe de ressources par défaut

Vous devez maintenant définir le groupe de ressources créé pour vous dans le bac à sable (sandbox) comme groupe de ressources par défaut. Pour effectuer cette opération, vous devez d’abord récupérer le nom du groupe de ressources à l’aide de la commande suivante :

az group list -o table

Dans cette commande, utilisez le nom de ressource que vous avez obtenu avec la commande précédente. (Il doit ressembler à ceci : learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Cette commande vous permet d’omettre ce paramètre dans le reste des commandes Azure CLI de cet exercice.

Notes

Normalement, quand vous utilisez une commande Azure CLI pour déployer un modèle, vous devez spécifier le nom du groupe de ressources cible. Dans l’exercice de ce module, nous passons outre cette exigence en définissant le contexte de notre déploiement. Nous spécifions le nom de notre groupe de ressources de bac à sable à l’étape suivante à l’aide de la commande Azure CLI az configure.

az configure --defaults group={Resource Group Name}

Déployer un modèle local

Dans l’exercice suivant, vous allez déployer un modèle à partir de votre ordinateur local. Le nom du groupe de ressources que vous utilisez normalement lors du déploiement dans votre propre environnement n’est pas nécessaire ici, car nous avons déjà défini le groupe de ressources par défaut dans la section précédente.

  1. Pour démarrer, copiez le contenu du code de modèle suivant et collez-le dans un fichier, dans un répertoire local. Par exemple, utilisez C:\JSON\maintemplate.json ou /mnt/c/Users/you/json/maintemplate.json.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "VnetName": {
            "type": "string",
            "defaultValue": "VNet-001",
            "metadata": {
              "description": "Virtual Network Name"
            }
          },
          "CostCenterIO": {
            "type": "string",
            "defaultValue": "12345",
            "metadata": {
              "description": "Cost Center IO number for cross billing"
            }
          },
          "OwnerName": {
            "type": "string",
            "defaultValue": "John Smith",
            "metadata": {
              "description": "Name of the stakeholder responsible for this resource"
            }
          }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },  
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  2. Après avoir enregistré le fichier localement, vous pouvez utiliser la commande Azure CLI pour le déployer au niveau du groupe de ressources dont nous avons parlé dans la dernière unité. À savoir, utilisez az deployment group create.

    Notes

    Dans l’exemple suivant, le fichier de modèle se trouve dans un dossier json sur le lecteur de base, dans le sous-système Windows Linux (WSL2). Ajustez votre commande en fonction de l’interpréteur de commandes de votre choix.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-"$today
    
    az deployment group create \
      --name $deploymentname \
      --template-file $templateFile
    

    Une fois l’exécution terminée, la sortie résultante doit ressembler à l’exemple suivant. Pour vérifier que votre déploiement a réussi, recherchez la ligne "provisioningState": "Succeeded".

    {
      "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-2020-08-19",
      "properties": {
        "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT8.9060761S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/    learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Network/virtualNetworks/VNet-001",
            "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
          }
        ],
        "outputs": null,
        "parameters": {
          "costCenterIO": {
            "type": "String",
            "value": "12345"
          },
          "ownerName": {
            "type": "String",
            "value": "John Smith"
          },
          "vnetName": {
            "type": "String",
            "value": "VNet-001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Network",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "virtualNetworks"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "11553431046699679955",
        "templateLink": null,
        "timestamp": "2020-08-19T14:47:06.403362+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    

Déployer le même modèle local avec des valeurs de paramètres

Dans l’exercice précédent, vous avez déployé votre modèle en utilisant la valeur par défaut du paramètre. Quand vous déployez un modèle ARM local, vous devrez peut-être passer des valeurs de paramètre. Vous pouvez utiliser des paramètres inline ou un fichier de paramètres.

Dans l’exercice suivant, vous allez passer des paramètres inline à votre déploiement. Vous devez fournir les noms des paramètres, que vous utilisiez des paramètres inline ou un fichier de paramètres, à l’aide de la commande az deployment group create .

  1. En utilisant le même modèle que dans l’exercice précédent, construisez une variable qui contiendra les paramètres dans un format de chaîne JSON pour les paramètres de modèle requis.

    Remarque

    Dans l’exemple suivant, le fichier de modèle se trouve dans un dossier json dans le sous-système Windows Linux (WSL2). Ajustez votre commande en fonction de l’interpréteur de commandes et du système d’exploitation de votre choix.

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-2-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters "$parameters"
    

    Une fois l’opération terminée, vos résultats doivent ressembler à ceux de l’exemple suivant. Consultez la section "parameters" et la valeur "provisioningState" pour vérifier la réussite de la commande.

      {- Finished ..
        "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2-2020-08-19",      
        "location": null,
        "name": "DeployLocalTemplate-2-2020-08-19",
        "properties": {
          "correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.6990388S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/resourceGroups/learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T16:40:20.249786+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

    Plutôt que de passer les paramètres en tant que valeurs inline dans votre script, il peut être plus facile d’utiliser un fichier JSON contenant les valeurs des paramètres. Le fichier de paramètres peut être un fichier local ou un fichier externe/distant avec un URI accessible. Pour plus d’informations sur le fichier de paramètres, consultez Créer un fichier de paramètres Resource Manager.

  2. Pour passer un fichier de paramètres local, nous utilisons le paramètre --parameters dans la même commande qu’auparavant. Mais tout d’abord, vous devez créer et enregistrer votre fichier de paramètres.

    1. Étant donné que nous utilisons Visual Studio Code avec l’extension Outils Azure Resource Manager, vous pouvez ouvrir le modèle ARM que vous avez enregistré localement et cliquer sur le lien Sélectionner ou créer un fichier de paramètres pour activer la validation complète.

    2. Sélectionnez Nouveau dans le menu. L’extension crée un fichier de paramètres basé sur le modèle actuellement ouvert.

    Capture d’écran montrant les sélections à effectuer pour créer un fichier de paramètres dans Visual Studio Code.

  3. Utilisez la commande Azure CLI suivante avec le paramètre --parameters.

    Notes

    Dans l’exemple suivant, le fichier de modèle se trouve dans un dossier json dans le sous-système Windows Linux (WSL2). Ajustez la commande en fonction de l’interpréteur de commandes et du système d’exploitation de votre choix.

    templateFile=/mnt/c/Users/<UserName>/json/maintemplate.json
    templateparameterfile=/mnt/c/Users/<UserName>/json/maintemplate.parameters.json
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-3-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-file $templateFile \
    --parameters $templateparameterfile
    

    Après le déploiement, vos résultats doivent ressembler à l’exemple suivant.

      {- Finished ..
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
        "location": null,
        "name": "DeployLocalTemplate-3-2020-08-19",
        "properties": {
          "correlationId": "cccc2222-dd33-4444-55ee-666666ffffff",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.2058912S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b"
            }
          ],
          "outputs": null,
          "parameters": {
            "costCenterIO": {
              "type": "String",
              "value": "12345"
            },
            "ownerName": {
              "type": "String",
              "value": "John Smith"
            },
            "vnetName": {
              "type": "String",
              "value": "VNet-001"
            }
          },
          "parametersLink": null,
          "providers": [
            {
              "id": null,
              "namespace": "Microsoft.Network",
              "registrationPolicy": null,
              "registrationState": null,
              "resourceTypes": [
                {
                  "aliases": null,
                  "apiVersions": null,
                  "capabilities": null,
                  "locations": [
                    "westus"
                  ],
                  "properties": null,
                  "resourceType": "virtualNetworks"
                }
              ]
            }
          ],
          "provisioningState": "Succeeded",
          "templateHash": "11553431046699679955",
          "templateLink": null,
          "timestamp": "2020-08-19T20:42:44.069215+00:00",
          "validatedResources": null
        },
        "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

Déployer un modèle externe ou distant

Dans certains cas, vous devez effectuer le déploiement à partir d’un emplacement externe ou distant, et non pas à partir d’un modèle sur votre ordinateur local. Vous pouvez stocker des modèles dans un dépôt de contrôle de code source (par exemple, GitHub). Vous pouvez aussi les stocker dans un compte de stockage Azure pour mettre en place un accès partagé dans votre organisation.

  1. Pour déployer un modèle externe, utilisez le paramètre --template-uri.

Dans cet exercice, vous allez déployer un modèle ARM à partir d’un dépôt GitHub. Le dépôt étant public, vous n’avez pas à vous soucier du déploiement d’un modèle nécessitant un jeton de signature d’accès partagé (SAS). Pour plus d’informations sur l’utilisation d’un emplacement distant privé ou sécurisé, consultez Déployer un modèle privé avec un jeton SAS.

L’URI de modèle pour cet exercice est https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Il s’agit d’un modèle concis qui déploiera un compte de stockage de base dans votre environnement bac à sable.

  1. La commande Azure CLI est exactement la même que pour un modèle local. La seule différence est que le paramètre --template-uri remplace le paramètre --template-file.

  2. Utilisez le code suivant pour effectuer le déploiement dans le bac à sable fourni :

    parameters="{\"vnetName\":{\"value\":\"VNet-001\"},\"costCenterIO\":{\"value\":\"12345\"},\"ownerName\":{\"value\":\"John Smith\"}}"
    today=$(date +"%Y-%m-%d")
    deploymentname="DeployLocalTemplate-4-"$today
    
    az deployment group create \
    --name $deploymentname \
    --template-uri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json
    

    Les résultats ressemblent au bloc de code suivant. Ils indiquent les détails de l’emplacement du modèle dans la section "templateLink". Ils montrent également si le déploiement a réussi dans la section "provisioningState".

    {- Finished ..
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-4-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-4-2020-08-19",
      "properties": {
        "correlationId": "dddd3333-ee44-5555-66ff-777777aaaaaa",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT24.3286124S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b"
          }
        ],
        "outputs": {
          "storageAccountName": {
            "type": "String",
            "value": "store7zk7eyqew54l4"
          }
        },
        "parameters": {
          "location": {
            "type": "String",
            "value": "westus"
          },
          "storageAccountType": {
            "type": "String",
            "value": "Standard_LRS"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Storage",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  "westus"
                ],
                "properties": null,
                "resourceType": "storageAccounts"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12600309984865991765",
        "templateLink": {
          "contentVersion": "1.0.0.0",
          "id": null,
          "relativePath": null,
          "uri": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json"
        },
        "timestamp": "2020-08-19T20:53:36.759312+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-dddd3d3d-ee4e-ff5f-aa6a-bbbbbb7b7b7b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }