Ce démarrage rapide décrit comment créer et déployer une spec de modèle avec un fichier Bicep. Une spec de modèle est déployée sur un groupe de ressources afin que les membres de votre organisation puissent déployer des ressources dans Microsoft Azure. Des specs de modèle vous permettent de partager des modèles de déploiement sans devoir accorder aux utilisateurs l’accès au fichier Bicep pour modifier celui-ci. Cet exemple de spec de modèle utilise un fichier Bicep pour déployer un compte de stockage.
Lorsque vous créez une spec de modèle, le fichier Bicep est transpilé en JSON (JavaScript Object Notation). La spec de modèle utilise JSON pour déployer des ressources Azure. Actuellement, vous ne pouvez pas utiliser le portail Azure pour importer un fichier Bicep et créer une ressource de spec de modèle.
Prérequis
Créer un fichier Bicep
Vous créez une spec de modèle à partir d’un fichier Bicep local. Copiez l’exemple suivant et enregistrez-le sur votre ordinateur sous main.bicep. Les exemples utilisent le chemin d’accès c:\templates\main.bicep. Vous pouvez utiliser un autre chemin d’accès, mais vous devez modifier les commandes.
Le fichier Bicep suivant est utilisé sous les onglets PowerShell et CLI. L’onglet Fichier Bicep utilise un autre modèle qui combine Bicep et JSON pour créer et déployer une spec de modèle.
@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
Créer une spec de modèle
La spec de modèle est un type de ressource nommé Microsoft.Resources/templateSpecs. Pour créer une spec de modèle, utilisez Azure CLI, Azure PowerShell ou un fichier Bicep.
Cet exemple utilise le nom de groupe de ressources templateSpecRG. Vous pouvez utiliser un autre nom, mais vous devrez modifier les commandes.
Créez un groupe de ressources pour contenir la spec de modèle.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
Créez la spec de modèle dans ce groupe de ressources. Attribuez le nom storageSpec à la nouvelle spec de modèle.
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Créez un groupe de ressources pour contenir la spec de modèle.
az group create \
--name templateSpecRG \
--location westus2
Créez la spec de modèle dans ce groupe de ressources. Attribuez le nom storageSpec à la nouvelle spec de modèle.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Vous pouvez créer une spec de modèle avec un fichier Bicep, mais le mainTemplate doit être en JSON. Le modèle JSON n’utilise pas la syntaxe JSON standard. Par exemple, il n’y a pas de virgule de fin de ligne, les guillemets sont remplacés par des apostrophes, et des barres obliques inverses (\) sont utilisées pour échapper les apostrophes à l’intérieur des expressions.
Copiez le modèle suivant et enregistrez-le sur votre ordinateur sous 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\')]'
}
}
}
}
}
Utilisez Azure PowerShell ou Azure CLI pour créer un groupe de ressources.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Créez la spec de modèle dans ce groupe de ressources. Le nom de la spec de modèle storageSpec et le numéro de version 1.0 sont des paramètres dans le fichier Bicep.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Déployer une spec de modèle
Utilisez la spec de modèle pour déployer un compte de stockage. Cet exemple utilise le nom de groupe de ressources storageRG. Vous pouvez utiliser un autre nom, mais vous devrez modifier les commandes.
Créez un groupe de ressources pour accueillir le nouveau compte de stockage.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
Obtenez l’ID de ressource de la spec de modèle.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
Déployez la spec de modèle.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Vous fournissez des paramètres exactement comme vous le feriez pour le déploiement d’un fichier Bicep. Redéployez la spec de modèle avec un paramètre pour le type de compte de stockage.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
Créez un groupe de ressources pour accueillir le nouveau compte de stockage.
az group create \
--name storageRG \
--location westus2
Obtenez l’ID de ressource de la spec de modèle.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Notes
Il existe un problème connu lié à l’obtention de l’ID de la spec de modèle et à son attribution à une variable dans Windows PowerShell.
Déployez la spec de modèle.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Vous fournissez des paramètres exactement comme vous le feriez pour le déploiement d’un fichier Bicep. Redéployez la spec de modèle avec un paramètre pour le type de compte de stockage.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
Pour déployer une spec de modèle à l’aide d’un fichier Bicep, utilisez un module. Le module lie à une spec de modèle existante. Pour plus d’informations, consultez Fichier dans une spec de modèle.
Copiez le module Bicep suivant et enregistrez-le sur votre ordinateur sous storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
Remplacez <subscriptionId> dans le module. Utilisez Azure PowerShell ou Azure CLI pour récupérer votre ID d’abonnement.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Utilisez Azure PowerShell ou Azure CLI pour créer un groupe de ressources pour le compte de stockage.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Déployez la spec de modèle avec Azure PowerShell ou Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Vous pouvez ajouter un paramètre et redéployer la spec de modèle avec un type de compte de stockage différent. Copiez l’exemple et remplacez votre fichier storage.bicep . Ensuite, redéployez la spec de modèle.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
storageAccountType: 'Standard_GRS'
}
}
Accorder l'accès
Si vous voulez permettre à d’autres utilisateurs de votre organisation de déployer votre spec de modèle, vous devez leur accorder un accès en lecture. Vous pouvez attribuer le rôle Lecteur à un groupe de Microsoft Entra pour le groupe de ressources contenant les specs de modèle que vous souhaitez partager. Pour plus d’informations, consultez le Tutoriel : Accorder à un groupe l’accès aux ressources Azure à l’aide d’Azure PowerShell.
Créer un fichier Bicep
Une fois la spec de modèle créée, vous avez décidé de mettre à jour le fichier Bicep. Pour continuer avec les exemples sous les onglets PowerShell ou CLI, copiez l’exemple et remplacez votre fichier main.bicep.
Le paramètre storageNamePrefix spécifie une valeur de préfixe pour le nom du compte de stockage. La variable storageAccountName concatène le préfixe avec une chaîne unique.
@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
Mettre à jour la version de spec de modèle
Au lieu de créer une spec de modèle pour le modèle révisé, ajoutez une nouvelle version nommée 2.0 à la spec de modèle existante. Les utilisateurs peuvent choisir de déployer la version de leur choix.
Créez une nouvelle version de la spec de modèle.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Pour déployer la nouvelle version, récupérez l’ID de ressource pour la version 2.0.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
Déployez la nouvelle version et utilisez le storageNamePrefix pour spécifier un préfixe pour le nom du compte de stockage.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
Créez une nouvelle version de la spec de modèle.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Pour déployer la nouvelle version, récupérez l’ID de ressource pour la version 2.0.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
Déployez la nouvelle version et utilisez le storageNamePrefix pour spécifier un préfixe pour le nom du compte de stockage.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
Créez une nouvelle version de la spec de modèle. Copiez l’exemple et remplacez votre fichier main.bicep.
Le paramètre storageNamePrefix spécifie une valeur de préfixe pour le nom du compte de stockage. La variable storageAccountName concatène le préfixe avec une chaîne unique.
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\')]'
}
}
}
}
}
Pour ajouter la nouvelle version à votre spec de modèle, déployez votre modèle avec Azure PowerShell ou Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Copiez le module Bicep suivant et enregistrez-le sur votre ordinateur sous storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
Remplacez <subscriptionId> dans le module. Utilisez Azure PowerShell ou Azure CLI pour récupérer votre ID d’abonnement.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Déployez la spec de modèle avec Azure PowerShell ou Azure CLI.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Nettoyer les ressources
Pour nettoyer la ressource que vous avez déployée dans le cadre de ce démarrage rapide, supprimez les deux groupes de ressources. Le groupe de ressources, les specs de modèle et les comptes de stockage seront supprimés.
Pour supprimer les groupes de ressources, utilisez Azure PowerShell ou Azure CLI.
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
Étapes suivantes