Déclaration de ressources dans Bicep

Cet article décrit la syntaxe utilisée pour ajouter une ressource à votre fichier Bicep. Vous êtes limité à 800 ressources dans un fichier Bicep. Pour plus d’informations, consultez Limites du modèle.

Définir les ressources

Ajoutez une déclaration de ressource en utilisant le mot clé resource. Vous définissez un nom symbolique pour la ressource. Le nom symbolique n’est pas le même que le nom de la ressource. Vous utiliserez le nom symbolique pour référencer la ressource dans d’autres parties de votre fichier Bicep.

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

Une déclaration pour un compte de stockage peut donc commencer par :

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

Les noms symboliques respectent la casse. Ils peuvent contenir des lettres, des chiffres et des traits de soulignement (_). Ils ne peuvent pas commencer par un chiffre. Une ressource ne peut pas avoir le même nom qu’un paramètre, un module ou une variable.

Pour obtenir les types et versions des ressources disponibles, consultez les informations de référence sur les ressources Bicep. Bicep ne prend pas en charge apiProfile, qui est disponible dans le JSON des modèles Azure Resource Manager (modèles ARM). Vous pouvez également définir des ressources de fournisseur d’extensibilité Bicep. Pour plus d’informations, consultez Fournisseur Kubernetes d’extensibilité Bicep.

Pour déployer une ressource de manière conditionnelle, utilisez la syntaxe if. Pour plus d’informations, consultez Déploiement conditionnel dans Bicep.

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

Pour déployer plusieurs instances d’une ressource, utilisez la syntaxe for. Vous pouvez utiliser l’élément décoratif batchSize pour spécifier si les instances sont déployées en série ou en parallèle. Pour plus d’informations, consultez Boucles itératives dans Bicep.

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

Vous pouvez également utiliser la syntaxe for sur les propriétés de ressource pour créer un tableau.

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

Utiliser des décorateurs

Les décorateurs sont écrits au format @expression et sont placés au-dessus des déclarations de ressources. Le tableau suivant présente les décorateurs disponibles pour les ressources.

Élément décoratif Argument Description
batchSize Aucune Configurez des instances pour un déploiement séquentiel.
description string Fournissez des descriptions pour la ressource.

Les éléments décoratifs se trouvent dans l’espace de noms sys. Si vous devez différencier un élément décoratif d'un autre élément portant le même nom, faites précéder l’élément décoratif de sys. Par exemple, si votre fichier Bicep contient un paramètre nommé description, vous devez ajouter l’espace de noms sys lors de l’utilisation de l’élément décoratif description.

BatchSize

Vous pouvez uniquement appliquer @batchSize() à une définition de ressource ou de module qui utilise une expression for.

Par défaut, les ressources sont déployées en parallèle. Lorsque vous ajoutez l’élément décoratif batchSize(int), vous déployez des instances en série.

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

Pour plus d’informations, consultez Déployer par lots.

Description

Pour ajouter une explication, ajoutez une description aux déclarations de ressources. Par exemple :

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

Du texte au format Markdown peut être utilisé pour le texte de description.

Nom de la ressource

Chaque ressource a un nom. Lorsque vous définissez le nom de la ressource, soyez attentif aux règles et restrictions applicables aux noms de ressources.

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

En règle générale, vous définissez le nom sur un paramètre afin de passer des valeurs différentes lors du déploiement.

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

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

Emplacement de la ressource

De nombreuses ressources nécessitent un emplacement. Vous pouvez déterminer si la ressource a besoin d’un emplacement via IntelliSense ou une référence de modèle. L’exemple suivant ajoute un paramètre d’emplacement utilisé pour le compte de stockage.

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

En règle générale, vous définissez l’emplacement sur un paramètre afin de pouvoir le déployer à différents emplacements.

param location string = resourceGroup().location

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

Différents types de ressources sont pris en charge à différents emplacements. Pour connaître les régions pris en charge pour un service Azure, consultez Disponibilité des produits par région. Pour obtenir les emplacements pris en charge pour un type de ressource, utilisez Azure PowerShell ou Azure CLI.

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

Balises de ressource

Vous pouvez appliquer des étiquettes à une ressource pendant le déploiement. Les étiquettes vous aident à organiser logiquement vos ressources déployées. Pour obtenir des exemples de différentes façons de spécifier les étiquettes, consultez Étiquettes de modèle ARM.

Identités managées pour les ressources

Certaines ressources prennent en charge des identités managées pour les ressources Azure. Ces ressources ont un objet Identité au niveau racine de la déclaration de ressource.

Vous pouvez utiliser des identités attribuées par le système ou attribuées par l’utilisateur.

L’exemple suivant montre comment configurer une identité attribuée par le système pour un cluster Azure Kubernetes Service.

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

L’exemple suivant montre comment configurer une identité attribuée par l’utilisateur pour une machine virtuelle.

param userAssignedIdentity string

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

Propriétés spécifiques aux ressources

Les propriétés précédentes sont génériques pour la plupart des types de ressources. Après avoir défini ces valeurs, vous devez définir les propriétés qui sont spécifiques du type de ressource que vous déployez.

Utilisez IntelliSense ou les informations de référence sur les ressources Bicep pour déterminer les propriétés disponibles et celles qui sont exigées. L’exemple suivant définit les propriétés restantes pour un compte de stockage.

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

Étapes suivantes