Declaración de recursos en Bicep

En este artículo se describe la sintaxis que se usa para agregar un recurso al archivo Bicep. Está limitado a 800 recursos en un archivo de Bicep. Para obtener más información, consulte Límites de plantilla.

Definición de recursos

Agregue una declaración de recursos mediante la palabra clave resource. Establezca un nombre simbólico para el recurso. El nombre simbólico no es lo mismo que el nombre del recurso. Use el nombre simbólico para hacer referencia al recurso en otras partes del archivo Bicep.

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

Una declaración de una cuenta de almacenamiento puede comenzar con:

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

Los nombres simbólicos distinguen mayúsculas de minúsculas. Pueden contener letras, números y caracteres de subrayado (_). No pueden empezar con un número. Un recurso no puede tener el mismo nombre que un parámetro, una variable o un módulo.

Para consultar los tipos de recursos y las versiones disponibles, consulte referencia de recursos de Bicep. Bicep no admite apiProfile, que está disponible en código JSON de plantillas de Azure Resource Manager (plantillas de ARM). También puede definir recursos del proveedor de extensibilidad de Bicep. Para obtener más información, consulte Proveedor de Kubernetes de extensibilidad de Bicep.

Para implementar un recurso de forma condicional, use la sintaxis if. Para obtener más información, consulte Implementación condicional en Bicep.

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

Para implementar más de una instancia de un recurso, use la sintaxis for. Puede usar el decorador batchSize para especificar si las instancias se implementan en serie o en paralelo. Para obtener más información, consulte bucles iterativos en Bicep.

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

También puede usar la sintaxis for en las propiedades del recurso para crear una matriz.

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

Usar decoradores

Escriba decoradores en el formato @expression y colóquelos encima de las declaraciones de recursos. En la siguiente tabla se muestran los decoradores disponibles para los recursos.

Decorador Argumento Descripción
batchSize None Configure instancias para implementarlas secuencialmente.
description cuerda / cadena Proporcione descripciones para el recurso.
nullIfNotFound None Si el recurso no existe, el símbolo de recurso se evalúa como null en lugar de provocar un error en la implementación.
onlyIfNotExists None Implemente el recurso solo si aún no existe en el ámbito de destino.

Los decoradores están en el espacio de nombres sys. Si tiene que diferenciar un decorador de otro elemento con el mismo nombre, anteceda el decorador con sys. Por ejemplo, si el archivo de Bicep incluye un parámetro llamado description, debe agregar el espacio de nombres sys al usar el decorador description.

BatchSize

Solo puede aplicar @batchSize() a un recurso o definición de módulo que use una expresión for.

De manera predeterminada, los recursos se implementan en paralelo. Cuando agrega el decorador batchSize(int), implementa las instancias en serie.

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

Para obtener más información, consulte Implementación en lotes.

Descripción

Para agregar una explicación, agregue una descripción a las declaraciones de recursos. Por ejemplo:

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

Puede usar texto con formato Markdown para el texto de descripción.

nullIfNotFound

Aplique el @nullIfNotFound() decorador a las declaraciones de recursos existentes. Al hacer referencia a un recurso existente en Bicep (con la palabra clave existing), se produce un error en la implementación de ARM si ese recurso no se encuentra en el momento de la implementación. Al aplicar @nullIfNotFound(), si el recurso no existe, el símbolo de recurso se evalúa como null en lugar de provocar un error de implementación.

@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

De forma predeterminada, cuando se ejecuta una implementación de Bicep, Azure Resource Manager (ARM) crea el recurso si no existe o lo actualiza si lo hace. Si un recurso existente tiene propiedades que difieren de la plantilla, ARM podría intentar actualizarlo o producir un error si no se permiten las actualizaciones.

A partir de la versión v0.38.3 de Bicep, el decorador @onlyIfNotExists() indica a ARM que cree el recurso solo si todavía no existe. Si ARM encuentra un recurso con el identificador de recurso, omite la creación y deja sin cambios el recurso existente.

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

Nombre del recurso

Cada recurso tiene un nombre. Al establecer el nombre del recurso, preste atención a las reglas y restricciones de los nombres de los recursos.

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

Normalmente, defina el nombre como un parámetro para poder proporcionar distintos valores durante el despliegue.

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

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

Ubicación de los recursos

Muchos recursos requieren una ubicación. Puede determinar si el recurso necesita una ubicación a través de IntelliSense o la referencia de plantilla. En el ejemplo siguiente se agrega un parámetro de ubicación que se usa para la cuenta de almacenamiento.

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

Normalmente, establezca la ubicación en un parámetro para que pueda implementar en diferentes ubicaciones.

param location string = resourceGroup().location

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

Se admiten diferentes tipos de recursos en diferentes ubicaciones. Para obtener las ubicaciones admitidas para un servicio de Azure, consulte Productos disponibles por región. Para obtener las ubicaciones admitidas para un tipo de recurso, use Azure PowerShell o la CLI de Azure.

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

Etiquetas del recurso

Puede aplicar etiquetas a un recurso durante la implementación. Las etiquetas le ayudan a organizar de forma lógica los recursos implementados. Para ver ejemplos de las diferentes maneras de especificar las etiquetas, consulte Etiquetas de plantillas de ARM.

Identidades administradas para recursos

Algunos recursos admiten identidades administradas para recursos de Azure. Estos recursos tienen un objeto de identidad en el nivel raíz de la declaración de recursos.

Puede usar identidades administradas asignadas por el sistema o por el usuario.

En el siguiente ejemplo se muestra cómo configurar una identidad asignada por el sistema para un clúster de Azure Kubernetes Service.

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

En el siguiente ejemplo se muestra cómo configurar una identidad asignada por el usuario para una máquina virtual.

param userAssignedIdentity string

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

Propiedades específicas de recursos

Las propiedades anteriores son genéricas para la mayoría de los tipos de recursos. Después de establecer esos valores, establezca las propiedades específicas del tipo de recurso que va a implementar.

Utilice IntelliSense o referencia de recursos de Bicep para determinar qué propiedades están disponibles y cuáles son obligatorias. En el ejemplo siguiente se establecen las propiedades restantes para una cuenta de almacenamiento.

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

Pasos siguientes