Declaração de recurso no Bicep

Este artigo descreve a sintaxe usada para adicionar um recurso ao arquivo Bicep. Você está limitado a 800 recursos em um arquivo Bicep. Para obter mais informações, confira 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 seu arquivo Bicep.

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

Portanto, 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. Devem 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, uma variável ou um módulo.

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

Para implantar um recurso condicionalmente, use a sintaxe if. Para obter mais informações, confira 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 tipo de recurso, use a sintaxe for. 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, confira 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 sintaxe for 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 Argument Descrição
batchSize nenhum Configure instâncias para implantar sequencialmente.
descrição string Fornece descrições para o recurso.

Os decoradores estão no namespace sys. Se você precisar diferenciar um decorador de outro item com o mesmo nome, preceda o decorador com sys. Por exemplo, se o arquivo Bicep incluir um parâmetro chamadodescription, você deverá adicionar o namespace sys ao usar o decorador de descrição.

BatchSize

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

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

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

Para saber mais, consulte Implantar em lotes.

Descrição

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

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

O texto formatado em Markdown pode ser usado para o texto da 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ê definiria o nome para 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
  ...
}

Local do recurso

Muitos recursos exigem um local. 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ê definiria a localização para um parâmetro para seja possível implantar em localizações diferentes.

param location string = resourceGroup().location

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

Tipos de recursos diferentes têm suporte em locais diferentes. Para obter as localizações com suporte para um serviço do Azure, confira Produtos disponíveis por região. Para obter os locais com suporte para um tipo de recurso, use Azure PowerShell ou CLI do Azure.

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

Marcações de recursos

Você pode aplicar marcas a um recurso durante a implantação. As marcas ajudam você a organizar logicamente seus recursos implantados. Para ver exemplos das diferentes maneiras de especificar as marcas, veja Marcas do Modelo do ARM.

Identidades gerenciadas para recursos

Alguns recursos são compatíveis com identidades gerenciadas para recursos do Azure. Esses recursos têm um objeto de identidade no nível raiz da declaração do recurso.

Use identidades atribuídas pelo sistema ou pelo usuário.

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

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

O exemplo a seguir 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 maior parte dos tipos de recursos. Depois de definir esses valores, defina as propriedades específicas para o tipo de recurso que você está implantando.

Use o intellisense ou a referência do modelo do Bicep para determinar quais propriedades estão disponíveis e quais são obrigatórias. O exemplo a seguir define as propriedades restantes para 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óximas etapas