Exercício – Implementar modelos do Resource Manager associados e aninhados

Concluído

Nota

A primeira vez que ativar um sandbox e aceitar os termos, a sua conta Microsoft será associada a um novo diretório do Azure chamado Microsoft Learn Sandbox. É adicionado a uma subscrição especial chamada Subscrição de Assistente.

Aqui, você implanta um modelo que inclui dois modelos vinculados no ambiente de área restrita fornecido.

Este exercício utiliza a extensão Azure Resource Manager Tools para Visual Studio Code. Certifique-se de que instala esta extensão no Visual Studio Code.

Configurar o seu ambiente de teste com a subscrição de sandbox do Azure fornecida

Para desempenhar cada implementação nesta unidade, precisa de iniciar sessão na sua conta do Azure a partir do terminal do Visual Studio Code.

Certifique-se de que está a iniciar sessão na mesma conta que ativou o sandbox.

Iniciar sessão no Azure

  1. A partir do terminal do Visual Studio Code, execute o seguinte comando para iniciar sessão no Azure. Executar este comando abre um navegador que lhe permite iniciar sessão na sua conta.

    Connect-AzAccount
    
  2. Assim que tiver iniciado sessão, verá uma lista das subscrições associadas a esta conta no terminal. Se ativou o sandbox, a Subscrição de Assistente deverá estar nesta lista.

  3. Obtenha o ID de subscrição. O comando a seguir lista suas assinaturas e seus IDs em um formato de tabela fácil de ler. O ID de subscrição é a segunda coluna. Procure Concierge Subscription e copie a segunda coluna. Parece algo como cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    Get-AzSubscription
    
  4. Altere a sua subscrição ativa para a Subscrição de Assistente. Substitua {Your subscription ID} pelo ID da Subscrição de Assistente que obteve com o último comando.

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

Definir o grupo de recursos predefinido

Agora, tem de definir o grupo de recursos criado para si no sandbox como o grupo de recursos predefinido. Para realizar essa operação, primeiro tem de obter o nome do grupo de recursos através do seguinte comando:

Get-AzResourceGroup

Neste comando, utilize o nome do recurso que obteve no comando anterior. Parece algo como learn-a73131a1-b618-48b8-af70-21af7ca420c4. Este comando permite-lhe omitir esse parâmetro do resto dos comandos do Azure PowerShell neste exercício.

Nota

Normalmente, quando utiliza um comando do PowerShell ou da CLI do Azure para implementar um modelo, tem de especificar o nome do grupo de recursos de destino. No exercício deste módulo, ignoramos este requisito ao definir o contexto da nossa implementação. Vamos especificar o nome do nosso grupo de recursos do sandbox no passo abaixo através do comando do PowerShell Set-AzDefault.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Implementar um modelo ligado

Neste exercício, revisamos e implantamos um modelo que inclui dois modelos vinculados.

  1. Para adicionar um modelo vinculado ao seu modelo ARM, adicione um Microsoft.Resources/deployments recurso e a templateLink propriedade configurada com o local do modelo.

  2. No modelo de exemplo a seguir, observe que duas variáveis definem modelos remotos ou externos localizados em um repositório GitHub.

    Revise o modelo e observe as "type": "Microsoft.Resources/deployments" seções que definem onde e como os modelos vinculados são implantados.

    O primeiro modelo implementa uma conta de armazenamento. Consome os parâmetros principais e implementa o modelo de armazenamento.

    O segundo modelo associado é configurado para depender da implementação de armazenamento e para implementar um modelo de rede virtual.

    {
    "$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. Copie e cole os conteúdos do modelo anterior num ficheiro de um diretório local. Utilize C:\JSON\linkedtemplate.json, por exemplo.

  4. Depois de salvar o arquivo localmente, use o seguinte comando do PowerShell para implantá-lo no nível do grupo de recursos sobre o qual falamos na última unidade. Utilize New-AzResourceGroupDeployment.

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

    Depois que terminar, você deve ter resultados como o seguinte exmaple.

    Resultados da implantação do modelo associado.

  5. Valide os resultados.

    1. Aceda ao portal do Azure e certifique-se de que está na subscrição do sandbox. Para tal, selecione o seu avatar no canto superior direito da página. Selecione Trocar diretório. Na lista, selecione o diretório Sandbox do Microsoft Learn.

    2. No painel esquerdo, selecione Grupos de recursos.

    3. Selecione [nome do grupo de recursos do sandbox].

    4. Na área Visão geral, você vê que a implantação foi bem-sucedida. Selecione 3 Efetuadas Com Êxito para ver os detalhes da implementação. (Poderão existir mais implementações concluídas, consoante tenha ou não realizado os exercícios da unidade anterior).

    Interface do portal do Azure para as implementações com uma implementação listada e um estado de êxito.

    Repare que implementou um modelo, mas existem três listados no painel de implementação do portal. Essas três implementações correspondem ao modelo principal e os dos modelos associados.

    Interface do portal do Azure para a implementação específica sem recursos indicados.

Iniciar sessão no Azure

  1. A partir do terminal do Visual Studio Code, execute o seguinte comando para iniciar sessão no Azure. Executar este comando abre um navegador que lhe permite iniciar sessão na sua conta.

    az login
    
  2. Assim que tiver iniciado sessão, verá uma lista JSON das subscrições associadas a esta conta no terminal. Se ativou o sandbox, a Subscrição de Assistente deverá estar nesta lista.

  3. Obtenha o ID de subscrição. O comando a seguir lista suas assinaturas e suas IDs. O ID de subscrição é a terceira coluna. Procure Concierge Subscription e copie a terceira coluna. Parece algo como cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    az account list -o table
    
  4. Altere a sua subscrição ativa para a Subscrição de Assistente. Substitua {Your subscription ID} pelo ID da Subscrição de Assistente que obteve com o último comando.

    az account set -s {Your subscription ID}
    

Definir o grupo de recursos predefinido

Agora, tem de definir o grupo de recursos criado para si no sandbox como o grupo de recursos predefinido. Para realizar essa operação, primeiro tem de obter o nome do grupo de recursos através do seguinte comando:

az group list -o table

Neste comando, use o nome do grupo de recursos que você obteve do comando anterior. (Parece algo como learn-a73131a1-b618-48b8-af70-21af7ca420c4.) A definição desse padrão permite que você omita esse parâmetro do restante dos comandos da CLI do Azure neste exercício.

Nota

Normalmente, quando utiliza um comando da CLI do Azure para implementar um modelo, tem de especificar o nome do grupo de recursos de destino. No exercício deste módulo, ignoramos este requisito ao definir o contexto da nossa implementação. Vamos especificar o nome do nosso grupo de recursos do sandbox no passo abaixo através do comando da CLI do Azure az configure.

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

Implementar um modelo ligado

Neste exercício, revisamos e implantamos um modelo que inclui dois modelos vinculados.

  1. Para adicionar um modelo vinculado ao seu modelo ARM, adicione um Microsoft.Resources/deployments recurso e a templateLink propriedade configurada com o local do modelo.

  2. No modelo de exemplo a seguir, observe que duas variáveis definem modelos remotos ou externos localizados em um repositório GitHub.

    Revise o modelo e observe as "type": "Microsoft.Resources/deployments" seções que definem onde e como os modelos vinculados são implantados.

    O primeiro modelo implementa uma conta de armazenamento. Consome os parâmetros principais e implementa o modelo de armazenamento.

    O segundo modelo associado é configurado para depender da implementação de armazenamento e para implementar um modelo de rede virtual.

    {
    "$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. Copie e cole os conteúdos do modelo anterior num ficheiro de um diretório local. Utilize C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json, por exemplo.

  4. Depois de salvar esse arquivo localmente, implante-o no nível do grupo de recursos usando o seguinte comando da CLI do Azure. Utilize 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
    

    Depois de terminada a implementação, deverá ter resultados semelhantes ao exemplo abaixo. Confirme o valor "provisioningState" para se certificar de que a implementação foi bem-sucedida.

    {- 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. Valide os resultados.

    1. Aceda ao portal do Azure e certifique-se de que está na subscrição do sandbox. Para tal, selecione o seu avatar no canto superior direito da página. Selecione Trocar diretório. Na lista, selecione o diretório Sandbox do Microsoft Learn.

    2. No painel esquerdo, selecione Grupos de recursos.

    3. Selecione [nome do grupo de recursos do sandbox].

    4. Na área Visão geral, você vê que a implantação foi bem-sucedida. Selecione 3 Efetuadas Com Êxito para ver os detalhes da implementação. (Poderão existir mais implementações concluídas, consoante tenha ou não realizado os exercícios da unidade anterior).

    Interface do portal do Azure para as implementações com uma implementação listada e um estado de êxito.

    Repare que implementou um modelo, mas existem três listados no painel de implementação do portal. Essas três implementações correspondem ao modelo principal e os dos modelos associados.

    Interface do portal do Azure para a implementação específica sem recursos indicados.