Exercice - Déployer des modèles ARM liés et imbriqués

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 qui comprend deux modèles liés dans l’environnement de bac à sable fourni.

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

Configurer votre environnement de test avec l’abonnement Bac à sable Azure fourni

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. Obtenir l’ID d’abonnement. La commande suivante liste vos abonnements et leur ID dans un format de tableau facile à lire. L’ID d’abonnement est la deuxième colonne. Recherchez Concierge Subscription et copiez la deuxième colonne. Il doit ressembler à ceci : aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  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.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

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 :

Get-AzResourceGroup

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.

Remarque

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. 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 PowerShell Set-AzDefault.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Déployer un modèle lié

Dans cet exercice, nous passons en revue et nous déployons un modèle qui comprend deux modèles liés.

  1. Pour ajouter un modèle lié à votre modèle ARM, ajoutez une ressource Microsoft.Resources/deployments et la propriété templateLink configurée avec l’emplacement du modèle.

  2. Dans l’exemple de modèle suivant, notez que deux variables définissent des modèles distants ou externes situés dans un dépôt GitHub.

    Passez en revue le modèle et notez les sections "type": "Microsoft.Resources/deployments" qui définissent où et comment les modèles liés sont déployés.

    Le premier modèle lié déploie un compte de stockage. Il consomme les paramètres parents et déploie le modèle de stockage.

    Le deuxième modèle lié est configuré pour dépendre du déploiement de stockage et pour déployer un modèle de réseau virtuel.

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
        {
            "name": "storage",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "location": { "value": "[resourceGroup().location]" }
                }
            }
        },
        {
            "name": "identity",
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2019-10-01",
            "dependsOn": [
                "[resourceId('Microsoft.Resources/deployments','storage')]"
            ],
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[variables('linked-template-2')]",
                    "contentVersion": "1.0.0.0"
                }
            }
        }
    ],
    "outputs": {}
    }
    
  3. Copiez le contenu du modèle précédent et collez-le dans un fichier, dans un répertoire local. Par exemple, utilisez C:\JSON\linkedtemplate.json.

  4. Après avoir enregistré le fichier localement, utilisez la commande PowerShell suivante pour le déployer au niveau du groupe de ressources dont nous avons parlé dans la dernière unité. À savoir, utilisez New-AzResourceGroupDeployment.

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

    Une fois l’opération terminée, vos résultats doivent se présenter comme dans l’exemple suivant.

    Résultats du déploiement du modèle lié.

  5. Validez les résultats.

    1. Accédez au portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable. Pour cela, sélectionnez votre avatar dans le coin supérieur droit de la page. Sélectionnez Changer de répertoire. Dans la liste, choisissez le répertoire Bac à sable Microsoft Learn.

    2. Dans le volet de gauche, sélectionnez Groupes de ressources.

    3. Sélectionnez [nom du groupe de ressources du bac à sable].

    4. Dans la zone Vue d’ensemble, vous voyez que le déploiement réussit. Sélectionnez 3 réussi pour afficher les détails du déploiement. (Le déploiement peut être plus complet selon que vous avez effectué les exercices de l’unité précédente.)

    Interface du Portail Azure pour les déploiements avec un déploiement répertorié avec un état réussi.

    Notez que vous avez déployé un modèle, mais que trois sont listés dans le volet de déploiement du portail. Ces trois déploiements correspondent au modèle principal et aux deux modèles liés.

    Interface du Portail Azure pour le déploiement spécifique sans aucune ressource répertoriée.

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. Il doit ressembler à ceci : 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 du groupe de ressources que vous avez obtenu avec la commande précédente. (Il doit ressembler à ceci : learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Définir cette valeur par défaut vous permet d’omettre ce paramètre dans le reste des commandes Azure CLI de cet exercice.

Remarque

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 lié

Dans cet exercice, nous passons en revue et nous déployons un modèle qui comprend deux modèles liés.

  1. Pour ajouter un modèle lié à votre modèle ARM, ajoutez une ressource Microsoft.Resources/deployments et la propriété templateLink configurée avec l’emplacement du modèle.

  2. Dans l’exemple de modèle suivant, notez que deux variables définissent des modèles distants ou externes situés dans un dépôt GitHub.

    Passez en revue le modèle et notez les sections "type": "Microsoft.Resources/deployments" qui définissent où et comment les modèles liés sont déployés.

    Le premier modèle lié déploie un compte de stockage. Il consomme les paramètres parents et déploie le modèle de stockage.

    Le deuxième modèle lié est configuré pour dépendre du déploiement de stockage et pour déployer un modèle de réseau virtuel.

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "linkeddemo001"
        }
    },
    "variables": {
        "linked-template": "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json",
        "linked-template-2": "https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/azure-resource-manager/what-if/what-if-before.json"
    },
    "resources": [
      {
          "name": "storage",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template')]",
                  "contentVersion": "1.0.0.0"
              },
              "parameters": {
                  "location": { "value": "[resourceGroup().location]" }
              }
          }
      },
      {
          "name": "identity",
          "type": "Microsoft.Resources/deployments",
          "apiVersion": "2019-10-01",
          "dependsOn": [
              "[resourceId('Microsoft.Resources/deployments','storage')]"
          ],
          "properties": {
              "mode": "Incremental",
              "templateLink": {
                  "uri": "[variables('linked-template-2')]",
                  "contentVersion": "1.0.0.0"
              }
          }
      }
    ],
    "outputs": {}
    }
    
  3. Copiez le contenu du modèle précédent et collez-le dans un fichier, dans un répertoire local. Par exemple, utilisez C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json.

  4. Une fois le fichier enregistré localement, déployez-le au niveau du groupe de ressources en utilisant la commande Azure CLI suivante. À savoir, utilisez az deployment group create.

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

    Une fois l’opération terminée, vos résultats doivent ressembler à ceux de l’exemple suivant. Examinez la valeur "provisioningState" pour vérifier que le déploiement a réussi.

    {- Finished ..
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-3-2020-08-19",
      "properties": {
        "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Resources/deployments/storage",
                "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
                "resourceName": "storage",
                "resourceType": "Microsoft.Resources/deployments"
              }
            ],
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Resources/deployments/identity",
            "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
            "resourceName": "identity",
            "resourceType": "Microsoft.Resources/deployments"
          }
        ],
        "duration": "PT16.4639167S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Network/virtualNetworks/vnet-001",
            "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
          },
          {
            "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f"
          }
        ],
        "outputs": {},
        "parameters": {
          "name": {
            "type": "String",
            "value": "linkeddemo001"
          }
        },
        "parametersLink": null,
        "providers": [
          {
            "id": null,
            "namespace": "Microsoft.Resources",
            "registrationPolicy": null,
            "registrationState": null,
            "resourceTypes": [
              {
                "aliases": null,
                "apiVersions": null,
                "capabilities": null,
                "locations": [
                  null
                ],
                "properties": null,
                "resourceType": "deployments"
              }
            ]
          }
        ],
        "provisioningState": "Succeeded",
        "templateHash": "12700491000282730217",
        "templateLink": null,
        "timestamp": "2020-08-19T21:07:18.729310+00:00",
        "validatedResources": null
      },
      "resourceGroup": "learn-bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    
  5. Validez les résultats.

    1. Accédez au portail Azure et vérifiez que vous êtes bien dans l’abonnement de bac à sable. Pour cela, sélectionnez votre avatar dans le coin supérieur droit de la page. Sélectionnez Changer de répertoire. Dans la liste, choisissez le répertoire Bac à sable Microsoft Learn.

    2. Dans le volet de gauche, sélectionnez Groupes de ressources.

    3. Sélectionnez [nom du groupe de ressources du bac à sable].

    4. Dans la zone Vue d’ensemble, vous voyez que le déploiement a réussi. Sélectionnez 3 réussi pour afficher les détails du déploiement. (Le déploiement peut être plus complet selon que vous avez effectué les exercices de l’unité précédente.)

    Interface du Portail Azure pour les déploiements avec un déploiement répertorié avec un état réussi.

    Notez que vous avez déployé un modèle, mais que trois sont listés dans le volet de déploiement du portail. Ces trois déploiements correspondent au modèle principal et aux deux modèles liés.

    Interface du Portail Azure pour le déploiement spécifique sans aucune ressource répertoriée.