Tutorial: Implantar um modelo do ARM local

Saiba como implantar um modelo do ARM (modelo do Azure Resource Manager) por meio do computador local. Esse procedimento demora cerca de 8 minutos para ser concluído.

Este tutorial é o primeiro de uma série. À medida que avança na série, você modulariza o modelo criando um modelo vinculado, armazena o modelo vinculado em uma conta de armazenamento e protege-o usando o token SAS, além de aprender a criar um pipeline de DevOps para implantar modelos. Esta série se concentra na implantação de modelo. Se desejar aprender sobre o desenvolvimento de modelos, confira os tutoriais de iniciantes.

Obter ferramentas

Vamos começar verificando se você tem as ferramentas necessárias para implantar modelos.

Implantação de linha de comando

Você precisa ter o Azure PowerShell ou a CLI do Azure para implantar o modelo. Para obter as instruções de instalação, confira:

Depois de instalar o Azure PowerShell ou a CLI do Azure, é preciso que você entre pela primeira vez. Para obter ajuda, confira Entrar – PowerShell ou Entrar – CLI do Azure.

Editor (opcional)

Modelos são arquivos JSON. Para examinar/editar modelos, você precisa de um bom editor de JSON. Recomendamos o Visual Studio Code com a extensão Ferramentas do Resource Manager. Se precisar instalar essas ferramentas, confira Guia de Início Rápido: Criar modelos do ARM com o Visual Studio Code.

Examinar modelo

O modelo implanta uma conta de armazenamento, um plano do serviço de aplicativo e um aplicativo Web. Se estiver interessado em criar o modelo, acompanhe o tutorial sobre Modelos de início rápido. No entanto, isso não é necessário para concluir este tutorial.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "projectName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11,
      "metadata": {
        "description": "Specify a project name that is used to generate resource names."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specify a location for the resources."
      }
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ],
      "metadata": {
        "description": "Specify the storage account type."
      }
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "Specify the Runtime stack of current web app"
      }
    }
  },
  "variables": {
    "storageAccountName": "[format('{0}{1}', parameters('projectName'), uniqueString(resourceGroup().id))]",
    "webAppName": "[format('{0}WebApp', parameters('projectName'))]",
    "appServicePlanName": "[format('{0}Plan', parameters('projectName'))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-01-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2022-09-01",
      "name": "[variables('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2022-09-01",
      "name": "[variables('webAppName')]",
      "location": "[parameters('location')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
      ]
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').primaryEndpoints]"
    }
  }
}

Importante

Os nomes das contas de armazenamento devem ser exclusivos, ter entre 3 e 24 caracteres e usar apenas números e letras minúsculas. A variável storageAccountName do modelo de exemplo combina o máximo de 11 caracteres do parâmetro projectName com um valor de uniqueString de 13 caracteres.

Salve uma cópia do modelo no computador local com a extensão .json, por exemplo, azuredeploy.json. Você implantará esse modelo posteriormente no tutorial.

Entrar no Azure

Para começar a trabalhar com o Azure PowerShell/a CLI do Azure para implantar um modelo, entre com suas credenciais do Azure.

Connect-AzAccount

Se tiver várias assinaturas do Azure, selecione a que deseja usar. Substitua [SubscriptionID/SubscriptionName] e os colchetes [] pelas informações da sua assinatura:

Set-AzContext [SubscriptionID/SubscriptionName]

Criar grupo de recursos

Ao implantar um modelo, você especificará um grupo de recursos que conterá os recursos. Antes de executar o comando de implantação, crie o grupo de recursos com a CLI do Azure ou o Azure PowerShell. Selecione as guias na seção de código a seguir para escolher entre o Azure PowerShell e a CLI do Azure. Os exemplos de CLI neste artigo são escritos para o shell do Bash.

$projectName = Read-Host -Prompt "Enter a project name that is used to generate resource and resource group names"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroup `
  -Name $resourceGroupName `
  -Location "Central US"

Implantar modelo

Use uma ou ambas as opções de implantação para implantar o modelo.

$projectName = Read-Host -Prompt "Enter the same project name"
$templateFile = Read-Host -Prompt "Enter the template file path and file name"
$resourceGroupName = "${projectName}rg"

New-AzResourceGroupDeployment `
  -Name DeployLocalTemplate `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile $templateFile `
  -projectName $projectName `
  -verbose

Para saber mais sobre como implantar o modelo usando o Azure PowerShell, confira Implantar recursos com modelos do ARM e o Azure PowerShell.

Limpar os recursos

Limpe os recursos que você implantou excluindo o grupo de recursos.

  1. No portal do Azure, escolha Grupos de recursos do menu à esquerda.
  2. No campo Filtrar por nome, insira o nome do grupo de recursos.
  3. Selecione o nome do grupo de recursos.
  4. Escolha Excluir grupo de recursos no menu superior.

Próximas etapas

Você aprendeu a implantar um modelo local. No próximo tutorial, separe o modelo em um modelo principal e um modelo vinculado e saiba como armazenar e proteger este último.