Inicio rápido: Creación e implementación de una especificación de plantilla

En este inicio rápido se muestra cómo empaquetar una plantilla de Azure Resource Manager como especificación de plantilla. y, posteriormente, implementarla. La especificación de plantilla contiene una plantilla de Resource Manager que implementa una cuenta de almacenamiento.

Sugerencia

Se recomienda Bicep porque ofrece las mismas funcionalidades que las plantillas de ARM y la sintaxis es más fácil de usar. Para más información, consulte Inicio rápido: creación e implementación de una especificación de plantilla con Bicep.

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, use la versión 2.14.2 o posterior.

Creación de una plantilla

Las especificaciones de plantilla se crean a partir de una plantilla local. Copie la siguiente plantilla y guárdela en un archivo local llamado azuredeploy.json. En esta guía de inicio rápido se da por supuesto que se ha guardado en la ruta de acceso c:\Templates\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",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.13.1.58284",
      "templateHash": "13120038605368246703"
    }
  },
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GRS",
        "Standard_GZRS",
        "Standard_LRS",
        "Standard_RAGRS",
        "Standard_RAGZRS",
        "Standard_ZRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The storage account location."
      }
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
      "metadata": {
        "description": "The name of the storage account"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[parameters('storageAccountName')]"
    },
    "storageAccountId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
    }
  }
}

Crear una especificación de plantilla

La especificación de plantilla es un tipo de recurso llamado Microsoft.Resources/templateSpecs. Para crear una especificación de plantilla, use PowerShell, la CLI de Azure, Azure Portal o una plantilla de Resource Manager.

  1. Cree un nuevo grupo de recursos que contiene la especificación de plantilla.

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. Cree la especificación de plantilla en ese grupo de recursos. Asigne a la nueva especificación de plantilla el nombre storageSpec.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    

Implementación de la especificación de plantilla

Para implementar una especificación de plantilla, utilice los mismos comandos de implementación que para implementar una plantilla. Pase el id. de recurso de la especificación de plantilla para implementarla.

  1. Cree un grupo de recursos que contenga la cuenta de almacenamiento nueva.

    New-AzResourceGroup `
      -Name storageRG `
      -Location westus2
    
  2. Obtenga el id. de recurso de la especificación de plantilla.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. Implemente la especificación de plantilla.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Proporcione los parámetros exactamente como lo haría para una plantilla de ARM. Vuelva a implementar la especificación de plantilla con un parámetro para el tipo de cuenta de almacenamiento.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

Conceder acceso

Si quiere permitir que otros usuarios de su organización implementen la especificación de plantilla, debe concederles acceso de lectura. Puede asignar el rol Lector a un grupo de Microsoft Entra para el grupo de recursos que contiene las especificaciones de plantilla que quiere compartir. Para más información, consulte el Tutorial: Concesión de acceso de grupo a recursos de Azure mediante Azure PowerShell.

Actualización de la plantilla

Supongamos que ha identificado un cambio que desea hacer en la plantilla en la especificación de plantilla. La siguiente plantilla es similar a la anterior, salvo que agrega un prefijo para el nombre de la cuenta de almacenamiento. Copie la siguiente plantilla y actualice el archivo azuredeploy.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."
      }
    },
    "namePrefix": {
      "type": "string",
      "maxLength": 11,
      "defaultValue": "store",
      "metadata": {
        "description": "Prefix for storage account name"
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('namePrefix'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Actualización de la versión de la especificación de plantilla

En lugar de crear una nueva especificación de plantilla para la plantilla revisada, agregue una nueva versión denominada 2.0 a la especificación de plantilla existente. Los usuarios pueden la versión que desean implementar.

  1. Cree una versión de la especificación de plantilla.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "c:\Templates\azuredeploy.json"
    
  2. Para implementar la nueva versión, obtenga el identificador de recurso de la versión 2.0.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. Implemente esa versión. Proporcione un prefijo para el nombre de la cuenta de almacenamiento.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -namePrefix "demoaccount"
    

Limpieza de recursos

Para limpiar el recurso que implementó en esta guía de inicio rápido, elimine los dos grupos de recursos que creó.

  1. En Azure Portal, seleccione el grupo de recursos en el menú de la izquierda.

  2. Escriba el nombre del grupo de recursos (templateSpecRG y storageRG) en el campo Filtrar por nombre.

  3. Seleccione el nombre del grupo de recursos.

  4. Seleccione Eliminar grupo de recursos en el menú superior.

Pasos siguientes

Para obtener información sobre cómo crear una especificación de plantilla que incluya plantillas vinculadas, consulte Creación de una especificación de plantilla con plantillas vinculadas.