Tutorial: Implantar uma especificação de modelo como um modelo vinculado

Saiba como implantar uma especificação de modelo existente usando uma implantação vinculada. Use as especificações do modelo para compartilhar modelos do ARM com outros usuários em sua organização. Depois de criar uma especificação de modelo, você pode implantar essa especificação do modelo usando o Azure PowerShell ou a CLI do Azure. Você também pode implantar a especificação do modelo como parte da sua solução usando um modelo vinculado.

Pré-requisitos

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

Observação

Para usar a especificação 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 uma especificação de modelo

Siga o Início Rápido: criar e implantar a especificação do modelo para criar uma especificação de modelo para implantar uma conta de armazenamento. Você precisa do nome do grupo de recursos, do nome e da versão da especificação do modelo na próxima seção.

Criar o modelo principal

Para implantar uma especificação de modelo em um modelo do ARM, adicione um recurso de implantações ao seu modelo principal. Na propriedade templateLink, especifique a ID de recurso de uma especificação de modelo. Crie um modelo com o JSON a seguir chamado azuredeploy.json. Este tutorial assume que você salvou no caminho c:\Templates\deployTS\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": "[resourceGroup().location]"
    },
    "tsResourceGroup":{
      "type": "string",
      "metadata": {
        "Description": "Specifies the resource group name of the template spec."
      }
    },
    "tsName": {
      "type": "string",
      "metadata": {
        "Description": "Specifies the name of the template spec."
      }
    },
    "tsVersion": {
      "type": "string",
      "defaultValue": "1.0.0.0",
      "metadata": {
        "Description": "Specifies the version the template spec."
      }
    },
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "metadata": {
        "Description": "Specifies the storage account type required by the template spec."
      }
    }
  },
  "variables": {
    "appServicePlanName": "[concat('plan', uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2016-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": "2020-10-01",
      "name": "createStorage",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "id": "[resourceId(parameters('tsResourceGroup'), 'Microsoft.Resources/templateSpecs/versions', parameters('tsName'), parameters('tsVersion'))]"
        },
        "parameters": {
          "storageAccountType": {
            "value": "[parameters('storageAccountType')]"
          }
        }
      }
    }
  ],
  "outputs": {
    "templateSpecId": {
      "type": "string",
      "value": "[resourceId(parameters('tsResourceGroup'), 'Microsoft.Resources/templateSpecs/versions', parameters('tsName'), parameters('tsVersion'))]"
    }
  }
}

A ID de especificação do modelo é gerada usando a função resourceID(). O argumento do grupo de recursos na função resourceID() será opcional se o templateSpec estiver no mesmo grupo de recursos da implantação atual. Você também pode transmitir diretamente a ID do recurso como um parâmetro. Para obter a ID, use:

$id = (Get-AzTemplateSpec -ResourceGroupName $resourceGroupName -Name $templateSpecName -Version $templateSpecVersion).Versions.Id

A sintaxe para passar parâmetros para a especificação do modelo é:

"parameters": {
  "storageAccountType": {
    "value": "[parameters('storageAccountType')]"
  }
}

Observação

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

Implantar o modelo

Quando você implanta o modelo vinculado, ele implanta o aplicativo Web e a conta de armazenamento. A implantação é igual à implantação de outros modelos do ARM.

New-AzResourceGroup `
  -Name webRG `
  -Location westus2

New-AzResourceGroupDeployment `
  -ResourceGroupName webRG `
  -TemplateFile "c:\Templates\deployTS\azuredeploy.json" `
  -tsResourceGroup templateSpecRg `
  -tsName storageSpec `
  -tsVersion 1.0

Próximas etapas

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