Guia de Início Rápido: Criar e implantar uma especificação de modelo com o Bicep

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 compartilhar modelos de implantação sem a necessidade de conceder 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 é transferido para JSON (JavaScript Object Notation). A especificação de modelo usa JSON para implantar recursos do Azure. Atualmente, não é possível usar o portal do Microsoft Azure importar um arquivo Bicep e criar um recurso de especificação de modelo.

Pré-requisitos

Criar um arquivo Bicep

Você criará uma especificação de modelo com base em um arquivo de 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 precisará alterar os comandos.

O arquivo Bicep a seguir é usado nas guias PowerShell e CLI. A guia 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@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountNameOutput string = storageAccount.name

Criar especificação de modelo

A especificação de 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 do grupo de recursos templateSpecRG. Você pode usar um nome diferente, mas precisará alterar os comandos.

  1. Crie um grupo de recursos para conter a especificação de modelo.

    New-AzResourceGroup `
      -Name templateSpecRG `
      -Location westus2
    
  2. Crie a especificação de modelo nesse grupo de recursos. Nomeie a nova especificação de modelo storageSpec.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "1.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "C:\templates\main.bicep"
    

Implantar especificação de modelo

Use a especificação de modelo para implantar uma conta de armazenamento. Este exemplo usa o nome do grupo de recursos storageRG. Você pode usar um nome diferente, mas precisará alterar os comandos.

  1. Crie um grupo de recursos para conter a nova conta de armazenamento.

    New-AzResourceGroup `
      -Name storageRG `
      -Location westus2
    
  2. Obtenha a ID do recurso da especificação de modelo.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "1.0").Versions.Id
    
  3. Implante a especificação de modelo.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG
    
  4. Você fornece parâmetros exatamente como faria para uma implantação de arquivo Bicep. Reimplante a especificação de modelo com um parâmetro para o tipo de conta de armazenamento.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageAccountType Standard_GRS
    

Conceder acesso

Se você quiser permitir que outros usuários na sua organização implantem sua especificação de modelo, precisará conceder acesso de leitura a eles. Você pode atribuir a função Leitor a um grupo do Microsoft Entra do grupo de recursos que contém as especificações de modelo que deseja compartilhar. Para saber mais, confira Tutorial: Conceder a um grupo acesso aos recursos do Azure usando o Azure PowerShell.

Atualizar um arquivo Bicep

Após a criação da especificação de modelo, você decidiu atualizar o arquivo Bicep. Para continuar com os exemplos nas guias do PowerShell ou da CLI, copie a amostra e substitua seu arquivo main.bicep.

O parâmetro storageNamePrefix especifica um valor de prefixo para o nome da conta de armazenamento. A variável storageAccountName 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@2022-09-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountNameOutput string = storageAccount.name

Atualizar a versão da especificação de modelo

Em vez de criar uma especificação de modelo para o modelo revisado, adicione uma versão chamada 2.0 à especificação de modelo. Os usuários podem escolher uma das duas versões para implantar.

  1. Crie uma nova versão da especificação de modelo.

    New-AzTemplateSpec `
      -Name storageSpec `
      -Version "2.0" `
      -ResourceGroupName templateSpecRG `
      -Location westus2 `
      -TemplateFile "C:\templates\main.bicep"
    
  2. Para implantar a nova versão, obtenha a ID do recurso para a versão 2.0.

    $id = (Get-AzTemplateSpec -ResourceGroupName templateSpecRG -Name storageSpec -Version "2.0").Versions.Id
    
  3. Implante a nova versão e use o storageNamePrefix para especificar um prefixo para o nome da conta de armazenamento.

    New-AzResourceGroupDeployment `
      -TemplateSpecId $id `
      -ResourceGroupName storageRG `
      -storageNamePrefix "demo"
    

Limpar os recursos

Para limpar os recursos implantados neste início rápido, exclua ambos os grupos de recursos. O grupo de recursos, as especificações de modelo e as contas de armazenamento serão excluídos.

Use o Azure PowerShell ou a CLI do Azure para excluir o grupo de recursos.

Remove-AzResourceGroup -Name "templateSpecRG"

Remove-AzResourceGroup -Name "storageRG"
az group delete --name templateSpecRG

az group delete --name storageRG

Próximas etapas