Exercício – Implantar modelos do ARM vinculados e aninhados

Concluído

Observação

Na primeira vez que você ativar uma área restrita e aceitar os termos, sua conta Microsoft será associada a um novo diretório do Azure chamado Área Restrita do Microsoft Learn. Você será adicionado a uma assinatura especial denominada Assinatura do Concierge.

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

Este exercício usará Ferramentas do Azure Resource Manager para Visual Studio Code. Certifique-se de instalar essa extensão no Visual Studio Code.

Configurar o ambiente de teste com a assinatura fornecida da área restrita do Azure

Para executar cada implantação nessa unidade, você precisa entrar em sua conta do Azure por meio do terminal do Visual Studio Code.

Verifique se você está entrando na mesma conta que ativou a área restrita.

Entrar no Azure

  1. Do terminal no Visual Studio Code, execute o comando a seguir para entrar no Azure. A execução deste comando abre um navegador que permite que você entre na sua conta.

    Connect-AzAccount
    
  2. Depois de entrar, você vê uma lista das assinaturas associadas a essa conta no terminal. Se você ativou a área restrita, a Assinatura de Concierge deve estar nesta lista.

  3. Obtenha a ID da assinatura. O comando a seguir lista suas assinaturas e as respectivas IDs em um formato de tabela fácil de ler. A ID da assinatura será a segunda coluna. Procure Concierge Subscription e copie a segunda coluna. É algo semelhante a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  4. Altere sua assinatura ativa para a assinatura do concierge. Substitua {Your subscription ID} pela ID da Assinatura de Concierge que você obteve com o comando anterior.

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

Definir o grupo de recursos padrão

Agora você precisará definir o grupo de recursos criado para você na área restrita como o grupo de recursos padrão. Para executar essa operação, primeiro você precisa obter o nome do grupo de recursos usando o seguinte comando:

Get-AzResourceGroup

Nesse comando, use o nome do recurso que você obteve com o comando anterior. É algo semelhante a learn-a73131a1-b618-48b8-af70-21af7ca420c4. Esse comando permite omitir o parâmetro do restante dos comandos do Azure PowerShell neste exercício.

Observação

Normalmente, quando usa um comando do PowerShell ou da CLI do Azure para implantar um modelo, você precisa especificar o nome do grupo de recursos de destino. No exercício neste módulo, estamos ignorando esse requisito definindo o contexto da implantação. Vamos especificar o nome do grupo de recursos na área restrita na próxima etapa usando o comando Set-AzDefault do PowerShell.

Set-AzDefault -ResourceGroupName {Resource Group Name}

Implantar um modelo vinculado

Neste exercício, vamos analisar e implantar um modelo que inclui dois modelos vinculados.

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

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

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

    O primeiro modelo vinculado implanta uma conta de armazenamento. Ele consome os parâmetros pai e implanta o modelo de armazenamento.

    O segundo modelo vinculado é configurado para depender da implantação de armazenamento e para implantar 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 o conteúdo do modelo anterior em um arquivo de um diretório local. Use C:\JSON\linkedtemplate.json, por exemplo.

  4. Após salvar o arquivo localmente, use o comando do PowerShell a seguir para implantá-lo no nível do grupo de recursos que abordamos na última unidade. A saber, use New-AzResourceGroupDeployment.

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

    Após a conclusão, você terá resultados semelhantes ao exemplo a seguir.

    Resultados da implantação do modelo vinculado.

  5. Valide os resultados.

    1. Vá para o portal do Azure e verifique se você está na assinatura da área restrita. Para fazer isso, selecione seu avatar no canto superior direito da página. Selecione Mudar diretório. Na lista, escolha o diretório Área restrita do Microsoft Learn.

    2. No painel esquerdo, selecione Grupos de recursos.

    3. Selecione [nome do grupo de recursos de área restrita].

    4. Na área Visão geral, você verá que a implantação foi bem-sucedida. Selecione 3 Êxito para ver os detalhes da implantação. (Pode haver mais implantações concluídas, dependendo se você realizou os exercícios da unidade anterior.)

    Interface do portal do Azure para as implantações com a implantação em questão listada e um status de êxito.

    Observe que você implantou apenas um modelo, mas há três listados no painel de implantação do portal. Essas três implantações correspondem ao modelo principal e aos dois modelos vinculados.

    Interface do portal do Azure para a implantação específica sem recursos listados.

Entrar no Azure

  1. Do terminal no Visual Studio Code, execute o comando a seguir para entrar no Azure. A execução deste comando abre um navegador que permite que você entre na sua conta.

    az login
    
  2. Após entrar, você verá uma lista em JSON das assinaturas associadas a essa conta no terminal. Se você ativou a área restrita, a Assinatura de Concierge deve estar nesta lista.

  3. Obtenha a ID da assinatura. O comando a seguir lista suas assinaturas e as respectivas IDs. A ID da assinatura é a terceira coluna. Procure por Concierge Subscription e copie a terceira coluna. É algo semelhante a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    az account list -o table
    
  4. Altere sua assinatura ativa para a assinatura do concierge. Substitua {Your subscription ID} pela ID da Assinatura de Concierge que você obteve com o comando anterior.

    az account set -s {Your subscription ID}
    

Definir o grupo de recursos padrão

Agora você precisará definir o grupo de recursos criado para você na área restrita como o grupo de recursos padrão. Para executar essa operação, primeiro você precisa obter o nome do grupo de recursos usando o seguinte comando:

az group list -o table

Nesse comando, use o nome do grupo de recursos que você obteve com o comando anterior. (Ele se parece com learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Definir esse padrão permite que você omita esse parâmetro do restante dos comandos da CLI do Azure neste exercício.

Observação

Normalmente, ao usar um comando da CLI do Azure para implantar um modelo, você precisa especificar o nome do grupo de recursos de destino. No exercício neste módulo, estamos ignorando esse requisito definindo o contexto da implantação. Vamos especificar o nome do grupo de recursos da área restrita na próxima etapa usando o comando az configure da CLI do Azure.

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

Implantar um modelo vinculado

Neste exercício, vamos analisar e implantar um modelo que inclui dois modelos vinculados.

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

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

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

    O primeiro modelo vinculado implanta uma conta de armazenamento. Ele consome os parâmetros pai e implanta o modelo de armazenamento.

    O segundo modelo vinculado é configurado para depender da implantação de armazenamento e para implantar 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 o conteúdo do modelo anterior em um arquivo de um diretório local. Use C:\JSON\linkedtemplate.json or /mnt/c/Users/you/json/linkedtemplate.json, por exemplo.

  4. Depois de salvar o arquivo localmente, implante-o no nível do grupo de recursos usando o comando a seguir da CLI do Azure. A saber, use 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
    

    Após a conclusão, você deverá ter resultados semelhantes ao exemplo a seguir. Verifique o valor de "provisioningState" para garantir que a implantação foi bem-sucedida.

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

    1. Vá para o portal do Azure e verifique se você está na assinatura da área restrita. Para fazer isso, selecione seu avatar no canto superior direito da página. Selecione Mudar diretório. Na lista, escolha o diretório Área restrita do Microsoft Learn.

    2. No painel esquerdo, selecione Grupos de recursos.

    3. Selecione [nome do grupo de recursos de área restrita].

    4. Na área Visão geral, você verá que a implantação foi bem-sucedida. Selecione 3 Êxito para ver os detalhes da implantação. (Pode haver mais implantações concluídas, dependendo se você realizou os exercícios da unidade anterior.)

    Interface do portal do Azure para as implantações com a implantação em questão listada e um status de êxito.

    Observe que você implantou apenas um modelo, mas há três listados no painel de implantação do portal. Essas três implantações correspondem ao modelo principal e aos dois modelos vinculados.

    Interface do portal do Azure para a implantação específica sem recursos listados.