Guia de início rápido: criar e implantar especificações de modelo

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

Gorjeta

Recomendamos o Bicep porque ele oferece os mesmos recursos que os modelos ARM e a sintaxe é mais fácil de usar. Para saber mais, consulte 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 subscrição ativa. Crie uma conta gratuitamente.

Nota

Para usar a especificação de modelo com o Azure PowerShell, você deve 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 o modelo

Você cria uma especificação de modelo a partir de um modelo local. Copie o modelo a seguir e salve-o localmente em um arquivo chamado azuredeploy.json. Este guia de início rápido pressupõe que você salvou em um caminho c:\Templates\azuredeploy.json, mas você pode 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 do 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 ARM.

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

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. Crie a especificação do modelo nesse grupo de recursos. Dê à nova especificação de modelo o nome 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 você usaria para implantar um modelo. Passe 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 do modelo.

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

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Você fornece parâmetros exatamente como faria para um modelo ARM. Reimplante a especificação do 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 em sua organização implantem sua especificação de modelo, será necessário conceder-lhes acesso de leitura. Você pode atribuir a função Leitor a um grupo do Microsoft Entra para o grupo de recursos que contém especificações de modelo que você deseja compartilhar. Para obter mais informações, consulte 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 em sua especificação de modelo. O modelo a seguir é semelhante ao modelo anterior, exceto que adiciona um prefixo para o nome da conta de armazenamento. Copie o modelo a seguir e atualize seu 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 versão de especificação do modelo

Em vez de criar uma nova especificação de modelo para o modelo revisado, adicione uma nova versão nomeada 2.0 à especificação de modelo existente. Os usuários podem escolher qualquer uma das versões a serem implantadas.

  1. Crie uma nova versão para a especificação do 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 o ID do recurso para a 2.0 versão.

    $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"
    

Clean up resources (Limpar recursos)

Para limpar o recurso implantado neste início rápido, exclua os dois 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 Eliminar grupo de recursos no menu superior.

Próximos passos

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