Declaração de recursos no Bicep

Este artigo descreve a sintaxe que você usa para adicionar um recurso ao arquivo Bicep. Você está limitado a 800 recursos em um arquivo Bicep. Para obter mais informações, consulte Limites de modelo.

Definir recursos

Adicione uma declaração de recurso usando a resource palavra-chave. Defina um nome simbólico para o recurso. O nome simbólico não é o mesmo que o nome do recurso. Use o nome simbólico para referenciar o recurso noutras partes do seu ficheiro Bicep.

@<decorator>(<argument>)
resource <symbolic-name> '<full-type-name>@<api-version>' = {
  <resource-properties>
}

Uma declaração para uma conta de armazenamento pode começar com:

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  ...
}

Os nomes simbólicos fazem distinção entre maiúsculas e minúsculas. Podem conter letras, números e sublinhados (_). Eles não podem começar com um número. Um recurso não pode ter o mesmo nome que um parâmetro, variável ou módulo.

Para os tipos e versões de recursos disponíveis, consulte a referência de recursos Bicep. O Bicep não suporta apiProfile, que está disponível no JSON dos modelos do Azure Resource Manager (modelos ARM). Você também pode definir recursos do provedor de extensibilidade do Bicep. Para obter mais informações, consulte fornecedor de extensibilidade do Kubernetes para o Bicep.

Para implantar condicionalmente um recurso, use a if sintaxe. Para obter mais informações, consulte Implementação condicional no Bicep.

resource <symbolic-name> '<full-type-name>@<api-version>' = if (condition) {
  <resource-properties>
}

Para implantar mais de uma instância de um recurso, use a for sintaxe. Pode utilizar o decorador batchSize para especificar se as instâncias são implantadas em série ou em paralelo. Para obter mais informações, consulte Loops iterativos no Bicep.

@batchSize(int) // optional decorator for serial deployment
resource <symbolic-name> '<full-type-name>@<api-version>' = [for <item> in <collection>: {
  <properties-to-repeat>
}]

Você também pode usar a for sintaxe nas propriedades do recurso para criar uma matriz.

resource <symbolic-name> '<full-type-name>@<api-version>' = {
  properties: {
    <array-property>: [for <item> in <collection>: <value-to-repeat>]
  }
}

Utilize decoradores

Escreva decoradores no formato @expression e coloque-os acima das declarações de recursos. A tabela a seguir mostra os decoradores disponíveis para recursos.

Decorador Argumento Descrição
tamanho do lote nenhum Configure instâncias para implantar sequencialmente.
descrição cadeia (de caracteres) Forneça descrições para o recurso.
nullIfNotFound nenhum Se o recurso não existir, o símbolo do recurso é avaliado como null em vez de fazer com que a implementação falhe.
onlyIfNotExists nenhum Implante o recurso somente se ele ainda não existir no escopo de destino.

Os decoradores estão no namespace sys. Se você precisa diferenciar um decorador de outro item com o mesmo nome, prefacie o decorador com sys. Por exemplo, se o arquivo Bicep incluir um parâmetro chamado description, você deve adicionar o namespace sys ao usar o decorador de descrição .

Tamanho do lote

Você só pode aplicar @batchSize() a uma definição de recurso ou módulo que usa uma for expressão.

Por padrão, os recursos são implantados em paralelo. Ao adicionar o batchSize(int) decorador, você implanta instâncias em série.

@batchSize(3)
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for storageName in storageAccounts: {
  ...
}]

Para obter mais informações, consulte Implantar em lotes.

Descrição

Para adicionar explicação, adicione uma descrição às declarações de recursos. Por exemplo:

@description('Create a number of storage accounts')
resource storageAccountResources 'Microsoft.Storage/storageAccounts@2025-06-01' = [for storageName in storageAccounts: {
  ...
}]

Você pode usar texto formatado em Markdown para o texto de descrição.

nullIfNotFound

Aplica o @nullIfNotFound() decorador às declarações de recursos existentes. Quando referencias um recurso existente no Bicep (usando a palavra-chave existente), a implementação do ARM falha se esse recurso não for encontrado no momento da implementação. Ao aplicar @nullIfNotFound(), se o recurso não existir, o símbolo do recurso é avaliado como null em vez de causar uma falha na implementação.

@nullIfNotFound()
resource centralWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' existing = {
  name: 'central-log-analytics'
}

// Safe access
output workspaceId string = centralWorkspace.?id ?? ''
output workspaceExists bool = centralWorkspace != null

onlyIfNotExists

Por padrão, quando uma implementação do Bicep é executada, o Azure Resource Manager (ARM) cria o recurso se não existir ou atualiza-o caso já exista. Se um recurso existente tiver propriedades que diferem do seu modelo, o ARM pode tentar atualizá-lo – ou falhar se as atualizações não forem permitidas.

A partir da versão Bicep v0.38.3, o @onlyIfNotExists() decorador instrui o ARM a criar o recurso apenas se este ainda não existir. Se o ARM encontrar um recurso com o ID do recurso, salta a criação e mantém o recurso existente inalterado.

@onlyIfNotExists()
resource example 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'mystorageacct'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

Nome do recurso

Cada recurso tem um nome. Ao definir o nome do recurso, preste atenção às regras e restrições para nomes de recursos.

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  ...
}

Normalmente, define o nome para um parâmetro para poderes passar diferentes valores durante a implementação.

@minLength(3)
@maxLength(24)
param storageAccountName string

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountName
  ...
}

Localização do recurso

Muitos recursos requerem uma localização. Podes determinar se o recurso precisa de uma localização através do IntelliSense ou referência ao template. O exemplo a seguir adiciona um parâmetro location que é usado para a conta de armazenamento.

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: 'eastus'
  ...
}

Normalmente, define a localização para um parâmetro para poderes implementar em diferentes localizações.

param location string = resourceGroup().location

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: location
  ...
}

Diferentes tipos de recursos são suportados em diferentes locais. Para obter as localizações suportadas para um serviço Azure, consulte Produtos disponíveis por região. Para obter os locais com suporte para um tipo de recurso, use o Azure PowerShell ou a CLI do Azure.

((Get-AzResourceProvider -ProviderNamespace Microsoft.Batch).ResourceTypes `
  | Where-Object ResourceTypeName -eq batchAccounts).Locations

Etiquetas de recursos

Você pode aplicar tags a um recurso durante a implantação. As tags ajudam você a organizar logicamente os recursos implantados. Para ver exemplos das diferentes formas de especificar as etiquetas, consulte etiquetas de modelos ARM.

Identidades gerenciadas para recursos

Alguns recursos dão suporte a identidades gerenciadas para recursos do Azure. Estes recursos têm um objeto de identidade no nível raiz da declaração do recurso.

Você pode usar identidades atribuídas ao sistema ou ao usuário.

O exemplo a seguir mostra como configurar uma identidade atribuída ao sistema para um cluster do Serviço Kubernetes do Azure.

resource aks 'Microsoft.ContainerService/managedClusters@2025-08-02-preview' = {
  name: clusterName
  location: location
  tags: tags
  identity: {
    type: 'SystemAssigned'
  }

O próximo exemplo mostra como configurar uma identidade atribuída pelo usuário para uma máquina virtual.

param userAssignedIdentity string

resource vm 'Microsoft.Compute/virtualMachines@2025-04-01' = {
  name: vmName
  location: location
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${userAssignedIdentity}': {}
    }
  }

Propriedades específicas do recurso

As propriedades anteriores são genéricas para a maioria dos tipos de recursos. Depois de definir esses valores, define as propriedades específicas para o tipo de recurso que estás a implementar.

Use a referência de recursos IntelliSense ou Bicep para determinar quais as propriedades disponíveis e quais são necessárias. O exemplo a seguir define as propriedades restantes de uma conta de armazenamento.

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Próximos passos