Tutorial: Criar uma especificação de modelo com modelos ligados

Saiba como criar uma especificação de modelo com um modelo principal e um modelo ligado. Pode utilizar especificações de modelo para partilhar modelos do ARM com outros utilizadores na sua organização. Este artigo mostra-lhe como criar uma especificação de modelo para empacotar um modelo principal e os respetivos modelos ligados com a relativePath propriedade do recurso de implementação.

Pré-requisitos

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

Nota

Para utilizar especificações de modelo com Azure PowerShell, tem de instalar a versão 5.0.0 ou posterior. Para utilizá-lo com a CLI do Azure, utilize a versão 2.14.2 ou posterior.

Criar modelos ligados

Crie o modelo principal e o modelo ligado.

Para ligar um modelo, adicione um recurso de implementações ao modelo principal. templateLink Na propriedade , especifique o caminho relativo do modelo ligado de acordo com o caminho do modelo principal.

O modelo ligado é denominado linkedTemplate.json e é armazenado numa subpasta denominada artefactos no caminho onde o modelo principal está armazenado. Pode utilizar um dos seguintes valores para o relativePath:

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

A relativePath propriedade é sempre relativa ao ficheiro de modelo onde relativePath é declarado, por isso, se existir outro linkedTemplate2.json chamado de linkedTemplate.json e linkedTemplate2.json estiver armazenado na mesma subpasta de artefactos, o relativePath especificado em linkedTemplate.json é apenas linkedTemplate2.json.

  1. Crie o modelo principal com o seguinte JSON. Guarde o modelo principal como azuredeploy.json no seu computador local. Este tutorial pressupõe que guardou num caminho c:\Templates\linkedTS\azuredeploy.json , mas pode utilizar 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 de tem de Microsoft.Resources/deployments ser 2020-06-01 ou posterior.

  2. Crie um diretório denominado artefactos na pasta onde o modelo principal é guardado.

  3. Crie o modelo ligado 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. Guarde o modelo como linkedTemplate.json na pasta artifacts .

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 seguinte script. 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, pode ver as especificações do modelo a partir do portal do Azure ou através do seguinte cmdlet:

Get-AzTemplateSpec -ResourceGroupName templatespecRG -Name webSpec

Implementar especificações de modelo

Agora pode implementar a especificação de modelo. Implementar a especificação de modelo é como implementar o modelo que contém, exceto que transmite o ID de recurso da especificação de modelo. Utilize os mesmos comandos de implementação e, se necessário, transmita os valores dos parâmetros 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

Passos seguintes

Para saber mais sobre como implementar uma especificação de modelo como um modelo ligado, veja Tutorial: Implementar uma especificação de modelo como um modelo ligado.