Tutorial: criar uma especificação de modelo com modelos vinculados

Saiba como criar uma especificação de modelo com um modelo principal e um modelo vinculado. Use as especificações do modelo para compartilhar modelos do ARM com outros usuários em sua organização. Este artigo mostra como criar uma especificação de modelo para empacotar um modelo principal e seus modelos vinculados usando a propriedade relativePath do recurso de implantação.

Pré-requisitos

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

Observação

Para usar as especificações 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 modelos vinculados

Crie o modelo principal e o modelo vinculado.

Para vincular um modelo, adicione um recurso de implantações ao modelo principal. Na propriedade templateLink, especifique o caminho relativo do modelo vinculado de acordo com o caminho do modelo pai.

O modelo vinculado é chamado linkedTemplate.json e ele é armazenado em uma subpasta chamada artefatos no caminho em que o modelo principal está armazenado. Você pode usar um dos seguintes valores para o relativePath:

  • ./artifacts/linkedTemplate.json
  • /artifacts/linkedTemplate.json
  • artifacts/linkedTemplate.json

A propriedade relativePath é sempre relativa ao arquivo de modelo onde relativePath é declarado, portanto, se houver outro linkedTemplate2.json que é chamado pelo linkedTemplate.json e linkedTemplate2.json estiver armazenado na mesma subpasta de artefatos, o relativePath especificado no linkedTemplate.json será apenas linkedTemplate2.json.

  1. Criar o modelo principal com o JSON a seguir. Salve o modelo principal como azuredeploy.json no computador local. Este tutorial presume que você salvou no caminho c:\Templates\linkedTS\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",
      "parameters": {
        "location": {
          "type": "string",
          "defaultValue": "westus2",
          "metadata":{
            "description": "Specify the location for the resources."
          }
        },
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "metadata":{
            "description": "Specify the storage account type."
          }
        }
      },
      "variables": {
        "appServicePlanName": "[format('plan{0}', uniquestring(resourceGroup().id))]"
      },
      "resources": [
        {
          "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.Resources/deployments",
          "apiVersion": "2022-09-01",
          "name": "createStorage",
          "properties": {
            "mode": "Incremental",
            "templateLink": {
              "relativePath": "artifacts/linkedTemplate.json"
            },
            "parameters": {
              "storageAccountType": {
                "value": "[parameters('storageAccountType')]"
              }
            }
          }
        }
      ]
    }
    

    Observação

    O apiVersion de Microsoft.Resources/deployments deve ser 2020-06-01 ou posterior.

  2. Crie um diretório chamado artefatos na pasta em que o modelo principal está salvo.

  3. Criar o modelo vinculado com o JSON a seguir:

    {
      "$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."
          }
        }
      },
      "variables": {
        "storageAccountName": "[format('store{0}', uniquestring(resourceGroup().id))]"
      },
      "resources": [
        {
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2022-09-01",
          "name": "[variables('storageAccountName')]",
          "location": "[parameters('location')]",
          "sku": {
            "name": "[parameters('storageAccountType')]"
          },
          "kind": "StorageV2",
          "properties": {}
        }
      ],
      "outputs": {
        "storageAccountName": {
          "type": "string",
          "value": "[variables('storageAccountName')]"
        }
      }
    }
    
  4. Salve o modelo como linkedTemplate.json na pasta artefatos.

Criar especificação de modelo

As especificações de modelos são armazenadas em Grupos de recursos. Crie um grupo de recursos e, em seguida, crie uma especificação de modelo com o script a seguir. O nome da especificação de modelo é webSpec.

New-AzResourceGroup `
  -Name templateSpecRG `
  -Location westus2

New-AzTemplateSpec `
  -Name webSpec `
  -Version "1.0.0.0" `
  -ResourceGroupName templateSpecRG `
  -Location westus2 `
  -TemplateFile "c:\Templates\linkedTS\azuredeploy.json"

Quando terminar, você poderá exibir a especificação de modelo no portal do Azure ou usando o seguinte cmdlet:

Get-AzTemplateSpec -ResourceGroupName templatespecRG -Name webSpec

Implantar especificação de modelo

Agora você pode implantar a especificação de modelo. Implantar a especificação de modelo é igual à implantação do modelo que a contém, exceto pelo fato de que você passa a ID do recurso da especificação de modelo. Você usa os mesmos comandos de implantação e, se necessário, passa os valores de parâmetro para a especificação de modelo.

New-AzResourceGroup `
  -Name webRG `
  -Location westus2

$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name webSpec -Version "1.0.0.0").Versions.Id

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName webRG

Próximas etapas

Para saber mais sobre como implantar uma especificação de modelo como um modelo vinculado, veja Tutorial: Implantar uma especificação de modelo como um modelo vinculado.