Ćwiczenie — wdrażanie 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.

Tutaj wdrożysz szablon usługi Azure Resource Manager (ARM) z komputera i z repozytorium GitHub, podając identyfikator URI.

Ważne

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, korzystając z subskrypcji piaskownicy witryny Microsoft Learn

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. Sprawdź nazwę subskrypcji. Poniższe polecenie wyświetla listę subskrypcji, nazw i ich identyfikatorów w łatwym do odczytania formacie tabeli. Wyszukaj ciąg Concierge Subscription.

    Get-AzSubscription
    
  4. Zmień aktywną subskrypcję na subskrypcję Concierge.

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

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 musisz pobrać nazwę grupy zasobów, uruchamiając następujące polecenie.

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

W tym poleceniu użyj nazwy zasobu uzyskanej z poprzedniego polecenia. (Wygląda na to, że jest to coś takiego jak learn-a73131a1-b618-48b8-af70-21af7ca420c4.) To polecenie umożliwia pominięcie tego parametru z pozostałych poleceń programu Azure PowerShell w tym ćwiczeniu.

Uwaga

Zwykle po uruchomieniu polecenia programu PowerShell lub interfejsu wiersza polecenia platformy Azure w celu wdrożenia szablonu należy określić docelową nazwę grupy zasobów. Uruchamiając poprzednie polecenie, ustawiliśmy kontekst wdrożenia. Określiliśmy nazwę grupy zasobów piaskownicy, uruchamiając polecenie Set-AzDefault programu PowerShell:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Wdrażanie szablonu lokalnego

W poniższym ćwiczeniu wdrożysz szablon z komputera lokalnego. W tym miejscu nie jest wymagana nazwa grupy zasobów, która jest zwykle używana podczas wdrażania we własnym środowisku, ponieważ w poprzedniej sekcji zdefiniowaliśmy już domyślną grupę zasobów.

  1. Na początek skopiuj kod następującego szablonu i wklej go do pliku w katalogu lokalnym. Na przykład użyj 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. Po zapisaniu pliku lokalnie możesz użyć polecenia programu PowerShell, aby wdrożyć go na poziomie grupy zasobów, o którym mówiliśmy w ostatniej lekcji. Użyj polecenia New-AzResourceGroupDeployment .

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

    Po zakończeniu powinny pojawić się wyniki podobne do tego przykładu.

    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 :
    
    

Wdrażanie tego samego szablonu lokalnego z wartościami parametrów

W ostatnim ćwiczeniu szablon został wdrożony przy użyciu domyślnych wartości parametrów. Podczas wdrażania lokalnego szablonu usługi ARM może być konieczne przekazanie wartości parametrów. Możesz użyć parametrów śródwierszowych lub pliku parametrów.

Aby przekazać parametry śródwierszowe do wdrożenia, należy podać nazwy tych parametrów za pomocą polecenia cmdlet New-AzResourceGroupDeployment. W następnym ćwiczeniu przekażesz te parametry jako parametry śródwierszowe i jako plik parametrów.

  1. Używając tego samego szablonu co w ostatnim ćwiczeniu, skonstruuj tabelę skrótów zawierającą wartości wymaganych parametrów szablonu.

    $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
    

    Po zakończeniu działania tego polecenia powinny zostać wyświetlone wyniki podobne do następujących:

    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 :
    

    Zamiast przekazywania parametrów jako wartości śródwierszowych w skrypcie, prostsze może być użycie pliku JSON zawierającego wartości parametrów. Plik parametrów może być plikiem lokalnym lub zewnętrznym/zdalnym z dostępnym identyfikatorem URI. Aby uzyskać więcej informacji na temat pliku parametrów, zobacz Tworzenie pliku parametrów usługi Resource Manager.

  2. Aby przekazać lokalny plik parametrów, użyjemy parametru TemplateParameterFile w tym samym poleceniu, z którego korzystaliśmy. Najpierw należy jednak utworzyć i zapisać plik parametrów.

    1. Ponieważ używamy programu Visual Studio Code z rozszerzeniem Narzędzi usługi Azure Resource Manager, możesz otworzyć zapisany lokalnie szablon usługi ARM i wybrać link Wybierz/utwórz plik parametrów ... .

    2. Wybierz pozycję Nowy w menu, a następnie wybierz pozycję Tylko wymagane parametry. Rozszerzenie tworzy plik parametrów na podstawie aktualnie otwartego szablonu.

    Zrzut ekranu pokazujący opcje tworzenia pliku parametrów w programie Visual Studio Code.

  3. Użyj następującego polecenia programu PowerShell z parametrem 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
    

    Po wdrożeniu wyniki powinny wyglądać podobnie do poniższego przykładu.

    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 :
    
    

Wdrażanie zewnętrznego lub zdalnego szablonu

W niektórych przypadkach konieczne jest wdrożenie z zewnętrznej lub zdalnej lokalizacji, zamiast z szablonu znajdującego się na komputerze lokalnym. Szablony można przechowywać w repozytorium kontroli źródła (na przykład GitHub). Można je również przechowywać na koncie usługi Azure Storage w celu uzyskania dostępu współdzielonego w organizacji.

  1. Aby wdrożyć szablon zewnętrzny, użyj parametru TemplateUri.

    W następnym ćwiczeniu wdrożysz szablon usługi ARM z repozytorium GitHub. Jest to repozytorium publiczne, dlatego w tym przypadku nie jest wymagany token sygnatury dostępu współdzielonego (SAS). Aby uzyskać szczegółowe informacje dotyczące używania prywatnej lub zabezpieczonej lokalizacji zdalnej, zobacz Wdrażanie szablonu prywatnego z tokenem SAS.

    Identyfikator URI szablonu dla tego ćwiczenia jest następujący: https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Jest to krótki szablon, który wdraża podstawowe konto magazynu w środowisku piaskownicy.

  2. Polecenie programu PowerShell jest dokładnie takie samo, jak dla szablonu lokalnego. Jedyną różnicą jest to, że parametr -TemplateUri zastępuje parametr -TemplateFile.

    Użyj poniższego kodu, aby przeprowadzić wdrożenie w podanej piaskownicy:

    $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
    

    Wyniki są podobne do poniższego przechwytywania ekranu. Zawierają one szczegółowe informacje dotyczące lokalizacji szablonu.

    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 :
    
    

Uwaga

Ta sekcja została napisana przy użyciu poleceń interfejsu wiersza polecenia platformy Azure w podsystemie Windows Linux Subsystem (WSL2) w systemie Windows 10. Polecenia są takie same, niezależnie od tego, czy korzystasz z interfejsu wiersza polecenia platformy Azure w powłoce PowerShell, CMD, czy Bash. Jednak sposób przywoływania zmiennych może być różny.

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. Powinien wyglądać mniej więcej tak: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    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 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 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 lokalnego

W poniższym ćwiczeniu wdrożysz szablon z komputera lokalnego. W tym miejscu nie jest wymagana nazwa grupy zasobów, która jest zwykle używana podczas wdrażania we własnym środowisku, ponieważ w poprzedniej sekcji zdefiniowaliśmy już domyślną grupę zasobów.

  1. Na początek skopiuj kod następującego szablonu i wklej go do pliku w katalogu lokalnym. Na przykład użyj C:\JSON\maintemplate.json lub /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. Po zapisaniu pliku lokalnie możesz użyć polecenia interfejsu wiersza polecenia platformy Azure, aby wdrożyć go na poziomie grupy zasobów, o którym mówiliśmy w ostatniej lekcji. To polecenie to az deployment group create.

    Uwaga

    W poniższym przykładzie plik szablonu znajduje się w folderze json na dysku głównym w podsystemie Windows Linux Subsystem (WSL2). Dostosuj swoje polecenie w zależności od wybranej powłoki.

    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
    

    Po zakończeniu wynikowe dane wyjściowe powinny wyglądać podobnie do poniższego przykładu. Aby upewnić się, że wdrożenie zakończyło się pomyślnie, poszukaj wiersza "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"
    }
    

Wdrażanie tego samego szablonu lokalnego z wartościami parametrów

W ostatnim ćwiczeniu szablon został wdrożony przy użyciu domyślnych wartości parametrów. Podczas wdrażania lokalnego szablonu usługi ARM może być konieczne przekazanie wartości parametrów. Możesz użyć parametrów śródwierszowych lub pliku parametrów.

W następnym ćwiczeniu przekażesz parametry wbudowane do wdrożenia. Należy podać nazwy parametrów niezależnie od tego, czy używasz parametrów wbudowanych, czy pliku parametrów, przy użyciu az deployment group create polecenia .

  1. Używając tego samego szablonu co w ostatnim ćwiczeniu, skonstruuj zmienną zawierającą parametry w formacie ciągu JSON dla wymaganych parametrów szablonu.

    Uwaga

    W poniższym przykładzie plik szablonu znajduje się w folderze json w podsystemie Windows Linux Subsystem (WSL2). Dostosuj swoje polecenie w oparciu o używaną powłokę i system operacyjny.

    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"
    

    Wynik wyświetlony po zakończeniu wykonywania polecenia powinien wyglądać podobnie jak na poniższym przykładzie. Aby upewnić się, że polecenie zakończyło się pomyślnie, zobacz sekcję "parameters" "provisioningState" i wartość.

      {- 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"
      }
    

    Zamiast przekazywania parametrów jako wartości śródwierszowych w skrypcie, prostsze może być użycie pliku JSON zawierającego wartości parametrów. Plik parametrów może być plikiem lokalnym lub zewnętrznym/zdalnym z dostępnym identyfikatorem URI. Aby uzyskać więcej informacji na temat pliku parametrów, zobacz Tworzenie pliku parametrów usługi Resource Manager.

  2. Aby przekazać lokalny plik parametrów, użyjemy parametru --parameters w tym samym poleceniu, z którego korzystaliśmy. Najpierw należy jednak utworzyć i zapisać plik parametrów.

    1. Ponieważ używamy programu Visual Studio Code z rozszerzeniem Narzędzi usługi Azure Resource Manager, możesz otworzyć zapisany lokalnie szablon usługi ARM i wybrać link Wybierz lub utwórz plik parametrów, aby włączyć pełną walidację .

    2. Wybierz pozycję Nowe z menu. Rozszerzenie tworzy plik parametrów na podstawie aktualnie otwartego szablonu.

    Zrzut ekranu pokazujący opcje tworzenia pliku parametrów w programie Visual Studio Code.

  3. Użyj poniższego polecenia interfejsu wiersza polecenia platformy Azure z parametrem --parameters.

    Uwaga

    W poniższym przykładzie plik szablonu znajduje się w folderze json w podsystemie Windows Linux Subsystem (WSL2). Dostosuj polecenie na podstawie używanej powłoki i systemu operacyjnego.

    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
    

    Po wdrożeniu wyniki houdl wyglądają jak w poniższym przykładzie.

      {- 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"
      }
    

Wdrażanie zewnętrznego lub zdalnego szablonu

W niektórych przypadkach konieczne jest wdrożenie z zewnętrznej lub zdalnej lokalizacji, zamiast z szablonu znajdującego się na komputerze lokalnym. Szablony można przechowywać w repozytorium kontroli źródła (na przykład GitHub). Można je również przechowywać na koncie usługi Azure Storage w celu uzyskania dostępu współdzielonego w organizacji.

  1. Aby wdrożyć szablon zewnętrzny, użyj parametru --template-uri.

W tym ćwiczeniu wdrożysz szablon usługi ARM z repozytorium GitHub. Jest to repozytorium publiczne, dlatego w tym przypadku nie jest wymagany token sygnatury dostępu współdzielonego (SAS). Aby uzyskać szczegółowe informacje dotyczące używania prywatnej lub zabezpieczonej lokalizacji zdalnej, zobacz Wdrażanie szablonu prywatnego z tokenem SAS.

Identyfikator URI szablonu dla tego ćwiczenia jest następujący: https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. Jest to krótki szablon, który wdraża podstawowe konto magazynu w środowisku piaskownicy.

  1. Polecenie interfejsu wiersza polecenia platformy Azure jest dokładnie takie samo, jak dla szablonu lokalnego. Jedyną różnicą jest to, że parametr --template-uri zastępuje parametr --template-file.

  2. Użyj poniższego kodu, aby przeprowadzić wdrożenie w podanej piaskownicy:

    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
    

    Wyniki są podobne do poniższego bloku kodu. Zawierają one szczegółowe informacje dotyczące lokalizacji szablonu w sekcji "templateLink". Pokazują również, czy wdrożenie zakończyło się pomyślnie w "provisioningState" sekcji .

    {- 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"
    }