Este guia de início rápido descreve como criar e implantar uma especificação de modelo com um arquivo Bicep. Uma especificação de modelo é implantada em um grupo de recursos para que as pessoas em sua organização possam implantar recursos no Microsoft Azure. As especificações de modelo permitem que você compartilhe modelos de implantação sem a necessidade de dar aos usuários acesso para alterar o arquivo Bicep. Este exemplo de especificação de modelo usa um arquivo Bicep para implantar uma conta de armazenamento.
Quando você cria uma especificação de modelo, o arquivo Bicep é transpilado em JavaScript Object Notation (JSON). A especificação de modelo usa JSON para implantar recursos do Azure. Atualmente, você não pode usar o portal do Microsoft Azure para importar um arquivo Bicep e criar um recurso de especificação de modelo.
Pré-requisitos
Criar arquivo Bicep
Você cria uma especificação de modelo a partir de um arquivo Bicep local. Copie o exemplo a seguir e salve-o em seu computador como main.bicep. Os exemplos usam o caminho C:\templates\main.bicep. Você pode usar um caminho diferente, mas precisa alterar os comandos.
O seguinte arquivo Bicep é usado nas guias PowerShell e CLI . A guia do arquivo Bicep usa um modelo diferente que combina Bicep e JSON para criar e implantar uma especificação de modelo.
@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
Criar especificação de modelo
A especificação do modelo é um tipo de recurso chamado Microsoft.Resources/templateSpecs. Para criar uma especificação de modelo, use a CLI do Azure, o Azure PowerShell ou um arquivo Bicep.
Este exemplo usa o nome templateSpecRGdo grupo de recursos . Você pode usar um nome diferente, mas precisa alterar os comandos.
Crie um novo grupo de recursos para conter a especificação do modelo.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
Crie a especificação do modelo nesse grupo de recursos. Dê à nova especificação de modelo o nome storageSpec.
New-AzTemplateSpec `
-Name storageSpec `
-Version "1.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Crie um novo grupo de recursos para conter a especificação do modelo.
az group create \
--name templateSpecRG \
--location westus2
Crie a especificação do modelo nesse grupo de recursos. Dê à nova especificação de modelo o nome storageSpec.
az ts create \
--name storageSpec \
--version "1.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Você pode criar uma especificação de modelo com um arquivo Bicep, mas o mainTemplate deve estar em JSON. O modelo JSON não usa sintaxe JSON padrão. Por exemplo, não há vírgulas de fim de linha, aspas duplas são substituídas por aspas simples e barras invertidas (\) são usadas para escapar de aspas simples dentro de expressões.
Copie o modelo a seguir e salve-o em seu computador 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': '2025-06-01'
'name': '[variables(\'storageAccountName\')]'
'location': '[parameters(\'location\')]'
'sku': {
'name': '[parameters(\'storageAccountType\')]'
}
'kind': 'StorageV2'
'properties': {}
}
]
'outputs': {
'storageAccountNameOutput': {
'type': 'string'
'value': '[variables(\'storageAccountName\')]'
}
}
}
}
}
Use o Azure PowerShell ou a CLI do Azure para criar um novo grupo de recursos.
New-AzResourceGroup `
-Name templateSpecRG `
-Location westus2
az group create \
--name templateSpecRG \
--location westus2
Crie a especificação do modelo nesse grupo de recursos. O nome da especificação do modelo, storageSpec e o número 1.0 da versão são parâmetros no arquivo Bicep.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Implantar especificação de modelo
Use a especificação do modelo para implantar uma conta de armazenamento. Este exemplo usa o nome storageRGdo grupo de recursos . Você pode usar um nome diferente, mas precisa alterar os comandos.
Crie um grupo de recursos para conter a nova conta de armazenamento.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
Obtenha a ID do recurso da especificação do modelo.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
Implante a especificação do modelo.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG
Você fornece parâmetros exatamente como faria para uma implantação de arquivo Bicep. Reimplante a especificação do modelo com um parâmetro para o tipo de conta de armazenamento.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageAccountType Standard_GRS
Crie um grupo de recursos para conter a nova conta de armazenamento.
az group create \
--name storageRG \
--location westus2
Obtenha a ID do recurso da especificação do modelo.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "1.0" --query "id")
Nota
Há um problema conhecido com a obtenção de uma ID de especificação de modelo e atribuindo-a a uma variável no Windows PowerShell.
Implante a especificação do modelo.
az deployment group create \
--resource-group storageRG \
--template-spec $id
Você fornece parâmetros exatamente como faria para uma implantação de arquivo Bicep. Reimplante a especificação do modelo com um parâmetro para o tipo de conta de armazenamento.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageAccountType="Standard_GRS"
Para implantar uma especificação de modelo usando um arquivo Bicep, use um módulo. O módulo vincula-se a uma especificação de modelo existente. Para obter mais informações, consulte arquivo na especificação do modelo.
Copie o módulo Bicep a seguir e salve-o no seu computador como storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
}
Substitua <subscriptionId> no módulo. Use o Azure PowerShell ou a CLI do Azure para obter sua ID de assinatura.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Use o Azure PowerShell ou a CLI do Azure para criar um novo grupo de recursos para a conta de armazenamento.
New-AzResourceGroup `
-Name storageRG `
-Location westus2
az group create \
--name storageRG \
--location westus2
Implante a especificação do modelo com o Azure PowerShell ou a CLI do Azure.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Você pode adicionar um parâmetro e reimplantar a especificação do modelo com um tipo de conta de armazenamento diferente. Copie o exemplo e substitua o arquivo storage.bicep . Em seguida, reimplante a implantação de especificação de modelo.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:1.0' = {
name: 'deployVersion1'
params: {
storageAccountType: 'Standard_GRS'
}
}
Conceder acesso
Se você quiser permitir que outros usuários em sua organização implantem sua especificação de modelo, será necessário conceder-lhes acesso de leitura. Você pode atribuir a função Leitor a um grupo do Microsoft Entra para o grupo de recursos que contém especificações de modelo que você deseja compartilhar. Para obter mais informações, consulte Tutorial: Conceder a um grupo acesso aos recursos do Azure usando o Azure PowerShell.
Atualizar arquivo Bicep
Depois que a especificação do modelo foi criada, você decidiu atualizar o arquivo Bicep. Para continuar com os exemplos nas guias PowerShell ou CLI , copie o exemplo e substitua o arquivo main.bicep .
O parâmetro storageNamePrefix especifica um valor de prefixo para o nome da conta de armazenamento. A storageAccountName variável concatena o prefixo com uma cadeia de caracteres exclusiva.
@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
Atualizar versão de especificação do modelo
Em vez de criar uma nova especificação de modelo para o modelo revisado, adicione uma nova versão nomeada 2.0 à especificação de modelo existente. Os usuários podem optar por implantar qualquer uma das versões.
Crie uma nova versão da especificação do modelo.
New-AzTemplateSpec `
-Name storageSpec `
-Version "2.0" `
-ResourceGroupName templateSpecRG `
-Location westus2 `
-TemplateFile "C:\templates\main.bicep"
Para implantar a nova versão, obtenha o ID do recurso para a 2.0 versão.
$id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
Implante a nova versão e use o para especificar um prefixo storageNamePrefix para o nome da conta de armazenamento.
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName storageRG `
-storageNamePrefix "demo"
Crie uma nova versão da especificação do modelo.
az ts create \
--name storageSpec \
--version "2.0" \
--resource-group templateSpecRG \
--location westus2 \
--template-file "C:\templates\main.bicep"
Para implantar a nova versão, obtenha o ID do recurso para a 2.0 versão.
id=$(az ts show --name storageSpec --resource-group templateSpecRG --version "2.0" --query "id")
Implante a nova versão e use o para especificar um prefixo storageNamePrefix para o nome da conta de armazenamento.
az deployment group create \
--resource-group storageRG \
--template-spec $id \
--parameters storageNamePrefix="demo"
Crie uma nova versão da especificação do modelo. Copie o exemplo e substitua o arquivo main.bicep .
O parâmetro storageNamePrefix especifica um valor de prefixo para o nome da conta de armazenamento. A storageAccountName variável concatena o prefixo com uma cadeia de caracteres exclusiva.
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\')]'
}
}
}
}
}
Para adicionar a nova versão à sua especificação de modelo, implante seu modelo com o Azure PowerShell ou a CLI do Azure.
New-AzResourceGroupDeployment `
-ResourceGroupName templateSpecRG `
-TemplateFile "C:\templates\main.bicep"
az deployment group create \
--resource-group templateSpecRG \
--template-file "C:\templates\main.bicep"
Copie o módulo Bicep a seguir e salve-o no seu computador como storage.bicep.
module deployTemplateSpec 'ts:<subscriptionId>/templateSpecRG/storageSpec:2.0' = {
name: 'deployVersion2'
params: {
storageNamePrefix: 'demo'
}
}
Substitua <subscriptionId> no módulo. Use o Azure PowerShell ou a CLI do Azure para obter sua ID de assinatura.
(Get-AzContext).Subscription.Id
az account show --query "id" --output tsv
Implante a especificação do modelo com o Azure PowerShell ou a CLI do Azure.
New-AzResourceGroupDeployment `
-ResourceGroupName storageRG `
-TemplateFile "C:\templates\storage.bicep"
az deployment group create \
--resource-group storageRG \
--template-file "C:\templates\storage.bicep"
Clean up resources (Limpar recursos)
Para limpar os recursos implantados neste início rápido, exclua ambos os grupos de recursos. O grupo de recursos, as especificações do modelo e as contas de armazenamento serão excluídos.
Use o Azure PowerShell ou a CLI do Azure para excluir os grupos de recursos.
Remove-AzResourceGroup -Name "templateSpecRG"
Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG
az group delete --name storageRG
Próximos passos