Exercício – Implementar os seus modelos do Resource Manager

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, irá implementar um modelo do Azure Resource Manager (ARM) a partir do seu computador e a partir do repositório do GitHub ao especificar um URI.

Importante

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 com a subscrição do Sandbox do Microsoft Learn

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. Verifique o nome da assinatura. O comando a seguir lista suas assinaturas, nomes e suas IDs em um formato de tabela fácil de ler. Procure por Concierge Subscription.

    Get-AzSubscription
    
  4. Altere a sua subscrição ativa para a Subscrição de Assistente.

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

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 executar essa operação, primeiro você precisa obter o nome do grupo de recursos executando o seguinte comando.

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

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

Nota

Normalmente, quando você executa um comando PowerShell ou CLI do Azure para implantar um modelo, deve especificar o nome do grupo de recursos de destino. Executando o comando anterior, definimos o contexto de nossa implantação. Especificamos nosso nome de grupo de recursos de área restrita executando o comando Set-AzDefault PowerShell:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Implementar um modelo local

No exercício a seguir, você implanta um modelo de sua máquina local. O nome do grupo de recursos que geralmente utiliza para implementar no seu próprio ambiente não é necessário aqui, uma vez que já definimos o contexto do grupo de recursos predefinido na secção acima.

  1. Para começar, copie e cole os conteúdos do seguinte código modelo num ficheiro de um diretório local. Utilize C:\JSON\maintemplate.json, por exemplo.

    {
        "$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. Depois de salvar o arquivo localmente, você pode usar o comando PowerShell para implantá-lo no nível do grupo de recursos sobre o qual falamos na última unidade. Ou seja, use o comando New-AzResourceGroupDeployment .

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

    Depois que terminar, você deve ter resultados como este exemplo.

    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 :
    
    

Implementar o mesmo modelo local com valores de parâmetro

No último exercício, implementou o seu modelo ao utilizar o valor predefinido do parâmetro. Ao implementar um modelo do Resource Manager local, poderá ter de transmitir valores de parâmetro. Pode utilizar parâmetros inline ou um ficheiro de parâmetro.

De forma a transmitir parâmetros inline para a sua implementação, tem de indicar os nomes do parâmetro com o cmdlet New-AzResourceGroupDeployment. No próximo exercício, irá transmitir os parâmetros como parâmetros inline e como um ficheiro de parâmetros.

  1. Usando o mesmo modelo do último exercício, construa uma tabela de hash que contenha os valores para os parâmetros de modelo necessários.

    $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
    

    Uma vez concluído, deverá ter resultados semelhantes a estes:

    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 :
    

    Em vez de transmitir parâmetros como valores inline no seu script, poderá considerar mais fácil utilizar um ficheiro JSON que contenha os valores dos parâmetros. O ficheiro de parâmetros pode ser um ficheiro local ou um ficheiro externo/remoto com um URI acessível. Para obter mais informações sobre o ficheiro de parâmetros, veja Criar ficheiro de parâmetros do Resource Manager.

  2. Para transmitir um ficheiro de parâmetros local, utilizamos o parâmetro TemplateParameterFile no mesmo comando que temos utilizado. No entanto, em primeiro lugar, precisa de criar e guardar o seu ficheiro de parâmetros.

    1. Como estamos usando o Visual Studio Code com a extensão Ferramentas do Azure Resource Manager, você pode abrir o modelo ARM salvo localmente e selecionar o link Selecionar/criar arquivo de parâmetro...

    2. Selecione Novo no menu e, em seguida, selecione Apenas parâmetros necessários. A extensão cria um arquivo de parâmetro com base no modelo atualmente aberto.

    Captura de ecrã que mostra seleções para criar um ficheiro de parâmetro no Visual Studio Code.

  3. Use o seguinte comando do PowerShell com o TemplateParameterFile parâmetro.

    $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
    

    Após a implantação, seus resultados devem ser parecidos com o exemplo a seguir.

    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 :
    
    

Implementar um modelo externo ou remoto

Em algumas instâncias, terá de implementar a partir de uma localização externa ou remota, em vez de a partir de um modelo no seu computador local. Pode armazenar modelos num repositório de controlo de código fonte (como o GitHub). Em alternativa, pode armazená-los numa conta de armazenamento do Azure para acesso partilhado na sua organização.

  1. Para implementar um modelo externo, utilize o parâmetro TemplateUri.

    No exercício seguinte, irá implementar um modelo do Resource Manager a partir de um repositório do GitHub. O repositório é público. Portanto, não precisa de se preocupar em implementar um modelo que requer um token de Assinatura de Acesso Partilhado (SAS). Para obter detalhes sobre a utilização de uma localização remota privada ou segura, veja Implementar um modelo privado com o token SAS.

    O URI do modelo para o exercício é o seguinte: https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. É um modelo curto que implanta uma conta de armazenamento básica em seu ambiente de área restrita.

  2. O comando do PowerShell é exatamente o mesmo para um modelo local. A única diferença é que o parâmetro -TemplateUri substitui o parâmetro -TemplateFile.

    Utilize o seguinte código para implementar no sandbox fornecido:

    $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
    

    Os resultados são como a captura de tela a seguir. Irão destacar os detalhes da localização do modelo.

    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 :
    
    

Nota

Esta secção foi escrita com comandos da CLI do Azure no Subsistema Windows para Linux (WSL2) no Windows 10. Os comandos são os mesmos, quer esteja a utilizar a CLI do Azure num shell do Bash, PowerShell ou CMD. Contudo, as formas de abordar as variáveis poderão ser diferentes.

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. Deve ser 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, utilize o nome do recurso que obteve no comando anterior. (Parece algo como learn-a73131a1-b618-48b8-af70-21af7ca420c4.) Este comando 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 local

No exercício a seguir, você implanta um modelo de sua máquina local. O nome do grupo de recursos que geralmente utiliza para implementar no seu próprio ambiente não é necessário aqui, uma vez que já definimos o contexto do grupo de recursos predefinido na secção acima.

  1. Para começar, copie e cole os conteúdos do seguinte código modelo num ficheiro de um diretório local. Utilize C:\JSON\maintemplate.json ou /mnt/c/Users/you/json/maintemplate.json, por exemplo.

    {
        "$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. Depois de salvar o arquivo localmente, você pode usar o comando da CLI do Azure para implantá-lo no nível do grupo de recursos sobre o qual falamos na última unidade. Utilize az deployment group create.

    Nota

    No exemplo abaixo, o ficheiro de modelo está localizado numa pasta json na unidade raiz do Subsistema Windows para Linux (WSL2). Ajuste o comando de acordo com o seu shell preferido.

    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
    

    Depois de terminar, a saída resultante deve se parecer com o exemplo a seguir. Para se certificar de que a sua implementação foi bem-sucedida, veja a linha "provisioningState": "Succeeded".

    {
      "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-2020-08-19",
      "properties": {
        "correlationId": "6ad759d5-cda5-4a71-a772-05a03d983c6f",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT8.9060761S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/    learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Network/virtualNetworks/VNet-001",
            "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd"
          }
        ],
        "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-e692001a-b605-48d4-97bd-7c05669db9dd",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }
    

Implementar o mesmo modelo local com valores de parâmetro

No último exercício, implementou o seu modelo ao utilizar o valor predefinido do parâmetro. Ao implementar um modelo do Resource Manager local, poderá ter de transmitir valores de parâmetro. Pode utilizar parâmetros inline ou um ficheiro de parâmetro.

No próximo exercício, você passa parâmetros embutidos para sua implantação. Você precisa fornecer os nomes dos parâmetros, quer esteja usando parâmetros embutidos ou um arquivo de parâmetros, usando o az deployment group create comando.

  1. Usando o mesmo modelo do último exercício, construa uma variável que contenha os parâmetros em um formato de cadeia de caracteres JSON para os parâmetros de modelo necessários.

    Nota

    No exemplo abaixo, o ficheiro de modelo está localizado numa pasta json no Subsistema Windows para Linux (WSL2). Ajuste o comando de acordo com o shell e SO preferido.

    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"
    

    Depois de terminada a implementação, deverá ter resultados semelhantes ao exemplo abaixo. Para garantir que o comando foi bem-sucedido, consulte a "parameters" seção e o "provisioningState" valor.

      {- Finished ..
        "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Resources/deployments/DeployLocalTemplate-2-2020-08-19",      
        "location": null,
        "name": "DeployLocalTemplate-2-2020-08-19",
        "properties": {
          "correlationId": "edb2992e-08be-4ec2-940e-df23b1c09453",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.6990388S",
          "error": null,
          "mode": "Incremental",
          "onErrorDeployment": null,
          "outputResources": [
            {
              "id": "/subscriptions/082d0d73-f197-45c5-9884-581c8f0ce102/resourceGroups/learn-e692001a-b605-48d4-97bd-7c05669db9dd/providers/Microsoft.Network/virtualNetworks/VNet-001",
              "resourceGroup": "learn-e692001a-b605-48d4-97bd-7c05669db9dd"
            }
          ],
          "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-e692001a-b605-48d4-97bd-7c05669db9dd",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

    Em vez de transmitir parâmetros como valores inline no seu script, poderá considerar mais fácil utilizar um ficheiro JSON que contenha os valores dos parâmetros. O ficheiro de parâmetros pode ser um ficheiro local ou um ficheiro externo/remoto com um URI acessível. Para obter mais informações sobre o ficheiro de parâmetros, veja Criar ficheiro de parâmetros do Resource Manager.

  2. Para transmitir um ficheiro de parâmetros local, utilizamos o parâmetro --parameters no mesmo comando que temos utilizado. No entanto, em primeiro lugar, precisa de criar e guardar o seu ficheiro de parâmetros.

    1. Como estamos usando o Visual Studio Code com a extensão Ferramentas do Azure Resource Manager, você pode abrir o modelo ARM salvo localmente e selecionar o link Selecionar ou criar um arquivo de parâmetro para habilitar a validação completa.

    2. No menu, selecione New (Novo). A extensão cria um arquivo de parâmetro com base no modelo atualmente aberto.

    Captura de ecrã que mostra seleções para criar um ficheiro de parâmetro no Visual Studio Code.

  3. Utilize o seguinte comando da CLI do Azure com o parâmetro --parameters.

    Nota

    No exemplo abaixo, o ficheiro de modelo está localizado numa pasta json no Subsistema Windows para Linux (WSL2). Ajuste o comando de acordo com o seu shell e SO preferido.

    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
    

    Após a implantação, seus resultados serão parecidos com o exemplo a seguir.

      {- 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": "2a668f55-d8d0-48ac-862f-7170b48c02b6",
          "debugSetting": null,
          "dependencies": [],
          "duration": "PT4.2058912S",
          "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"
            }
          ],
          "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-159e2742-d3a1-4e71-84a3-16e19830242b",
        "tags": null,
        "type": "Microsoft.Resources/deployments"
      }
    

Implementar um modelo externo ou remoto

Em algumas instâncias, terá de implementar a partir de uma localização externa ou remota, em vez de a partir de um modelo no seu computador local. Pode armazenar modelos num repositório de controlo de código fonte (como o GitHub). Em alternativa, pode armazená-los numa conta de armazenamento do Azure para acesso partilhado na sua organização.

  1. Para implementar um modelo externo, utilize o parâmetro --template-uri.

Neste exercício, você implanta um modelo ARM a partir de um repositório GitHub. O repositório é público. Portanto, não precisa de se preocupar em implementar um modelo que requer um token de Assinatura de Acesso Partilhado (SAS). Para obter detalhes sobre a utilização de uma localização remota privada ou segura, veja Implementar um modelo privado com o token SAS.

O URI do modelo para o exercício é o seguinte: https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json. É um modelo curto que implanta uma conta de armazenamento básica em seu ambiente de área restrita.

  1. O comando da CLI do Azure é exatamente o mesmo para um modelo local. A única diferença é que o parâmetro --template-uri substitui o parâmetro --template-file.

  2. Utilize o seguinte código para implementar no sandbox fornecido:

    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
    

    Os resultados são como o seguinte bloco de código. Destacam os detalhes da localização do modelo na secção "templateLink". Eles também mostram se a implantação foi bem-sucedida na "provisioningState" seção.

    {- Finished ..
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/learn-159e2742-d3a1-4e71-84a3-16e19830242b/providers/Microsoft.Resources/deployments/DeployLocalTemplate-4-2020-08-19",
      "location": null,
      "name": "DeployLocalTemplate-4-2020-08-19",
      "properties": {
        "correlationId": "2ccc49de-9d46-4375-a25d-19ec10daf88b",
        "debugSetting": null,
        "dependencies": [],
        "duration": "PT24.3286124S",
        "error": null,
        "mode": "Incremental",
        "onErrorDeployment": null,
        "outputResources": [
          {
            "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": {
          "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-159e2742-d3a1-4e71-84a3-16e19830242b",
      "tags": null,
      "type": "Microsoft.Resources/deployments"
    }