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. Você define 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 fazer referência ao recurso em outras partes do arquivo Bicep.

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

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

resource stg 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  ...
}

Os nomes simbólicos diferenciam maiúsculas de 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 obter os tipos de recursos e a versão disponíveis, consulte Referência de recursos do Bíceps. O Bicep não oferece suporte apiProfileao , que está disponível em modelos do Azure Resource Manager (modelos ARM) JSON. Você também pode definir recursos do provedor de extensibilidade do Bicep. Para obter mais informações, consulte Provedor Kubernetes de extensibilidade do Bicep.

Para implantar condicionalmente um recurso, use a if sintaxe. Para obter mais informações, consulte Implantaçã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. Você pode usar o batchSize decorador 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>]
  }
}

Use decoradores

Os decoradores são escritos no formato @expression e são colocados acima das declarações de recursos. A tabela a seguir mostra os decoradores disponíveis para recursos.

Decorador Argumento Description
tamanho do lote nenhum Configure instâncias para implantar sequencialmente.
descrição string Forneça descrições para o recurso.

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@2023-04-01' = [for storageName in storageAccounts: {
  ...
}]

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

Description

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@2023-04-01' = [for storageName in storageAccounts: {
  ...
}]

O texto formatado com marcação pode ser usado para o texto de descrição.

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@2023-04-01' = {
  name: 'examplestorage'
  ...
}

Normalmente, você define o nome como um parâmetro para que possa passar valores diferentes durante a implantação.

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

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

Localização do recurso

Muitos recursos requerem uma localização. Você pode determinar se o recurso precisa de um local por meio do intellisense ou da referência de modelo. O exemplo a seguir adiciona um parâmetro location que é usado para a conta de armazenamento.

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

Normalmente, você define o local como um parâmetro para que possa implantar em locais diferentes.

param location string = resourceGroup().location

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

Diferentes tipos de recursos são suportados em diferentes locais. Para obter os locais suportados para um serviço do 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 obter exemplos das diferentes maneiras de especificar as tags, consulte Tags de modelo ARM.

Identidades gerenciadas para recursos

Alguns recursos dão suporte a identidades gerenciadas para recursos do Azure. Esses recursos têm um objeto de identidade no nível raiz da declaração de 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@2024-02-01' = {
  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@2024-03-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, você precisa definir as propriedades específicas para o tipo de recurso que está implantando.

Use a referência de recursos intellisense ou Bicep para determinar quais propriedades estão 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@2023-04-01' = {
  name: 'examplestorage'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Próximos passos