Declaração de recursos no Bicep

Este artigo descreve a sintaxe que utiliza para adicionar um recurso ao seu ficheiro Bicep. Está limitado a 800 recursos num ficheiro Bicep. Para obter mais informações, veja Limites de modelos.

Declaração

Adicione uma declaração de recurso com 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. Utilize o nome simbólico para referenciar o recurso noutras partes do ficheiro Bicep.

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@2021-04-01' = {
  ...
}

Os nomes simbólicos são sensíveis às maiúsculas e minúsculas. Podem conter letras, números e sublinhados (_). 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, veja Referência de recursos do Bicep. O Bicep não suporta apiProfile, que está disponível no JSON de modelos de Resource Manager do Azure (modelos arm). Também pode definir recursos do fornecedor de extensibilidade do Bicep. Para obter mais informações, veja Fornecedor do Kubernetes de extensibilidade do Bicep.

Para implementar condicionalmente um recurso, utilize a if sintaxe. Para obter mais informações, veja Implementação condicional no Bicep.

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

Para implementar mais do que uma instância de um recurso, utilize a for sintaxe. Pode utilizar o batchSize decorador para especificar se as instâncias são implementadas em série ou em paralelo. Para obter mais informações, veja Ciclos 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>
}]

Também pode utilizar 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>]
  }
}

Nome do recurso

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

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

Normalmente, definiria o nome como um parâmetro para que possa transmitir valores diferentes durante a implementação.

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

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

Localização

Muitos recursos necessitam de uma localização. Pode determinar se o recurso precisa de uma localização através do intellisense ou da referência de modelo. O exemplo seguinte adiciona um parâmetro de localização que é utilizado para a conta de armazenamento.

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

Normalmente, definiria a localização como um parâmetro para poder implementar em localizações diferentes.

param location string = resourceGroup().location

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

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

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

Etiquetas

Pode aplicar etiquetas a um recurso durante a implementação. As etiquetas ajudam-no a organizar logicamente os recursos implementados. Para obter exemplos das diferentes formas de especificar as etiquetas, veja Etiquetas de modelo do ARM.

Identidades geridas dos recursos do Azure

Alguns recursos suportam identidades geridas para recursos do Azure. Esses recursos têm um objeto de identidade ao nível da raiz da declaração de recursos.

Pode utilizar identidades atribuídas pelo sistema ou atribuídas pelo utilizador.

O exemplo seguinte mostra como configurar uma identidade atribuída pelo sistema para um cluster Azure Kubernetes Service.

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

O exemplo seguinte mostra como configurar uma identidade atribuída pelo utilizador para uma máquina virtual.

param userAssignedIdentity string

resource vm 'Microsoft.Compute/virtualMachines@2020-06-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, tem de definir as propriedades específicas do tipo de recurso que está a implementar.

Utilize a referência de recursos intellisense ou Bicep para determinar que propriedades estão disponíveis e quais são necessárias. O exemplo seguinte define as propriedades restantes de uma conta de armazenamento.

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

Passos seguintes