Упражнение. Развертывание связанных и вложенных шаблонов Resource Manager

Завершено

Примечание.

Когда вы в первый раз активируете песочницу и принимаете условия, ваша учетная запись Майкрософт связывается с новым каталогом Azure с именем Microsoft Learn Sandbox. Вы будете добавлены в специальную подписку с именем "Подписка Concierge".

Здесь вы развернете шаблон, включающий два связанных шаблона в предоставленной среде песочницы.

В этом упражнении используются средства Azure Resource Manager для Visual Studio Code. Убедитесь, что это расширение установлено в Visual Studio Code.

Настройка тестовой среды с использованием предоставленной подписки песочницы Azure

Чтобы выполнить каждое развертывание в этом уроке, необходимо войти в свою учетную запись Azure из терминала Visual Studio Code.

Обязательно войдите в ту же учетную запись, которая активировала песочницу.

Вход в Azure

  1. В окне терминала Visual Studio Code выполните следующую команду, чтобы войти в Azure. При выполнении этой команды откроется браузер, позволяющий войти в учетную запись.

    Connect-AzAccount
    
  2. После входа в окне терминала появится список подписок, связанных с этой учетной записью. Если вы активировали песочницу, в этом списке должна быть подписка Concierge.

  3. Получите идентификатор подписки. Следующая команда содержит список подписок и их идентификаторов в формате таблицы с легкостью для чтения. Идентификатор подписки находится во втором столбце. Найдите Concierge Subscription и скопируйте второй столбец. Оно будет выглядеть примерно так — aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  4. Измените свою активную подписку на подписку Concierge. Обязательно замените строку {Your subscription ID} идентификатором подписки Concierge, полученным в результате выполнения последней команды.

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

Установка группы ресурсов по умолчанию

Теперь нужно установить в качестве группы ресурсов по умолчанию группу ресурсов, созданную для вас в песочнице. Чтобы выполнить эту операцию, сначала необходимо получить имя группы ресурсов с помощью указанной ниже команды:

Get-AzResourceGroup

В этой команде используйте имя ресурса, полученное из предыдущей команды. Оно будет выглядеть примерно так — learn-a73131a1-b618-48b8-af70-21af7ca420c4. Эта команда позволит не указывать этот параметр в остальных командах Azure PowerShell в этом упражнении.

Примечание.

Обычно при использовании команды PowerShell или Azure CLI для развертывания шаблона необходимо указать имя целевой группы ресурсов. В упражнении этого модуля мы обходим это требование, задавая контекст нашего развертывания. Мы указываем имя группы ресурсов песочницы на следующем шаге с помощью команды PowerShell Set-AzDefault.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Развертывание связанного шаблона

В этом упражнении мы просматриваем и развертываем шаблон, включающий два связанных шаблона.

  1. Чтобы добавить связанный шаблон в шаблон ARM, добавьте Microsoft.Resources/deployments ресурс и templateLink свойство, настроенное с расположением шаблона.

  2. В следующем примере шаблона обратите внимание, что две переменные определяют удаленные или внешние шаблоны, расположенные в репозитории GitHub.

    Просмотрите шаблон и запишите "type": "Microsoft.Resources/deployments" разделы, определяющие, где и как развертываются связанные шаблоны.

    Первый связанный шаблон развертывает учетную запись хранения. Он использует родительские параметры и развертывает шаблон хранилища.

    Второй связанный шаблон настроен как зависящий от развертывания хранилища и служит для развертывания виртуальной сети.

    {
    "$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. Скопируйте приведенный ниже код шаблона и вставьте его в файл в локальном каталоге. Например, используйте C:\JSON\linkedtemplate.json.

  4. После локального сохранения файла используйте следующую команду PowerShell, чтобы развернуть его на уровне группы ресурсов, о котором мы говорили в последнем уроке. А именно команды New-AzResourceGroupDeployment.

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

    После завершения вы должны иметь результаты, как показано ниже.

    Результаты развертывания связанного шаблона

  5. Проверьте результаты.

    1. Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы. Для этого щелкните свой аватар в правом верхнем углу страницы. Выберите Переключить каталог. В списке выберите каталог Песочница Microsoft Learn.

    2. В области слева выберите Группы ресурсов.

    3. Выберите "[имя группы ресурсов песочницы]"

    4. В области "Обзор" вы увидите, что развертывание выполнено успешно. Щелкните ссылку 3 Succeeded (3 успешно), чтобы просмотреть сведения о развертывании. (Завершенных развертываний может быть больше в зависимости от того, были ли выполнены упражнения из предыдущего урока.)

    Интерфейс портала Azure для развертываний с одним успешным развертыванием

    Обратите внимание, что вы развернули один шаблон, но в области развертываний на портале перечислено три шаблона. Они соответствуют основному шаблону и двум связанным.

    Интерфейс портала Azure, показывающий конкретное развертывание без ресурсов

Вход в Azure

  1. В окне терминала Visual Studio Code выполните следующую команду, чтобы войти в Azure. При выполнении этой команды откроется браузер, позволяющий войти в учетную запись.

    az login
    
  2. После входа в окне терминала появится список в формате JSON, который содержит подписки, связанные с этой учетной записью. Если вы активировали песочницу, в этом списке должна быть подписка Concierge.

  3. Получите идентификатор подписки. Следующая команда содержит список подписок и их идентификаторов. Идентификатор подписки находится во втором столбце. Найдите Concierge Subscription и скопируйте третий столбец. Оно будет выглядеть примерно так — aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    az account list -o table
    
  4. Измените свою активную подписку на подписку Concierge. Обязательно замените строку {Your subscription ID} идентификатором подписки Concierge, полученным в результате выполнения последней команды.

    az account set -s {Your subscription ID}
    

Установка группы ресурсов по умолчанию

Теперь нужно установить в качестве группы ресурсов по умолчанию группу ресурсов, созданную для вас в песочнице. Чтобы выполнить эту операцию, сначала необходимо получить имя группы ресурсов с помощью указанной ниже команды:

az group list -o table

В этой команде используйте имя группы ресурсов, полученной из предыдущей команды. (Это похоже на learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Этот параметр по умолчанию позволяет опустить этот параметр из остальных команд Azure CLI в этом упражнении.

Примечание.

Обычно при использовании команды Azure CLI для развертывания шаблона необходимо указать имя целевой группы ресурсов. В упражнении этого модуля мы обходим это требование, задавая контекст нашего развертывания. Мы указываем имя группы ресурсов песочницы на следующем шаге с помощью команды az configure Azure CLI.

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

Развертывание связанного шаблона

В этом упражнении мы просматриваем и развертываем шаблон, включающий два связанных шаблона.

  1. Чтобы добавить связанный шаблон в шаблон ARM, добавьте Microsoft.Resources/deployments ресурс и templateLink свойство, настроенное с расположением шаблона.

  2. В следующем примере шаблона обратите внимание, что две переменные определяют удаленные или внешние шаблоны, расположенные в репозитории GitHub.

    Просмотрите шаблон и запишите "type": "Microsoft.Resources/deployments" разделы, определяющие, где и как развертываются связанные шаблоны.

    Первый связанный шаблон развертывает учетную запись хранения. Он использует родительские параметры и развертывает шаблон хранилища.

    Второй связанный шаблон настроен как зависящий от развертывания хранилища и служит для развертывания виртуальной сети.

    {
    "$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. Скопируйте приведенный ниже код шаблона и вставьте его в файл в локальном каталоге. Например, используйте C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json.

  4. После локального сохранения этого файла разверните его на уровне группы ресурсов с помощью следующей команды Azure CLI. А именно, используйте команду 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
    

    В итоге вы получите результат, как в следующем примере. Проверьте значение "provisioningState", чтобы убедиться, что развертывание прошло успешно.

    {- 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. Проверьте результаты.

    1. Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы. Для этого щелкните свой аватар в правом верхнем углу страницы. Выберите Переключить каталог. В списке выберите каталог Песочница Microsoft Learn.

    2. В области слева выберите Группы ресурсов.

    3. Выберите "[имя группы ресурсов песочницы]"

    4. В области обзора вы увидите, что развертывание выполнено успешно. Щелкните ссылку 3 Succeeded (3 успешно), чтобы просмотреть сведения о развертывании. (Завершенных развертываний может быть больше в зависимости от того, были ли выполнены упражнения из предыдущего урока.)

    Интерфейс портала Azure для развертываний с одним успешным развертыванием

    Обратите внимание, что вы развернули один шаблон, но в области развертываний на портале перечислено три шаблона. Они соответствуют основному шаблону и двум связанным.

    Интерфейс портала Azure, показывающий конкретное развертывание без ресурсов