En esta guía de inicio rápido se muestra cómo empaquetar una plantilla de Azure Resource Manager (plantilla de ARM) como especificación de plantilla y, a continuación, impleméntela. La especificación de plantilla contiene una plantilla de Resource Manager que implementa una cuenta de almacenamiento.
Prerequisites
Una cuenta de Azure con una suscripción activa.
Cree una cuenta gratuita.
Creación de una plantilla
Puede crear una especificación de plantilla a partir de una plantilla de ARM. Copie la plantilla siguiente y guárdela como C:\Templates\createStorageV1.json.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
Creación de una especificación de plantilla
La especificación de plantilla es un tipo de recurso denominado Microsoft.Resources/templateSpecs. Para crear una especificación de plantilla, use PowerShell, la CLI de Azure, Azure Portal o una plantilla de ARM.
Cree un nuevo grupo de recursos que contiene la especificación de plantilla.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
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\createStorageV1.json"
Cree un nuevo grupo de recursos que contiene la especificación de plantilla.
az group create \
--name templateSpecRG \
--location westus2
Cree la especificación de plantilla en ese grupo de recursos. Asigne a la nueva especificación de plantilla el nombre storageSpec.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "C:\Templates\createStorageV1.json"
Inicie sesión en Azure Portal.
Busque especificaciones de plantilla. Seleccione Especificaciones de plantilla entre las opciones disponibles.
Seleccione Importar plantilla y siga las instrucciones para importar C:\Templates\createStorageV1.jsen que guardó anteriormente.
Proporcione los valores siguientes:
-
Nombre: escriba un nombre para la especificación de plantilla. Por ejemplo, storageSpec.
-
Suscripción: seleccione la suscripción de Azure usada para crear la especificación de plantilla.
-
Grupo de recursos: seleccione Crear nuevo y especifique un nuevo nombre de grupo de recursos. Por ejemplo, templateSpecRG.
-
Ubicación: seleccione una ubicación para el grupo de recursos. Por ejemplo, Oeste de EE. UU. 2.
-
Versión: escriba una versión para la especificación de plantilla. Utilice 1.0.
Seleccione Revisar y crear y, a continuación, seleccione Crear.
Note
Se recomienda usar PowerShell o la CLI en lugar de una plantilla de ARM para crear la especificación de plantilla. Estas herramientas convierten automáticamente las plantillas vinculadas en artefactos asociados a la plantilla principal. Si usa una plantilla de ARM, deberá agregar manualmente plantillas vinculadas como artefactos, lo que puede ser más complejo.
Cuando se usa una plantilla de Resource Manager para crear la especificación de plantilla, la plantilla se incrusta en la definición de recurso. Copie la plantilla siguiente y guárdela localmente como createTemplateSpec.json:
Note
En la plantilla insertada, todas las expresiones de plantilla se deben escapar con un segundo corchete de apertura. Use "[[ en lugar de "[. Las matrices JSON siguen usando un solo corchete de apertura. Consulte las propiedades nombre y ubicación en el ejemplo siguiente:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2022-02-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', 'storageSpec', '1.0')]",
"location": "westus2",
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[[parameters('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
},
"dependsOn": [
"storageSpec"
]
}
]
}
Use la CLI de Azure o PowerShell para crear un nuevo grupo de recursos.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Implemente la plantilla con la CLI de Azure o PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\Templates\createTemplateSpec.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\Templates\createTemplateSepc.json"
Compruebe la implementación con la CLI de Azure o PowerShell.
Get-AzTemplateSpec `
-ResourceGroupName templateSpecRG `
-Name storageSpec
az ts show \
--resource-group templateSpecRG \
--name storageSpec
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.
Cree un grupo de recursos que contenga la cuenta de almacenamiento nueva.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
Obtenga el id. de recurso de la especificación de plantilla.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
Implemente la especificación de plantilla.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Proporcione parámetros exactamente igual que 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
Cree un grupo de recursos que contenga la cuenta de almacenamiento nueva.
az group create \
--name storageRG \
--location westus2
Obtenga el id. de recurso de la especificación de plantilla.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Note
Hay un problema conocido al obtener un identificador de especificación de plantilla y asignarlo a una variable en Windows PowerShell.
Implemente la especificación de plantilla.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Proporcione parámetros exactamente igual que 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.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType='Standard_GRS'
Seleccione la especificación de plantilla que creó. Utilice el cuadro de búsqueda para encontrar la especificación de plantilla si hay muchas.
Seleccione Implementar.
Proporcione los valores siguientes:
-
Suscripción: seleccione una suscripción de Azure para crear el recurso.
-
Grupo de recursos: seleccione Crear nuevo y, luego, escriba storageRG.
Seleccione Revisar y crear y, luego, Crear.
Copie la plantilla siguiente y guárdela localmente como deployTemplateSpecV1.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
]
}
En la plantilla, templateSpecRG es el nombre del grupo de recursos que contiene la especificación de plantilla, storageSpec es el nombre de la especificación de plantilla y 1.0 es la versión de la especificación de plantilla.
Use la CLI de Azure o PowerShell para crear un nuevo grupo de recursos para la cuenta de almacenamiento.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Implemente la plantilla con la CLI de Azure o PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\Templates\deployTemplateSpecV1.json"
az deployment group create \
--resource-group storageRG \
--template-file "C:\Templates\deployTemplateSpecV1.json"
Compruebe la implementación con la CLI de Azure o PowerShell.
Get-AzResource `
-ResourceGroupName storageRG
az resource list \
--resource-group storageRG
Conceder acceso
Para permitir que otros usuarios de su organización implementen la especificación de plantilla, concédales acceso de lectura. Asigne el rol Lector a un grupo de Microsoft Entra para el grupo de recursos que contiene las especificaciones de plantilla que desea compartir. Para más información, consulte Tutorial: Concesión de acceso de grupo a los recursos de Azure mediante Azure PowerShell.
Actualización de la plantilla
Para realizar un cambio en la plantilla de la especificación de plantilla, revise la plantilla. La plantilla siguiente es similar a la plantilla anterior, salvo que agrega un prefijo para el nombre de la cuenta de almacenamiento. Copie la plantilla siguiente y guárdela como createStorageV2.json archivo.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
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. Puede implementar cualquiera de las versiones.
Cree una versión de la especificación de plantilla.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\Templates\createStorageV2.json"
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
Implemente esa versión. Proporcione un prefijo para el nombre de la cuenta de almacenamiento.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-namePrefix "demoaccount"
Cree una versión de la especificación de plantilla.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location "westus2" \
--template-file "C:\Templates\createStorageV2.json"
Para implementar la nueva versión, obtenga el identificador de recurso de la versión 2.0.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
Implemente esa versión. Proporcione un prefijo para el nombre de la cuenta de almacenamiento.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters namePrefix='demoaccount'
Abra la especificación de plantilla storageSpec y seleccione Crear nueva versión.
Seleccione 1.0 como plantilla base y, a continuación, seleccione Crear.
Asigne a la nueva versión el nombre 2.0 y, si lo desea, agregue notas. Seleccione Editar plantilla.
Reemplace el contenido de la plantilla por la plantilla actualizada. Seleccione Revisar y guardar.
Seleccione Save changes (Guardar los cambios).
Para implementar la nueva versión, seleccione Versiones.
Abra la nueva versión y seleccione Implementar.
Rellene los campos como hizo al implementar la versión anterior.
Seleccione Revisar y crear y, luego, Crear.
Una vez más, debe realizar algunos campos en la plantilla local para que funcione con las especificaciones de plantilla. Copie la plantilla siguiente y guárdela localmente como createTemplateSpec.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2022-02-01",
"name": "storageSpec",
"location": "westus2",
"properties": {
"displayName": "Storage template spec"
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2022-02-01",
"name": "[format('{0}/{1}', 'storageSpec', '2.0')]",
"location": "westus2",
"properties": {
"mainTemplate": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2025-06-01",
"name": "[[parameters('storageAccountName')]",
"location": "[[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"accessTier": "Hot"
}
}
]
}
},
"dependsOn": [
"storageSpec"
]
}
]
}
Para agregar la nueva versión a la especificación de plantilla, implemente la plantilla con la CLI de Azure o PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\Templates\createTemplateSpec.json"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\Templates\createTemplateSpec.json"
compruebe la implementación con la CLI de Azure o PowerShell.
Get-AzTemplateSpec `
-ResourceGroupName templateSpecRG `
-Name storageSpec
az ts show \
--resource-group templateSpecRG \
--name storageSpec
Debería ver la nueva versión 2.0 en la lista de versiones.
Copie la plantilla siguiente y guárdela localmente como deployTemplateSpecV2.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2025-04-01",
"name": "demo",
"properties": {
"templateLink": {
"id": "[resourceId('templateSpecRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '2.0')]"
},
"parameters": {
},
"mode": "Incremental"
}
}
]
}
Implemente la plantilla con la CLI de Azure o PowerShell.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\Templates\deployTemplateSpecV2.json"
az deployment group create \
--resource-group storageRG \
--template-file "C:\Templates\deployTemplateSpecV2.json"
Compruebe la implementación con la CLI de Azure o PowerShell.
Get-AzResource `
-ResourceGroupName storageRG
az resource list \
--resource-group storageRG
Debería ver la nueva cuenta de almacenamiento con un nombre que comience por store y una cadena única basada en el identificador del grupo de recursos.
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ó.
- En Azure Portal, seleccione el grupo de recursos en el menú de la izquierda.
- Escriba el nombre del grupo de recursos (templateSpecRG y storageRG) en el campo Filtrar por nombre.
- Seleccione el nombre del grupo de recursos.
- 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 de una plantilla vinculada.