Den här snabbstarten beskriver hur du skapar och distribuerar en mallspecifikation med en Bicep-fil. En mallspecifikation distribueras till en resursgrupp så att personer i din organisation kan distribuera resurser i Microsoft Azure. Med mallspecifikationer kan du dela distributionsmallar utan att behöva ge användarna åtkomst till att ändra Bicep-filen. Det här mallspecifikationsexemplet använder en Bicep-fil för att distribuera ett lagringskonto.
När du skapar en mallspecifikation överförs Bicep-filen till JavaScript Object Notation (JSON). Mallspecifikationen använder JSON för att distribuera Azure-resurser. För närvarande kan du inte använda Microsoft Azure Portal för att importera en Bicep-fil och skapa en mallspecifikationsresurs.
Förutsättningar
Skapa Bicep-fil
Du skapar en mallspecifikation från en lokal Bicep-fil. Kopiera följande exempel och spara det på datorn som main.bicep. I exemplen används sökvägen C:\templates\main.bicep. Du kan använda en annan sökväg, men du måste ändra kommandona.
Följande Bicep-fil används på flikarna PowerShell och CLI .
Bicep-filfliken använder en annan mall som kombinerar Bicep och JSON för att skapa och distribuera en mallspecifikation.
@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@2025-06-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountNameOutput string = storageAccount.name
Skapa mallspecifikation
Mallspecifikationen är en resurstyp med namnet Microsoft.Resources/templateSpecs. Om du vill skapa en mallspecifikation använder du Azure CLI, Azure PowerShell eller en Bicep-fil.
I det här exemplet används resursgruppens namn templateSpecRG. Du kan använda ett annat namn, men du måste ändra kommandona.
Skapa en ny resursgrupp som ska innehålla mallspecifikationen.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
Skapa mallspecifikationen i resursgruppen. Ge den nya mallspecifikationen namnet storageSpec.
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Skapa en ny resursgrupp som ska innehålla mallspecifikationen.
az group create \
--name templateSpecRG \
--location westus2
Skapa mallspecifikationen i resursgruppen. Ge den nya mallspecifikationen namnet storageSpec.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Du kan skapa en mallspecifikation med en Bicep-fil, men måste mainTemplate finnas i JSON. JSON-mallen använder inte JSON-standardsyntax. Det finns till exempel inga kommatecken i slutet av raden, dubbla citattecken ersätts med enkla citattecken och omvänt snedstreck (\) används för att undvika enkla citattecken i uttryck.
Kopiera följande mall och spara den på datorn som 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': '2025-06-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
Använd Azure PowerShell eller Azure CLI för att skapa en ny resursgrupp.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Skapa mallspecifikationen i resursgruppen. Mallspecifikationens namnlagringSpec och versionsnummer 1.0 är parametrar i Bicep-filen.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Distribuera mallspecifikation
Använd mallspecifikationen för att distribuera ett lagringskonto. I det här exemplet används resursgruppens namn storageRG. Du kan använda ett annat namn, men du måste ändra kommandona.
Skapa en resursgrupp som ska innehålla det nya lagringskontot.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
Hämta resurs-ID för mallspecifikationen.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
Distribuera mallspecifikationen.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Du anger parametrar precis som för en Bicep-fildistribution. Distribuera om mallspecifikationen med en parameter för lagringskontotypen.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
Skapa en resursgrupp som ska innehålla det nya lagringskontot.
az group create \
--name storageRG \
--location westus2
Hämta resurs-ID för mallspecifikationen.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Kommentar
Det finns ett känt problem med att hämta ett mallspecifikations-ID och tilldela det till en variabel i Windows PowerShell.
Distribuera mallspecifikationen.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Du anger parametrar precis som för en Bicep-fildistribution. Distribuera om mallspecifikationen med en parameter för lagringskontotypen.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
Om du vill distribuera en mallspecifikation med en Bicep-fil använder du en modul. Modulen länkar till en befintlig mallspecifikation. Mer information finns i filen i mallspecifikationen.
Kopiera följande Bicep-modul och spara den på datorn som storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
Ersätt <subscriptionId> i modulen. Använd Azure PowerShell eller Azure CLI för att hämta ditt prenumerations-ID.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Använd Azure PowerShell eller Azure CLI för att skapa en ny resursgrupp för lagringskontot.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Distribuera mallspecifikationen med Azure PowerShell eller Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Du kan lägga till en parameter och distribuera om mallspecifikationen med en annan lagringskontotyp. Kopiera exemplet och ersätt filen storage.bicep . Distribuera sedan om distributionen av mallspecifikationen.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
storageAccountType: 'Standard_GRS'
}
}
Bevilja åtkomst
Om du vill låta andra användare i din organisation distribuera mallspecifikationen måste du ge dem läsbehörighet. Du kan tilldela rollen Läsare till en Microsoft Entra-grupp för resursgruppen som innehåller mallspecifikationer som du vill dela. Mer information finns i Självstudie: Bevilja en grupp åtkomst till Azure-resurser med hjälp av Azure PowerShell.
Uppdatera Bicep-fil
När mallspecifikationen skapades bestämde du dig för att uppdatera Bicep-filen. Om du vill fortsätta med exemplen på PowerShell - eller CLI-flikarna kopierar du exemplet och ersätter filen main.bicep .
Parametern storageNamePrefix anger ett prefixvärde för lagringskontots namn. Variabeln storageAccountName sammanfogar prefixet med en unik sträng.
@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@2025-06-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountNameOutput string = storageAccount.name
Uppdatera mallspecifikationsversion
I stället för att skapa en ny mallspecifikation för den ändrade mallen lägger du till en ny version med namnet 2.0 i den befintliga mallspecifikationen. Användarna kan välja att distribuera någon av versionerna.
Skapa en ny version av mallspecifikationen.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Om du vill distribuera den nya versionen hämtar du resurs-ID:t för 2.0 versionen.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
Distribuera den nya versionen och använd storageNamePrefix för att ange ett prefix för lagringskontots namn.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
Skapa en ny version av mallspecifikationen.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Om du vill distribuera den nya versionen hämtar du resurs-ID:t för 2.0 versionen.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
Distribuera den nya versionen och använd storageNamePrefix för att ange ett prefix för lagringskontots namn.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
Skapa en ny version av mallspecifikationen. Kopiera exemplet och ersätt filen main.bicep .
Parametern storageNamePrefix anger ett prefixvärde för lagringskontots namn. Variabeln storageAccountName sammanfogar prefixet med en unik sträng.
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': '2025-06-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
Om du vill lägga till den nya versionen i mallspecifikationen distribuerar du mallen med Azure PowerShell eller Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Kopiera följande Bicep-modul och spara den på datorn som storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
Ersätt <subscriptionId> i modulen. Använd Azure PowerShell eller Azure CLI för att hämta ditt prenumerations-ID.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Distribuera mallspecifikationen med Azure PowerShell eller Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Rensa resurser
Om du vill rensa de resurser som du distribuerade i den här snabbstarten tar du bort båda resursgrupperna. Resursgruppen, mallspecifikationerna och lagringskontona tas bort.
Använd Azure PowerShell eller Azure CLI för att ta bort resursgrupperna.
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
Nästa steg