Ćwiczenie — wdrażanie połączonych i zagnieżdżonych szablonów usługi ARM

Ukończone

Uwaga

Przy pierwszym aktywowaniu piaskownicy i zaakceptowaniu warunków konto Microsoft zostaje skojarzone z nowym katalogiem platformy Azure o nazwie Microsoft Learn Sandbox. Zostanie też do Ciebie przypisana specjalna subskrypcja o nazwie Subskrypcja Concierge.

W tym miejscu wdrożysz szablon zawierający dwa połączone szablony w podanym środowisku piaskownicy.

W tym ćwiczeniu używane są narzędzia usługi Azure Resource Manager dla programu Visual Studio Code. Pamiętaj, aby zainstalować to rozszerzenie w programie Visual Studio Code.

Konfigurowanie środowiska testowego za pomocą udostępnionej subskrypcji piaskownicy platformy Azure

Aby wykonać każde wdrożenie opisane w tej lekcji, należy zalogować się do konta platformy Azure z poziomu terminalu programu Visual Studio Code.

Zaloguj się na konto, którego użyto do aktywowania piaskownicy.

Logowanie się do platformy Azure

  1. Z poziomu terminalu w programie Visual Studio Code uruchom następujące polecenie, aby zalogować się na platformie Azure. Uruchomienie tego polecenia spowoduje otwarcie przeglądarki, która umożliwia zalogowanie się do konta.

    Connect-AzAccount
    
  2. Po zalogowaniu się w terminalu zostanie wyświetlona lista subskrypcji skojarzonych z tym kontem. Jeśli aktywowano piaskownicę, na liście powinna być widoczna subskrypcja Concierge.

  3. Uzyskaj identyfikator subskrypcji. Poniższe polecenie wyświetla listę subskrypcji i ich identyfikatorów w łatwym do odczytania formacie tabeli. Identyfikatory subskrypcji znajdują się w drugiej kolumnie. Poszukaj subskrypcji Concierge Subscription i skopiuj wartość z drugiej kolumny. Wygląda to mniej więcej tak: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    Get-AzSubscription
    
  4. Zmień aktywną subskrypcję na subskrypcję Concierge. Pamiętaj, aby zastąpić ciąg {Your subscription ID} identyfikatorem subskrypcji Concierge uzyskanym w poprzednim poleceniu.

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

Ustawianie domyślnej grupy zasobów

Musisz teraz ustawić grupę zasobów utworzoną automatycznie w piaskownicy jako domyślną grupę zasobów. Aby wykonać tę operację, najpierw należy uzyskać nazwę grupy zasobów przy użyciu następującego polecenia:

Get-AzResourceGroup

W tym poleceniu użyj nazwy zasobu uzyskanej z poprzedniego polecenia. Wygląda to mniej więcej tak: learn-a73131a1-b618-48b8-af70-21af7ca420c4. To polecenie umożliwia pominięcie tego parametru w pozostałych poleceniach programu Azure PowerShell w tym ćwiczeniu.

Uwaga

Zwykle w przypadku wdrażania szablonu za pomocą programu PowerShell lub polecenia interfejsu wiersza polecenia platformy Azure należy określić nazwę docelowej grupy zasobów. W ćwiczeniu w tym module pomijamy to wymaganie przez ustawienie kontekstu wdrożenia. W następnym kroku określamy nazwę grupy zasobów piaskownicy za pomocą polecenia Set-AzDefault programu PowerShell.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Wdrażanie szablonu połączonego

W tym ćwiczeniu przejrzymy i wdrożymy szablon zawierający dwa połączone szablony.

  1. Aby dodać połączony szablon do szablonu usługi ARM, dodaj Microsoft.Resources/deployments zasób i templateLink właściwość skonfigurowaną z lokalizacją szablonu.

  2. W poniższym przykładowym szablonie zwróć uwagę, że dwie zmienne definiują szablony zdalne lub zewnętrzne znajdujące się w repozytorium GitHub.

    Przejrzyj szablon i zanotuj "type": "Microsoft.Resources/deployments" sekcje definiujące miejsce i sposób wdrażania połączonych szablonów.

    Pierwszy połączony szablon wdraża konto magazynu. Przetwarza on parametry nadrzędne i wdraża szablon magazynu.

    Drugi połączony szablon jest skonfigurowany w taki sposób, aby był zależny od wdrożenia magazynu oraz aby wdrażał szablon sieci wirtualnej.

    {
    "$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. Skopiuj i wklej zawartość poprzedniego szablonu do pliku w katalogu lokalnym. Na przykład użyj C:\JSON\linkedtemplate.json.

  4. Po zapisaniu pliku lokalnie użyj następującego polecenia programu PowerShell, aby wdrożyć go na poziomie grupy zasobów, o którym mówiliśmy w ostatniej lekcji. Mianowicie użyj polecenia New-AzResourceGroupDeployment.

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

    Po zakończeniu powinny pojawić się wyniki podobne do poniższych.

    Wyniki wdrażania połączonego szablonu.

  5. Zweryfikuj wyniki.

    1. Przejdź do witryny Azure Portal i upewnij się, że znajdujesz się w subskrypcji piaskownicy. W tym celu wybierz swój awatar w prawym górnym rogu strony. Wybierz pozycję Przełącz katalog. Z listy wybierz katalog Microsoft Learn Sandbox.

    2. W panelu po lewej stronie wybierz pozycję Grupy zasobów.

    3. Wybierz pozycję [nazwa grupy zasobów piaskownicy].

    4. W obszarze Przegląd zobaczysz, że wdrożenie zakończy się pomyślnie. Wybierz pozycję 3 udane, aby wyświetlić szczegóły wdrożenia. (W zależności od tego, czy wykonano ćwiczenia z poprzedniej lekcji, wdrożenie może być bardziej kompleksowe).

    Interfejs witryny Azure Portal dla wdrożeń z wymienionym odpowiednim wdrożeniem i stanem wskazującym na powodzenie.

    Zauważ, że wdrożono jeden szablon, ale w okienku wdrażania w portalu są wymienione trzy szablony. Te trzy wdrożenia odpowiadają szablonowi głównemu i dwóm połączonym szablonom.

    Interfejs witryny Azure Portal z widocznym konkretnym wdrożeniem bez zasobów.

Logowanie się do platformy Azure

  1. Z poziomu terminalu w programie Visual Studio Code uruchom następujące polecenie, aby zalogować się na platformie Azure. Uruchomienie tego polecenia spowoduje otwarcie przeglądarki, która umożliwia zalogowanie się do konta.

    az login
    
  2. Po zalogowaniu się w terminalu zostanie wyświetlona lista subskrypcji skojarzonych z kontem w formacie JSON. Jeśli aktywowano piaskownicę, na liście powinna być widoczna subskrypcja Concierge.

  3. Uzyskaj identyfikator subskrypcji. Poniższe polecenie wyświetla listę subskrypcji i ich identyfikatorów. Identyfikator subskrypcji znajduje się w trzeciej kolumnie. Poszukaj subskrypcji Concierge Subscription i skopiuj wartość z trzeciej kolumny. Wygląda to mniej więcej tak: cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    az account list -o table
    
  4. Zmień aktywną subskrypcję na subskrypcję Concierge. Pamiętaj, aby zastąpić ciąg {Your subscription ID} identyfikatorem subskrypcji Concierge uzyskanym w poprzednim poleceniu.

    az account set -s {Your subscription ID}
    

Ustawianie domyślnej grupy zasobów

Musisz teraz ustawić grupę zasobów utworzoną automatycznie w piaskownicy jako domyślną grupę zasobów. Aby wykonać tę operację, najpierw należy uzyskać nazwę grupy zasobów przy użyciu następującego polecenia:

az group list -o table

W tym poleceniu użyj nazwy grupy zasobów, która została uzyskana z poprzedniego polecenia. (Wygląda to mniej więcej tak: learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Ustawienie tej wartości domyślnej umożliwia pominięcie tego parametru z pozostałych poleceń interfejsu wiersza polecenia platformy Azure w tym ćwiczeniu.

Uwaga

Zwykle w przypadku wdrażania szablonu za pomocą polecenia interfejsu wiersza polecenia platformy Azure należy określić nazwę docelowej grupy zasobów. W ćwiczeniu w tym module pomijamy to wymaganie przez ustawienie kontekstu wdrożenia. W następnym kroku określamy nazwę grupy zasobów piaskownicy za pomocą polecenia az configure interfejsu wiersza polecenia platformy Azure.

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

Wdrażanie szablonu połączonego

W tym ćwiczeniu przejrzymy i wdrożymy szablon zawierający dwa połączone szablony.

  1. Aby dodać połączony szablon do szablonu usługi ARM, dodaj Microsoft.Resources/deployments zasób i templateLink właściwość skonfigurowaną z lokalizacją szablonu.

  2. W poniższym przykładowym szablonie zwróć uwagę, że dwie zmienne definiują szablony zdalne lub zewnętrzne znajdujące się w repozytorium GitHub.

    Przejrzyj szablon i zanotuj "type": "Microsoft.Resources/deployments" sekcje definiujące miejsce i sposób wdrażania połączonych szablonów.

    Pierwszy połączony szablon wdraża konto magazynu. Przetwarza on parametry nadrzędne i wdraża szablon magazynu.

    Drugi połączony szablon jest skonfigurowany w taki sposób, aby był zależny od wdrożenia magazynu oraz aby wdrażał szablon sieci wirtualnej.

    {
    "$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. Skopiuj i wklej zawartość poprzedniego szablonu do pliku w katalogu lokalnym. Na przykład użyj C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json.

  4. Po zapisaniu tego pliku lokalnie wdróż go na poziomie grupy zasobów przy użyciu następującego polecenia interfejsu wiersza polecenia platformy Azure. To polecenie to 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
    

    Wynik wyświetlony po zakończeniu wykonywania polecenia powinien wyglądać podobnie jak na poniższym przykładzie. Sprawdź wartość "provisioningState", aby upewnić się, że wdrożenie zakończyło się pomyślnie.

    {- 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. Zweryfikuj wyniki.

    1. Przejdź do witryny Azure Portal i upewnij się, że znajdujesz się w subskrypcji piaskownicy. W tym celu wybierz swój awatar w prawym górnym rogu strony. Wybierz pozycję Przełącz katalog. Z listy wybierz katalog Microsoft Learn Sandbox.

    2. W panelu po lewej stronie wybierz pozycję Grupy zasobów.

    3. Wybierz pozycję [nazwa grupy zasobów piaskownicy].

    4. W obszarze Przegląd zobaczysz, że wdrożenie zakończyło się pomyślnie. Wybierz pozycję 3 udane, aby wyświetlić szczegóły wdrożenia. (W zależności od tego, czy wykonano ćwiczenia z poprzedniej lekcji, wdrożenie może być bardziej kompleksowe).

    Interfejs witryny Azure Portal dla wdrożeń z wymienionym odpowiednim wdrożeniem i stanem wskazującym na powodzenie.

    Zauważ, że wdrożono jeden szablon, ale w okienku wdrażania w portalu są wymienione trzy szablony. Te trzy wdrożenia odpowiadają szablonowi głównemu i dwóm połączonym szablonom.

    Interfejs witryny Azure Portal z widocznym konkretnym wdrożeniem bez zasobów.