Guia de início rápido: Criar e implantar uma especificação de modelo

Este guia de início rápido mostra como empacotar um modelo do ARM (modelo do Azure Resource Manager) em uma especificação de modelo. Em seguida, você implantará essa especificação de modelo. A especificação de modelo contém um modelo do ARM que implanta uma conta de armazenamento.

Dica

Recomendamos o Bicep porque ele oferece as mesmas funcionalidades que os modelos do ARM e a sintaxe é mais fácil de usar. Para saber mais, confira Guia de Início Rápido: Criar e implantar uma especificação de modelo com o Bicep.

Pré-requisitos

Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.

Observação

Para usar a especificação de modelo com o Azure PowerShell, você precisará instalar a versão 5.0.0 ou posterior. Para usá-lo com a CLI do Azure, use a versão 2.14.2 ou posterior.

Criar modelo

Você criará uma especificação de modelo com base em um modelo local. Copie o modelo a seguir e salve-o localmente em um arquivo chamado azuredeploy.json. Este início rápido assume que você salvou no caminho c:\Templates\azuredeploy.json, mas é possível usar qualquer caminho.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.13.1.58284",
      "templateHash": "13120038605368246703"
    }
  },
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GRS",
        "Standard_GZRS",
        "Standard_LRS",
        "Standard_RAGRS",
        "Standard_RAGZRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The storage account location."
      }
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
      "metadata": {
        "description": "The name of the storage account"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[parameters('storageAccountName')]"
    },
    "storageAccountId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    }
  }
}

Criar especificação de modelo

A especificação de modelo é um tipo de recurso chamado Microsoft.Resources/templateSpecs. Para criar uma especificação de modelo, use o PowerShell, a CLI do Azure, o portal ou um modelo do ARM.

  1. Crie um grupo de recursos para conter a especificação de modelo.

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. Crie a especificação de modelo nesse grupo de recursos. Nomeie a nova especificação de modelo storageSpec.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    

Implantar especificação de modelo

Para implantar uma especificação de modelo, use os mesmos comandos de implantação que usaria para implantar um modelo. Transmita a ID do recurso da especificação de modelo a ser implantada.

  1. Crie um grupo de recursos para conter a nova conta de armazenamento.

    New-AzResourceGroup `
      -Name storageRG `
      -Location westus2
    
  2. Obtenha a ID do recurso da especificação de modelo.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. Implante a especificação de modelo.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Você fornece parâmetros exatamente como faria para um modelo do ARM. Reimplante a especificação de modelo com um parâmetro para o tipo de conta de armazenamento.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

Conceder acesso

Se você quiser permitir que outros usuários na sua organização implantem sua especificação de modelo, precisará conceder acesso de leitura a eles. Atribua a função Leitor a um grupo do Microsoft Entra do grupo de recursos que contém as especificações de modelo que deseja compartilhar. Para saber mais, confira Tutorial: Conceder a um grupo acesso aos recursos do Azure usando o Azure PowerShell.

Atualizar modelo

Vamos supor que você tenha identificado uma alteração que deseja fazer no modelo na especificação de modelo. O modelo a seguir é semelhante ao modelo anterior, exceto pelo fato de ele adicionar um prefixo ao nome da conta de armazenamento. Copie o modelo a seguir e atualize o arquivo azuredeploy.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "namePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "store",
      "metadata": {
        "description": "Prefix for storage account name"
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('namePrefix'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Atualizar a versão da especificação de modelo

Em vez de criar uma especificação de modelo para o modelo revisado, adicione uma versão chamada 2.0 à especificação de modelo existente. Os usuários podem escolher uma das versões para implantação.

  1. Crie uma versão para a especificação de modelo.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    
  2. Para implantar a nova versão, obtenha a ID do recurso para a versão 2.0.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. Implante essa versão. Forneça um prefixo para o nome da conta de armazenamento.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -namePrefix "demoaccount"
    

Limpar os recursos

Para limpar o recurso implantado neste início rápido, exclua ambos os grupos de recursos criados.

  1. No portal do Azure, selecione Grupo de recursos no menu à esquerda.

  2. Insira o nome do grupo de recursos (templateSpecRG e storageRG) no campo Filtrar por nome.

  3. Selecione o nome do grupo de recursos.

  4. Selecione Excluir grupo de recursos no menu superior.

Próximas etapas

Para saber mais sobre como criar uma especificação de modelo que inclua modelos vinculados, confira Criar uma especificação de modelo com um modelo vinculado.