In dieser Schnellstartanleitung wird beschrieben, wie Sie eine Vorlagenspezifikation mit einer Bicep-Datei erstellen und bereitstellen. Eine Vorlagenspezifikation wird für eine Ressourcengruppe bereitgestellt, damit Personen in Ihrer Organisation Ressourcen in Microsoft Azure bereitstellen können. Mithilfe von Vorlagenspezifikationen können Sie Bereitstellungsvorlagen freigeben, ohne Benutzern Zugriff zum Ändern der Bicep-Datei zu erteilen. In diesem Beispiel für eine Vorlagenspezifikation wird eine Bicep-Datei verwendet, um ein Speicherkonto bereitzustellen.
Wenn Sie eine Vorlagenspezifikation erstellen, wird die Bicep-Datei in JavaScript Object Notation (JSON) transpiliert. Die Vorlagenspezifikation verwendet JSON zum Bereitstellen von Azure-Ressourcen. Derzeit können Sie das Microsoft Azure-Portal nicht verwenden, um eine Bicep-Datei zu importieren und eine Vorlagenspezifikationenressource zu erstellen.
Voraussetzungen
Erstellen einer Bicep-Datei
Sie erstellen eine Vorlagenspezifikation aus einer lokalen Bicep-Datei. Kopieren Sie das folgende Beispiel, und speichern Sie es als main.bicep auf Ihrem Computer. In den Beispielen wird der Pfad C:\templates\main.bicep verwendet. Sie können einen anderen Pfad verwenden, müssen dann jedoch die Befehle ändern.
Die folgende Bicep-Datei wird auf den Registerkarten PowerShell und Befehlszeilenschnittstelle (CLI) verwendet. Auf der Registerkarte Bicep-Datei wird eine andere Vorlage verwendet, die Bicep und JSON kombiniert, um eine Vorlagenspezifikation zu erstellen und bereitzustellen.
@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
Erstellen von Vorlagenspezifikationen
Die Vorlagenspezifikation ist ein Ressourcentyp namens Microsoft.Resources/templateSpecs. Verwenden Sie zum Erstellen einer Vorlagenspezifikation die Azure CLI, Azure PowerShell oder eine Bicep-Datei.
In diesem Beispiel wird als Ressourcengruppenname templateSpecRG verwendet. Sie können einen anderen Namen verwenden, müssen dann jedoch die Befehle ändern.
Erstellen Sie eine neue Ressourcengruppe, die die Vorlagenspezifikation enthält.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
Erstellen Sie die Vorlagenspezifikation in dieser Ressourcengruppe. Weisen Sie der neuen Vorlagenspezifikation den Namen storageSpec zu.
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Erstellen Sie eine neue Ressourcengruppe, die die Vorlagenspezifikation enthält.
az group create \
--name templateSpecRG \
--location westus2
Erstellen Sie die Vorlagenspezifikation in dieser Ressourcengruppe. Weisen Sie der neuen Vorlagenspezifikation den Namen storageSpec zu.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Sie können eine Vorlagenspezifikation mit einer Bicep-Datei erstellen, doch die mainTemplate muss JSON sein. Die JSON-Vorlage verwendet keine JSON-Standardsyntax. Es gibt in Ausdrücken z. B. keine Kommas am Zeilenende, doppelte Anführungszeichen werden durch einfache Anführungszeichen ersetzt und umgekehrte Schrägstriche (\) werden als Escapezeichen für einfache Anführungszeichen verwendet.
Kopieren Sie die folgende Vorlage, und speichern Sie sie als main.bicep auf Ihrem Computer.
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\')]'
}
}
}
}
}
Verwenden Sie Azure PowerShell oder die Azure CLI, um eine neue Ressourcengruppe zu erstellen.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Erstellen Sie die Vorlagenspezifikation in dieser Ressourcengruppe. Der Vorlagenspezifikationsname storageSpec und die Versionsnummer 1.0 sind Parameter in der Bicep-Datei.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Bereitstellen der Vorlagenspezifikationen
Verwenden Sie die Vorlagenspezifikation, um ein Speicherkonto bereitzustellen. In diesem Beispiel wird als Ressourcengruppenname storageRG verwendet. Sie können einen anderen Namen verwenden, müssen dann jedoch die Befehle ändern.
Erstellen Sie eine Ressourcengruppe, die das neue Speicherkonto enthält.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
Rufen Sie die Ressourcen-ID der Vorlagenspezifikation ab.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
Stellen Sie die Vorlagenspezifikation bereit.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Sie geben Parameter genau wie bei der Bereitstellung einer Bicep-Datei an. Stellen Sie die Vorlagenspezifikation mit einem Parameter für den Speicherkontotyp erneut bereit.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
Erstellen Sie eine Ressourcengruppe, die das neue Speicherkonto enthält.
az group create \
--name storageRG \
--location westus2
Rufen Sie die Ressourcen-ID der Vorlagenspezifikation ab.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Hinweis
Es gibt ein bekanntes Problem beim Abrufen der Vorlagenspezifikations-ID und deren Zuweisung zu einer Variablen in Windows PowerShell.
Stellen Sie die Vorlagenspezifikation bereit.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Sie geben Parameter genau wie bei der Bereitstellung einer Bicep-Datei an. Stellen Sie die Vorlagenspezifikation mit einem Parameter für den Speicherkontotyp erneut bereit.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
Um eine Vorlagenspezifikation mit einer Bicep-Datei bereitzustellen, verwenden Sie ein Modul. Das Modul ist mit einer vorhandenen Vorlagenspezifikation verknüpft. Weitere Informationen finden Sie unter Datei in Vorlagenspezifikation.
Kopieren Sie das folgende Bicep-Modul, und speichern Sie es als storage.bicep auf Ihrem Computer.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
Ersetzen Sie <subscriptionId> im Modul. Verwenden Sie Azure PowerShell oder die Azure CLI, um Ihre Abonnement-ID abzurufen.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Verwenden Sie Azure PowerShell oder die Azure CLI, um eine neue Ressourcengruppe für das Speicherkonto zu erstellen.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Stellen Sie die Vorlagenspezifikation mit Azure PowerShell oder mit der Azure CLI bereit.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Sie können einen Parameter hinzufügen und die Vorlagenspezifikation mit einem anderen Speicherkontotyp erneut bereitstellen. Kopieren Sie das Beispiel, und ersetzen Sie Ihre Datei storage.bicep. Stellen Sie anschließend die Bereitstellung der Vorlagenspezifikation erneut bereit.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
storageAccountType: 'Standard_GRS'
}
}
Gewähren von Zugriff
Wenn Sie anderen Benutzern in Ihrer Organisation die Bereitstellung Ihrer Vorlagenspezifikation gestatten möchten, müssen Sie ihnen Lesezugriff gewähren. Sie können die Rolle „Leser“ einer Microsoft Entra-Gruppe für die Ressourcengruppe zuweisen, die freizugebende Vorlagenspezifikationen enthält. Weitere Informationen finden Sie im Tutorial: Gewähren des Zugriffs auf Azure-Ressourcen für eine Gruppe mithilfe von Azure PowerShell.
Aktualisieren einer Bicep-Datei
Nachdem die Vorlagenspezifikation erstellt wurde, möchten Sie die Bicep-Datei aktualisieren. Um mit den Beispielen auf den Registerkarten PowerShell oder Befehlszeilenschnittstelle (CLI) fortzufahren, kopieren Sie das Beispiel, und ersetzen Sie Ihre Datei main.bicep.
Der Parameter storageNamePrefix gibt einen Präfixwert für den Speicherkontonamen an. Die Variable storageAccountName verkettet das Präfix mit einer eindeutigen Zeichenfolge.
@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
Aktualisieren der Vorlagenspezifikationsversion
Anstatt eine neue Vorlagenspezifikation für die überarbeitete Vorlage zu erstellen, fügen Sie der vorhandenen Vorlagenspezifikation eine neue Version mit dem Namen 2.0 hinzu. Benutzer können wählen, welche der beiden Versionen sie bereitstellen möchten.
Erstellen Sie eine neue Version der Vorlagenspezifikation.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Um die neue Version bereitzustellen, müssen Sie die Ressourcen-ID für die 2.0-Version abrufen.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
Stellen Sie die neue Version bereit, und geben Sie mit storageNamePrefix ein Präfix für den Speicherkontonamen an.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
Erstellen Sie eine neue Version der Vorlagenspezifikation.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Um die neue Version bereitzustellen, müssen Sie die Ressourcen-ID für die 2.0-Version abrufen.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
Stellen Sie die neue Version bereit, und geben Sie mit storageNamePrefix ein Präfix für den Speicherkontonamen an.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
Erstellen Sie eine neue Version der Vorlagenspezifikation. Kopieren Sie das Beispiel, und ersetzen Sie Ihre Datei main.bicep.
Der Parameter storageNamePrefix gibt einen Präfixwert für den Speicherkontonamen an. Die Variable storageAccountName verkettet das Präfix mit einer eindeutigen Zeichenfolge.
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\')]'
}
}
}
}
}
Um die neue Version Ihrer Vorlagenspezifikation hinzuzufügen, stellen Sie Ihre Vorlage mit Azure PowerShell oder mit der Azure CLI bereit.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Kopieren Sie das folgende Bicep-Modul, und speichern Sie es als storage.bicep auf Ihrem Computer.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
Ersetzen Sie <subscriptionId> im Modul. Verwenden Sie Azure PowerShell oder die Azure CLI, um Ihre Abonnement-ID abzurufen.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Stellen Sie die Vorlagenspezifikation mit Azure PowerShell oder mit der Azure CLI bereit.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Bereinigen von Ressourcen
Löschen Sie zum Bereinigen der in dieser Schnellstartanleitung bereitgestellten Ressourcen beide Ressourcengruppen. Die Ressourcengruppe, Vorlagenspezifikationen und Speicherkonten werden gelöscht.
Löschen Sie die Ressourcengruppen über Azure PowerShell oder über die Azure CLI.
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
Nächste Schritte