Compartir a través de


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 mediante la relativePath propiedad del recurso de implementación.

Prerrequisitos

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 templateLink propiedad , especifique la ruta de acceso relativa de la plantilla vinculada de acuerdo con la ruta de acceso de la plantilla primaria.

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 siguientes valores para relativePath:

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

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

  1. Cree la plantilla principal con el siguiente JSON. Guarda la plantilla principal como azuredeploy.json en tu ordenador 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 denominado artefactos en la carpeta donde se guarda la plantilla principal.

  3. Cree la plantilla vinculada con el siguiente 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 la plantilla como linkedTemplate.json en la carpeta artifacts .

Crear una especificación de plantilla

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

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 igual que la implementación de la plantilla que contiene, excepto que se pasa el identificador de recurso de la especificación de plantilla. Use los mismos comandos de implementación y, si es necesario, pase 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.