Oefening: gekoppelde en geneste ARM-sjablonen implementeren

Voltooid

Notitie

De eerste keer dat u een sandbox activeert en de voorwaarden accepteert, wordt uw Microsoft-account gekoppeld aan een nieuwe Azure-map met de naam Microsoft Learn-sandbox. U wordt toegevoegd aan een speciaal abonnement met de naam Concierge-abonnement.

Hier implementeert u een sjabloon met twee gekoppelde sjablonen in de opgegeven sandbox-omgeving.

In deze oefening wordt Hulpprogramma's van Azure Resource Manager voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.

Uw testomgeving instellen met het opgegeven Azure-sandbox-abonnement

Als u elke implementatie in deze eenheid wilt uitvoeren, moet u zich aanmelden bij uw Azure-account vanuit de Visual Studio Code-terminal.

Zorg ervoor dat u zich aanmeldt bij hetzelfde account waarmee u de sandbox hebt geactiveerd.

Aanmelden bij Azure

  1. Voer in de terminal in Visual Studio Code de volgende opdracht uit om u aan te melden bij Azure. Als u deze opdracht uitvoert, wordt een browser geopend waarmee u zich kunt aanmelden bij uw account.

    Connect-AzAccount
    
  2. Wanneer u bent aangemeld, ziet u een lijst met de abonnementen die zijn gekoppeld aan dit account in de terminal. Als u de sandbox hebt geactiveerd, wordt het Concierge-abonnement in deze lijst weergegeven.

  3. Verkrijg de abonnements-id. Met de volgende opdracht worden uw abonnementen en hun id's weergegeven in een gemakkelijk te lezen tabelindeling. De abonnements-id is de tweede kolom. Zoek naar Concierge Subscription en kopieer de tweede kolom. Het ziet er ongeveer als volgt uit: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    Get-AzSubscription
    
  4. Wijzig uw actieve abonnement naar het Concierge-abonnement. Vervang {Your subscription ID} door de id van het Concierge-abonnement dat u met de vorige opdracht hebt opgehaald.

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

De standaardresourcegroep instellen

Stel nu de resourcegroep die voor u is gemaakt in de sandbox in als standaardresourcegroep. Als u deze bewerking wilt uitvoeren, moet u eerst de naam van de resourcegroep ophalen met behulp van de volgende opdracht:

Get-AzResourceGroup

Gebruik in deze opdracht de resourcenaam die u hebt opgehaald uit de vorige opdracht. Het ziet er ongeveer als volgt uit: learn-a73131a1-b618-48b8-af70-21af7ca420c4. Met deze opdracht kunt u deze parameter weglaten uit de rest van de Azure PowerShell-opdrachten in deze oefening.

Notitie

Wanneer u een PowerShell- of Azure CLI-opdracht gebruikt voor het implementeren van een sjabloon, moet u normaal gesproken de naam van de doelresourcegroep opgeven. In de oefening in deze module omzeilen we deze vereiste door de context van onze implementatie in te stellen. De naam van de resourcegroep voor de sandbox wordt in de volgende stap opgegeven met behulp van de PowerShell-opdracht Set-AzDefault.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Een gekoppelde sjabloon implementeren

In deze oefening bekijken en implementeren we een sjabloon met twee gekoppelde sjablonen.

  1. Als u een gekoppelde sjabloon wilt toevoegen aan uw ARM-sjabloon, voegt u een Microsoft.Resources/deployments resource en de templateLink eigenschap toe die is geconfigureerd met de locatie van de sjabloon.

  2. In de volgende voorbeeldsjabloon ziet u dat twee variabelen externe of externe sjablonen definiëren die zich in een GitHub-opslagplaats bevinden.

    Bekijk de sjabloon en noteer de "type": "Microsoft.Resources/deployments" secties die bepalen waar en hoe de gekoppelde sjablonen worden geïmplementeerd.

    Met de eerste gekoppelde sjabloon wordt een opslagaccount geïmplementeerd. Hierbij worden bovenliggende parameters gebruikt en de opslagsjabloon geïmplementeerd.

    De tweede gekoppelde sjabloon is zo geconfigureerd dat deze afhankelijk is van de implementatie van de opslag en dat een sjabloon voor een virtueel netwerk wordt geïmplementeerd.

    {
    "$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. Kopieer en plak de inhoud van de voorgaande sjablooncode in een bestand in een lokale map. Gebruik bijvoorbeeld C:\JSON\linkedtemplate.json.

  4. Nadat u het bestand lokaal hebt opgeslagen, gebruikt u de volgende PowerShell-opdracht om het te implementeren op het niveau van de resourcegroep waarover we in de laatste les hebben gesproken. Gebruik New-AzResourceGroupDeployment.

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

    Nadat deze is voltooid, moet u resultaten hebben zoals de volgende exmaple.

    Resultaten van de implementatie van de gekoppelde sjabloon.

  5. Valideer de resultaten.

    1. Ga naar Azure Portal en open het sandbox-abonnement. Hiertoe selecteert u uw avatar in de rechterbovenhoek van de pagina. Selecteer Schakelen tussen directory's. In de lijst kiest u de map Microsoft Learn Sandbox.

    2. Selecteer Resourcegroepen in het linkerdeelvenster.

    3. Selecteer [naam sandboxresourcegroep].

    4. In het gebied Overzicht ziet u dat de implementatie slaagt. Selecteer 3 Geslaagd om de details van de implementatie te bekijken. (Er zijn mogelijk meer geslaagde implementaties als u de oefeningen van de vorige les hebt uitgevoerd.)

    Azure-portal-interface voor implementaties met de ene implementatie die wordt vermeld en met de status geslaagd.

    U ziet dat u één sjabloon hebt geïmplementeerd, maar dat er drie worden weergegeven in het implementatiedeelvenster van de portal. Deze drie implementaties komen overeen met de hoofdsjabloon en de twee gekoppelde sjablonen.

    Azure-portal-interface voor de specifieke implementatie waarvoor geen resources worden weergegeven.

Aanmelden bij Azure

  1. Voer in de terminal in Visual Studio Code de volgende opdracht uit om u aan te melden bij Azure. Als u deze opdracht uitvoert, wordt een browser geopend waarmee u zich kunt aanmelden bij uw account.

    az login
    
  2. Wanneer u bent aangemeld, ziet u een JSON-lijst met de abonnementen die zijn gekoppeld aan het account in de terminal. Als u de sandbox hebt geactiveerd, wordt het Concierge-abonnement in deze lijst weergegeven.

  3. Verkrijg de abonnements-id. De volgende opdracht bevat uw abonnementen en hun id's. De abonnements-id is de derde kolom. Zoek naar Concierge Subscription en kopieer de derde kolom. Het ziet er ongeveer als volgt uit: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    az account list -o table
    
  4. Wijzig uw actieve abonnement naar het Concierge-abonnement. Vervang {Your subscription ID} door de id van het Concierge-abonnement dat u met de vorige opdracht hebt opgehaald.

    az account set -s {Your subscription ID}
    

De standaardresourcegroep instellen

Stel nu de resourcegroep die voor u is gemaakt in de sandbox in als standaardresourcegroep. Als u deze bewerking wilt uitvoeren, moet u eerst de naam van de resourcegroep ophalen met behulp van de volgende opdracht:

az group list -o table

Gebruik in deze opdracht de naam van de resourcegroep die u van de vorige opdracht hebt gekregen. (Het ziet er ongeveer als volgt uit learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Als u deze standaardinstelling instelt, kunt u die parameter weglaten uit de rest van de Azure CLI-opdrachten in deze oefening.

Notitie

Normaal gesproken moet u wanneer u een Azure CLI-opdracht gebruikt voor het implementeren van een sjabloon de naam van de doelresourcegroep opgeven. In de oefening in deze module omzeilen we deze vereiste door de context van onze implementatie in te stellen. De naam van de resourcegroep voor de sandbox wordt in de volgende stap opgegeven met behulp van de Azure CLI-opdracht az configure.

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

Een gekoppelde sjabloon implementeren

In deze oefening bekijken en implementeren we een sjabloon met twee gekoppelde sjablonen.

  1. Als u een gekoppelde sjabloon wilt toevoegen aan uw ARM-sjabloon, voegt u een Microsoft.Resources/deployments resource en de templateLink eigenschap toe die is geconfigureerd met de locatie van de sjabloon.

  2. In de volgende voorbeeldsjabloon ziet u dat twee variabelen externe of externe sjablonen definiëren die zich in een GitHub-opslagplaats bevinden.

    Bekijk de sjabloon en noteer de "type": "Microsoft.Resources/deployments" secties die bepalen waar en hoe de gekoppelde sjablonen worden geïmplementeerd.

    Met de eerste gekoppelde sjabloon wordt een opslagaccount geïmplementeerd. Hierbij worden bovenliggende parameters gebruikt en de opslagsjabloon geïmplementeerd.

    De tweede gekoppelde sjabloon is zo geconfigureerd dat deze afhankelijk is van de implementatie van de opslag en dat een sjabloon voor een virtueel netwerk wordt geïmplementeerd.

    {
    "$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. Kopieer en plak de inhoud van de voorgaande sjablooncode in een bestand in een lokale map. Gebruik bijvoorbeeld C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json.

  4. Nadat u dat bestand lokaal hebt opgeslagen, implementeert u het op het niveau van de resourcegroep met behulp van de volgende Azure CLI-opdracht. Gebruik 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
    

    Nadat de bewerking is voltooid, moet u resultaten hebben die op het volgende voorbeeld lijken. Controleer de waarde "provisioningState" om te zien of de implementatie is geslaagd.

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-3-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-3-2020-08-19",
      "properties": {
        "correlationId": "f127f689-badf-4063-ad55-dff549e63e48",
        "debugSetting": null,
        "dependencies": [
          {
            "dependsOn": [
              {
                "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/storage",
                "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
                "resourceName": "storage",
                "resourceType": "Microsoft.Resources/deployments"
              }
            ],
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/identity",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b",
            "resourceName": "identity",
            "resourceType": "Microsoft.Resources/deployments"
          }
        ],
        "duration": "PT16.4639167S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Network/virtualNetworks/vnet-001",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          },
          {
            "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Storage/storageAccounts/store7zk7eyqew54l4",
            "resourceGroup": "learn-159e2742-d3a1-4e71-84a3-16e19830242b"
          }
        ],
        "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-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    
  5. Valideer de resultaten.

    1. Ga naar Azure Portal en open het sandbox-abonnement. Hiertoe selecteert u uw avatar in de rechterbovenhoek van de pagina. Selecteer Schakelen tussen directory's. In de lijst kiest u de map Microsoft Learn Sandbox.

    2. Selecteer Resourcegroepen in het linkerdeelvenster.

    3. Selecteer [naam sandboxresourcegroep].

    4. In het gebied Overzicht ziet u dat de implementatie is geslaagd. Selecteer 3 Geslaagd om de details van de implementatie te bekijken. (Er zijn mogelijk meer geslaagde implementaties als u de oefeningen van de vorige les hebt uitgevoerd.)

    Azure-portal-interface voor implementaties met de ene implementatie die wordt vermeld en met de status geslaagd.

    U ziet dat u één sjabloon hebt geïmplementeerd, maar dat er drie worden weergegeven in het implementatiedeelvenster van de portal. Deze drie implementaties komen overeen met de hoofdsjabloon en de twee gekoppelde sjablonen.

    Azure-portal-interface voor de specifieke implementatie waarvoor geen resources worden weergegeven.