Tutorial: Creación de una especificación de plantilla con plantillas vinculadas

Aprenda a crear una especificación de plantilla con una plantilla principal y una plantilla vinculada. Las especificaciones de plantilla se usan para compartir plantillas de ARM con otros usuarios de la organización. En este artículo se muestra cómo crear una especificación de plantilla para empaquetar una plantilla principal y sus plantillas vinculadas con la propiedad relativePath del recurso de implementación.

Requisitos previos

Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.

Nota:

Para usar especificaciones de plantilla con Azure PowerShell, debe instalar la versión 5.0.0 o posterior. Para usarlas con la CLI de Azure, utilice la versión 2.14.2 o posterior.

Creación de plantillas vinculadas

Cree la plantilla principal y la plantilla vinculada.

Para vincular una plantilla, agregue un recurso de implementaciones a la plantilla principal. En la propiedad templateLink, especifique la ruta de acceso relativa de la plantilla vinculada de acuerdo con la ruta de acceso de la plantilla principal.

La plantilla vinculada se denomina linkedTemplate.jsony se almacena en una subcarpeta denominada artefactos en la ruta de acceso donde se almacena la plantilla principal. Puede usar uno de los valores siguientes para relativePath:

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

La propiedad relativePath siempre es relativa al archivo de plantilla en el que se declara relativePath, por lo que si hay otro archivo linkedTemplate2.json que se llame desde linkedTemplate.json y linkedTemplate2.json se almacena en la misma subcarpeta de artefactos, la propiedad relativePath especificada en linkedTemplate.json es solo linkedTemplate2.json.

  1. Cree la plantilla principal con el JSON siguiente. Guarde la plantilla principal como azuredeploy.json en el equipo local. En este tutorial se da por supuesto que se ha guardado en la ruta de acceso c:\Templates\linkedTS\azuredeploy.json, pero puede usar cualquier ruta de acceso.

    {
      "$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:

    El valor de apiVersion de Microsoft.Resources/deployments debe ser 2020-06-01 o posterior.

  2. Cree un directorio llamado artefactos en la carpeta donde se guarda la plantilla principal.

  3. Cree la plantilla vinculada con el JSON siguiente:

    {
      "$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 la plantilla como linkedTemplate.json en la carpeta artefactos.

Creación de una especificación de plantilla

Las especificaciones de plantilla se almacenan en grupos de recursos. Cree un grupo de recursos y, a continuación, cree una especificación de plantilla con el script siguiente. El nombre de la especificación de plantilla es 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"

Cuando haya terminado, puede ver la especificación de plantilla desde Azure Portal o mediante el cmdlet siguiente:

Get-AzTemplateSpec -ResourceGroupName templatespecRG -Name webSpec

Implementación de la especificación de plantilla

Ahora puede implementar la especificación de plantilla. La implementación de la especificación de plantilla es similar a la implementación de la plantilla que contiene, con la excepción de que se pasa el identificador de recurso de la especificación de plantilla. Puede usar los mismos comandos de implementación y, si es necesario, pasar los valores de parámetro para la especificación de plantilla.

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

Pasos siguientes

Para información sobre la implementación de una especificación de plantilla como una plantilla vinculada, consulte Tutorial: Implementación de una especificación de plantilla como una plantilla vinculada.