Exercício – Implantar modelos do ARM

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ê implanta um modelo do ARM (Azure Resource Manager) do computador e de um repositório do GitHub especificando um URI.

Importante

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 com a assinatura da Área Restrita do Microsoft Learn

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

    Get-AzSubscription
    
  4. Altere sua assinatura ativa para a Assinatura de Concierge.

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

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 executando o comando a seguir.

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

Nesse comando, use o nome do recurso que você obteve com o comando anterior. (Ele se parece com 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, ao executar um comando do PowerShell ou da CLI do Azure para implantar um modelo, você precisa especificar o nome do grupo de recursos de destino. Executando o comando anterior, definimos o contexto da implantação. Especificamos o nome do grupo de recursos de área restrita executando o comando Set-AzDefault do PowerShell:

Set-AzDefault -ResourceGroupName {Resource Group Name}

Implantar um modelo local

No exercício a seguir, você vai implantar um modelo do computador local. O nome do grupo de recursos que você costuma usar ao implantar em seu ambiente não é necessário aqui, pois já definimos o grupo de recursos padrão na seção anterior.

  1. Para começar, copie e cole o conteúdo do código de modelo a seguir em um arquivo em um diretório local. Use 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 do PowerShell para implantá-lo no nível do grupo de recursos que abordamos na última unidade. A saber, 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
    

    Após a conclusão, você 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 :
    
    

Implantar o mesmo modelo local com valores de parâmetro

No último exercício, você implantou o modelo usando o valor padrão do parâmetro. Ao implantar um modelo do ARM local, talvez você precise passar valores de parâmetro. Você pode usar parâmetros embutidos ou um arquivo de parâmetros.

Para passar parâmetros embutidos para sua implantação, você precisa fornecer os nomes do parâmetro com o cmdlet New-AzResourceGroupDeployment. No próximo exercício, você passará os parâmetros como parâmetros embutidos e como um arquivo de parâmetros.

  1. Usando o mesmo modelo do último exercício, crie uma tabela de hash que contém os valores dos 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
    

    Após a conclusão, você deverá ter resultados como este:

    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 passar parâmetros como valores embutidos no script, você pode achar mais fácil usar um arquivo JSON com os valores dos parâmetros. O arquivo de parâmetros pode ser um arquivo local ou um arquivo externo/remoto com um URI acessível. Para saber mais sobre o arquivo de parâmetro, confira Criar arquivo de parâmetro do Resource Manager.

  2. Para passar um arquivo de parâmetros local, usamos o parâmetro TemplateParameterFile no mesmo comando que temos usado até o momento. Mas primeiro, você precisa criar e salvar o arquivo 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 do ARM salvo localmente e escolher o link Selecionar/criar um arquivo de parâmetros….

    2. Selecione Novo no menu e Somente os parâmetros obrigatórios. A extensão cria um arquivo de parâmetros com base no modelo aberto no momento.

    Captura de tela que mostra as seleções para criar um arquivo de parâmetros no Visual Studio Code.

  3. Use o comando do PowerShell a seguir com o parâmetro 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
    

    Após a implantação, os resultados serão semelhantes ao 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 :
    
    

Implantar um modelo externo ou remoto

Em algumas instâncias, você precisa implantar de um local externo ou remoto em vez de um modelo no computador local. É possível armazenar modelos em um repositório de controle de código-fonte (como o GitHub). Ou ainda armazená-los em uma conta de armazenamento do Azure para acesso compartilhado na sua organização.

  1. Para implantar um modelo externo, use o parâmetro TemplateUri.

    No próximo exercício, você implantará um modelo do ARM por meio de um repositório do GitHub. O repositório é público, de modo que você não precisa se preocupar com a implantação de um modelo que requer um token SAS (Assinatura de Acesso Compartilhado). Para conhecer os detalhes de como usar um local remoto seguro ou privado, confira Implantar um modelo privado com o token SAS.

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

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

    Use o seguinte código para implantar na área restrita fornecida:

    $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 semelhantes à captura de tela a seguir. Eles descrevem os detalhes do local 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 :
    
    

Observação

Esta seção foi escrita usando comandos da CLI do Azure no WSL2 (Subsistema Windows Linux) do Windows 10. Os comandos são os mesmos, quer você esteja usando a CLI do Azure em um shell do PowerShell, do CMD ou do Bash. No entanto, a maneira como as variáveis são endereçadas pode mudar.

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. Ele deve ser 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 recurso que você obteve com o comando anterior. (Ele se parece com learn-a73131a1-b618-48b8-af70-21af7ca420c4.) O comando permite omitir 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 local

No exercício a seguir, você vai implantar um modelo do computador local. O nome do grupo de recursos que você costuma usar ao implantar em seu ambiente não é necessário aqui, pois já definimos o grupo de recursos padrão na seção anterior.

  1. Para começar, copie e cole o conteúdo do código de modelo a seguir em um arquivo em um diretório local. Use 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 que abordamos na última unidade. A saber, use az deployment group create.

    Observação

    No exemplo a seguir, o arquivo de modelo está em uma pasta json na unidade inicial do WSL2 (Windows Linux Subsystem). Ajuste o comando com base no shell de sua escolha.

    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
    

    Após a conclusão, a saída resultante será semelhante ao exemplo a seguir. Para verificar se a implantação foi bem-sucedida, procure pela linha "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"
    }
    

Implantar o mesmo modelo local com valores de parâmetro

No último exercício, você implantou o modelo usando o valor padrão do parâmetro. Ao implantar um modelo do ARM local, talvez você precise passar valores de parâmetro. Você pode usar parâmetros embutidos ou um arquivo de parâmetros.

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

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

    Observação

    No exemplo a seguir, o arquivo de modelo está em uma pasta json no WSL2 (Windows Linux Subsystem). Ajuste o comando com base no shell e no SO de sua escolha.

    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"
    

    Após a conclusão, você deverá ter resultados semelhantes ao exemplo a seguir. Para verificar se o comando foi bem-sucedido, confira a seção "parameters" e o valor "provisioningState".

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

    Em vez de passar parâmetros como valores embutidos no script, você pode achar mais fácil usar um arquivo JSON com os valores dos parâmetros. O arquivo de parâmetros pode ser um arquivo local ou um arquivo externo/remoto com um URI acessível. Para saber mais sobre o arquivo de parâmetro, confira Criar arquivo de parâmetro do Resource Manager.

  2. Para passar um arquivo de parâmetros local, usamos o parâmetro --parameters no mesmo comando que temos usado até o momento. Mas primeiro, você precisa criar e salvar o arquivo 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 do ARM salvo localmente e escolher o link Selecionar ou criar um arquivo de parâmetros para habilitar a validação completa.

    2. Selecione Novo no menu. A extensão cria um arquivo de parâmetros com base no modelo aberto no momento.

    Captura de tela que mostra as seleções para criar um arquivo de parâmetros no Visual Studio Code.

  3. Use o comando da CLI do Azure a seguir com o parâmetro --parameters.

    Observação

    No exemplo a seguir, o arquivo de modelo está em uma pasta json no WSL2 (Windows Linux Subsystem). Ajuste o comando com base no shell e no SO de sua escolha.

    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, os resultados serão semelhantes ao exemplo a seguir.

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

Implantar um modelo externo ou remoto

Em algumas instâncias, você precisa implantar de um local externo ou remoto em vez de um modelo no computador local. É possível armazenar modelos em um repositório de controle de código-fonte (como o GitHub). Ou ainda armazená-los em uma conta de armazenamento do Azure para acesso compartilhado na sua organização.

  1. Para implantar um modelo externo, use o parâmetro --template-uri.

Neste exercício, você implantará um modelo do ARM por meio de um repositório do GitHub. O repositório é público, de modo que você não precisa se preocupar com a implantação de um modelo que requer um token SAS (Assinatura de Acesso Compartilhado). Para conhecer os detalhes de como usar um local remoto seguro ou privado, confira Implantar um modelo privado com o token SAS.

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

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

  2. Use o seguinte código para implantar na área restrita fornecida:

    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 semelhantes ao bloco de código a seguir. Eles descrevem os detalhes do local do modelo na seção "templateLink". Eles também mostram se a implantação foi bem-sucedida na seção "provisioningState".

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