En este inicio rápido se describe cómo crear e implementar una especificación de plantilla con un archivo Bicep. Una especificación de plantilla se implementa en un grupo de recursos para que los usuarios de su organización puedan implementar recursos en Microsoft Azure. Las especificaciones de plantilla permiten compartir plantillas de implementación sin necesidad de proporcionar a los usuarios acceso para cambiar el archivo Bicep. En este ejemplo de especificación de plantilla se usa un archivo Bicep para implementar una cuenta de almacenamiento.
Al crear una especificación de plantilla, el archivo Bicep se transpila en notación de objetos JavaScript (JSON). La especificación de plantilla usa JSON para implementar recursos de Azure. Actualmente, no puede usar el Microsoft Azure Portal para importar un archivo Bicep y crear un recurso de especificación de plantilla.
Requisitos previos
Creación de un archivo de Bicep
Las especificaciones de plantilla se crean a partir de un archivo Bicep local. Copie el ejemplo siguiente y guárdelo en el equipo como main.bicep. En los ejemplos se usa la ruta de acceso C:\templates\main.bicep. Puede usar una ruta de acceso diferente, pero debe cambiar los comandos.
El siguiente archivo Bicep se usa en las pestañas PowerShell y CLI. La pestaña Bicep file (Archivo Bicep) usa una plantilla diferente que combina Bicep y JSON para crear e implementar una especificación de plantilla.
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'
@description('Location for all resources.')
param ___location string = resourceGroup().___location
var storageAccountName = 'storage${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2024-01-01' = {
name: storageAccountName
___location: ___location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountNameOutput string = storageAccount.name
Creación de 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 CLI de Azure, Azure PowerShell o un archivo Bicep.
Este ejemplo usa el nombre de grupo de recursos templateSpecRG
. Puede usar un nombre diferente, pero debe cambiar los comandos.
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\main.bicep"
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\main.bicep"
Puede crear una especificación de plantilla con un archivo Bicep, pero mainTemplate
debe estar en JSON. La plantilla JSON no usa la sintaxis JSON estándar. Por ejemplo, no hay comas de fin de línea, las comillas dobles se reemplazan por comillas simples y las barras diagonales inversas (\
) se usan para escapar comillas simples dentro de expresiones.
Copie la siguiente plantilla y guárdela en el equipo como main.bicep.
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '1.0'
@description('Location for all resources.')
param ___location string = resourceGroup().___location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
___location: ___location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
___location: ___location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'___location': {
'type': 'string'
'defaultValue': '[resourceGroup().___location]'
'metadata': {
'description': 'Location for all resources.'
}
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', \'storage\', uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2023-04-01'
'name': '[variables(\'storageAccountName\')]'
'___location': '[parameters(\'___location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
Use la CLI de Azure o Microsoft Azure PowerShell para crear un nuevo grupo de recursos.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--___location westus2
Cree la especificación de plantilla en ese grupo de recursos. El nombre de especificación de plantilla storageSpec y el número de versión 1.0
son parámetros del archivo Bicep.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Implementación de la especificación de plantilla
Use la especificación de plantilla para implementar una cuenta de almacenamiento. Este ejemplo usa el nombre de grupo de recursos storageRG
. Puede usar un nombre diferente, pero debe cambiar los comandos.
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 los parámetros exactamente como lo haría para una implementación de archivos Bicep. 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")
Nota:
Existe un problema conocido al obtener el identificador de la especificación de plantilla y luego asignárselo a una variable en Windows PowerShell.
Implemente la especificación de plantilla.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Proporcione los parámetros exactamente como lo haría para una implementación de archivos Bicep. 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"
Para implementar una especificación de plantilla mediante un archivo Bicep, use un módulo. El módulo se vincula a una especificación de plantilla existente. Para más información, consulte File in template spec (Archivo en especificación de plantilla).
Copie el siguiente módulo Bicep y guárdelo en el equipo como storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
Reemplace <subscriptionId>
en el módulo. Use Azure PowerShell o CLI de Azure para obtener el id. de suscripción.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Use Azure PowerShell o la CLI de Azure 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 especificación de plantilla con Azure PowerShell o la CLI de Azure.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Puede agregar un parámetro y volver a implementar la especificación de plantilla con un tipo de cuenta de almacenamiento diferente. Copie el ejemplo y reemplace el archivo storage.bicep. A continuación, vuelva a implementar la implementación de especificación de plantilla.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
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.
Creación de un archivo de Bicep
Después de crear la especificación de plantilla, ha decidido actualizar el archivo Bicep. Para continuar con los ejemplos de las pestañas PowerShell o CLI, copie el ejemplo y reemplace el archivo main.bicep.
El parámetro storageNamePrefix
especifica un valor de prefijo para el nombre de la cuenta de almacenamiento. La variable storageAccountName
concatena el prefijo con una cadena única.
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
@description('Storage account type.')
param storageAccountType string = 'Standard_LRS'
@description('Location for all resources.')
param ___location string = resourceGroup().___location
@maxLength(11)
@description('The storage account name prefix.')
param storageNamePrefix string = 'storage'
var storageAccountName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
___location: ___location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountNameOutput string = storageAccount.name
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 elegir la versión que desean implementar.
Cree una nueva versión de la especificación de plantilla.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
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 la nueva versión y use storageNamePrefix
para especificar un prefijo para el nombre de la cuenta de almacenamiento.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
Cree una nueva 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\main.bicep"
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 la nueva versión y use storageNamePrefix
para especificar un prefijo para el nombre de la cuenta de almacenamiento.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
Cree una nueva versión de la especificación de plantilla. Copie el ejemplo y reemplace el archivo main.bicep.
El parámetro storageNamePrefix
especifica un valor de prefijo para el nombre de la cuenta de almacenamiento. La variable storageAccountName
concatena el prefijo con una cadena única.
param templateSpecName string = 'storageSpec'
param templateSpecVersionName string = '2.0'
@description('Location for all resources.')
param ___location string = resourceGroup().___location
resource createTemplateSpec 'Microsoft.Resources/templateSpecs@2022-02-01' = {
name: templateSpecName
___location: ___location
}
resource createTemplateSpecVersion 'Microsoft.Resources/templateSpecs/versions@2022-02-01' = {
parent: createTemplateSpec
name: templateSpecVersionName
___location: ___location
properties: {
mainTemplate: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
'contentVersion': '1.0.0.0'
'metadata': {}
'parameters': {
'storageAccountType': {
'type': 'string'
'defaultValue': 'Standard_LRS'
'metadata': {
'description': 'Storage account type.'
}
'allowedValues': [
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
]
}
'___location': {
'type': 'string'
'defaultValue': '[resourceGroup().___location]'
'metadata': {
'description': 'Location for all resources.'
}
}
'storageNamePrefix': {
'type': 'string'
'defaultValue': 'storage'
'metadata': {
'description': 'The storage account name prefix.'
}
'maxLength': 11
}
}
'variables': {
'storageAccountName': '[format(\'{0}{1}\', toLower(parameters(\'storageNamePrefix\')), uniqueString(resourceGroup().id))]'
}
'resources': [
{
'type': 'Microsoft.Storage/storageAccounts'
'apiVersion': '2023-04-01'
'name': '[variables(\'storageAccountName\')]'
'___location': '[parameters(\'___location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
Para agregar la nueva versión a la especificación de plantilla, implemente la plantilla con Azure PowerShell o la CLI de Azure.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Copie el siguiente módulo Bicep y guárdelo en el equipo como storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
Reemplace <subscriptionId>
en el módulo. Use Azure PowerShell o CLI de Azure para obtener el id. de suscripción.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Implemente la especificación de plantilla con Azure PowerShell o la CLI de Azure.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Limpieza de recursos
Para limpiar los recursos que implementó en esta guía de inicio rápido, elimine los dos grupos de recursos. Se eliminarán el grupo de recursos, las especificaciones de plantilla y las cuentas de almacenamiento.
Use Azure PowerShell o la CLI de Azure para eliminar los grupos de recursos.
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
Pasos siguientes