Quickstart: Criar e implementar especificações de modelo

Este quickstart mostra-lhe como embalar um modelo de Resource Manager Azure (modelo ARM) numa especificação de modelo. Em seguida, você implanta a especificação do modelo. A especificação do seu modelo contém um modelo ARM que implementa uma conta de armazenamento.

Dica

Recomendamos a Bicep porque oferece as mesmas capacidades que os modelos ARM e a sintaxe é mais fácil de usar. Para saber mais, consulte Quickstart: Crie e implemente uma especificação de modelo com Bicep.

Pré-requisitos

Uma conta Azure com uma subscrição ativa. Crie uma conta gratuita.

Nota

Para utilizar a especificação do modelo com Azure PowerShell, tem de instalar a versão 5.0.0 ou mais tarde. Para usá-lo com Azure CLI, utilize 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 seguinte e guarde-o localmente para um ficheiro chamado azuredeploy.json. Este quickstart assume que guardou para um caminho c:\Modelos\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.6.18.56646",
      "templateHash": "4523590120167697900"
    }
  },
  "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": "Location for the storage account."
      }
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
      "metadata": {
        "description": "The name of the Storage Account"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-06-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 PowerShell, Azure CLI, 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ê ao novo modelo especificar o nome armazenamentoSpec.

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

Implementar especificação de modelo

Para implementar uma especificação de modelo, use os mesmos comandos de implementação que utilizaria para implementar um modelo. Passe o ID do recurso da especificação do modelo para implementar.

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

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

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

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Você fornece parâmetros exatamente como você 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 quiser permitir que outros utilizadores da sua organização implementem o seu espectro de modelos, tem de lhes conceder acesso à leitura. Pode atribuir a função Reader a um grupo AD Azure para o grupo de recursos que contém especificações de modelo que pretende partilhar. Para mais informações, consulte Tutorial: Conceder a um grupo acesso aos recursos da Azure utilizando Azure PowerShell.

Modelo de atualização

Suponhamos que identificou uma alteração que quer fazer ao modelo na especificação do seu modelo. O modelo a seguir é semelhante ao seu modelo anterior, exceto que adiciona um prefixo para o nome da conta de armazenamento. Copie o modelo seguinte e atualize o seu ficheiro 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')]"
    }
  }
}

Versão de especificação do modelo de atualização

Em vez de criar uma nova especificação de modelo para o modelo revisto, adicione uma nova versão nomeada 2.0 à especificação de modelo existente.

  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 implementar a nova versão, obtenha o ID de recursos para a 2.0 versão.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. Implemente esta 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 que implementou neste arranque rápido, elimine ambos os grupos de recursos que criou.

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

  2. Introduza o nome do grupo de recursos (modeloSpecRG e storageRG) no campo Filtro por nome.

  3. Selecione o nome do grupo de recursos.

  4. Selecione Eliminar grupo de recursos no menu superior.

Passos seguintes

Para aprender sobre a criação de uma especificação de modelo que inclui modelos ligados, consulte Criar uma especificação de modelo de um modelo ligado.