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éclaration

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.

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@2021-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>]
  }
}

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@2019-06-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@2019-06-01' = {
  name: storageAccountName
  ...
}

Location

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@2019-06-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@2019-06-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

Étiquettes

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 gérées pour les ressources Azure

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@2020-09-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@2020-06-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@2019-06-01' = {
  name: 'examplestorage'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
    tier: 'Standard'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Étapes suivantes