Share via


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. Você usa especificações de modelo para compartilhar modelos 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 relativePath propriedade do recurso de implantação.

Pré-requisitos

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

Nota

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

Crie o modelo principal e o modelo vinculado.

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

O modelo vinculado é chamado de linkedTemplate.json e é armazenado em uma subpasta chamada artefatos no caminho onde 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 relativePath propriedade é sempre relativa ao arquivo de modelo onde relativePath é declarado, portanto, se houver outro linkedTemplate2.json que é chamado de linkedTemplate.json e linkedTemplate2.json é armazenado na mesma subpasta de artefatos, o relativePath especificado em linkedTemplate.json é apenas linkedTemplate2.json.

  1. Crie o modelo principal com o seguinte JSON. Salve o modelo principal como azuredeploy.json em seu computador local. Este tutorial pressupõe que você salvou em um caminho c:\Templates\linkedTS\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",
      "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')]"
              }
            }
          }
        }
      ]
    }
    

    Nota

    A apiVersion do Microsoft.Resources/deployments deve ser 2020-06-01 ou posterior.

  2. Crie um diretório chamado artefatos na pasta onde o modelo principal é salvo.

  3. Crie o modelo vinculado com o seguinte 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."
          }
        }
      },
      "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 de artefatos .

Criar especificação de modelo

As especificações dos 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 do 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 do 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 do modelo. Implantar a especificação de modelo é como implantar o modelo que ela contém, exceto que você passa a ID de recurso da especificação de modelo. Você usa os mesmos comandos de implantação e, se necessário, passa valores de parâmetro para a especificação do 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óximos passos

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