Fonctions de ressources pour Bicep

Cet article décrit les fonctions Bicep pour obtenir des valeurs de ressources.

Pour obtenir les valeurs du déploiement actuel, consultez Fonctions de valeur de déploiement.

L’espace this de noms

L’espace this de noms fournit des fonctions pour la découverte de l’état des ressources à l’exécution dans une définition de ressource. Ces fonctions permettent à votre modèle d’adapter sa configuration en fonction de l’existence déjà d’une ressource dans l’environnement.

  • this.exists(): Retourne une valeur bool indiquant si la ressource existe actuellement.
  • this.existingResource(): Retourne la représentation objet de la ressource si elle existe, ou nulle si elle n’existe pas.

Existe

this.exists()

Retourne une valeur bool indiquant si la ressource existe actuellement dans Azure. Cette fonction est évaluée lors du déploiement et est destinée à être utilisée dans les assignations de propriétés de ressources pour gérer la logique conditionnelle sans nécessiter de déclarations de ressources existantes séparées.

Espace de noms : this

Exemple

resource stg 'Microsoft.Storage/storageAccounts@2026-04-01' = {
  name: 'mystorageaccount'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'
  }
  kind:  'StorageV2'
  properties:{
    accessTier: this.exists() ? this.existingResource()!.properties.accessTier : 'Cold'
  }
}

ressource existante

this.existingResource()

Rend la représentation de l’objet de la ressource si elle existe ou null non. Cette fonction s’associe à this.exists(). Tandis que exists() renvoie un simple booléen, renvoie existingResource() l’objet ressource réel. Vous pouvez accéder en toute sécurité aux propriétés imbriquées en utilisant l’opérateur de null-pardonnant ( !) ou l’opérateur de navigation sécurisée (. ?).

Espace de noms : this

Exemple

resource stg 'Microsoft.Storage/storageAccounts@2026-04-01' = {
  name: 'mystorageaccount'
  location: 'eastus'
  sku: {
    name: 'Standard_LRS'  }
  kind:  'StorageV2'
  properties:{
    accessTier: this.existingResource().?properties.accessTier ?? 'Cold'
  }
}

extensionResourceId

extensionResourceId(resourceId, resourceType, resourceName1, [resourceName2], ...)

Renvoie l’ID de ressource d’une ressource d’extension. Une ressource d’extension est un type de ressource que vous appliquez à une autre ressource pour en ajouter des capacités.

Espace de noms : az.

Le premier argument doit être l’identifiant de ressource entièrement qualifié de la ressource à laquelle s’applique la ressource d’extension. Cette exigence est particulièrement importante lorsque vous déployez une ressource au niveau locataire à partir d’un champ de renom, comme un abonnement ou un groupe de ressources. Une valeur qui se résout à l’échelle locataire peut échouer lorsque le déploiement commence à partir d’un champ inférieur.

Vous pouvez utiliser la extensionResourceId fonction dans les fichiers Bicep, mais en général vous n'en avez pas besoin. Utilisez plutôt le nom symbolique de la ressource et accédez à la propriété id. La id propriété renvoie l’identifiant de ressource entièrement qualifié.

Le format de base de l’ID de ressource retourné par cette fonction est le suivant :

{scope}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Le segment d’étendue varie en fonction de la ressource étendue.

Lorsque vous appliquez la ressource d’extension à une ressource, l’identifiant de la ressource est retourné dans le format suivant :

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{baseResourceProviderNamespace}/{baseResourceType}/{baseResourceName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Lorsque vous appliquez la ressource d’extension à un groupe de ressources, le format est :

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Lorsque vous appliquez la ressource d’extension à un abonnement, le format est :

/subscriptions/{subscriptionId}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Lorsque vous appliquez la ressource d’extension à un groupe de gestion, le format est le suivant :

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{extensionResourceProviderNamespace}/{extensionResourceType}/{extensionResourceName}

Une définition de stratégie personnalisée déployée sur un groupe d’administration est implémentée en tant que ressource d’extension. Pour créer et affecter une stratégie, déployez le fichier Bicep suivant dans un groupe d’administration.

targetScope = 'managementGroup'

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2025-03-01' = {
  name: 'locationRestriction'
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2025-03-01' = {
  name: 'locationAssignment'
  properties: {
    policyDefinitionId: policyDefinition.id
  }
}

Les définitions de stratégie intégrées sont des ressources de niveau locataire. Pour obtenir un exemple de déploiement d’une définition de stratégie intégrée, consultez tenantResourceId.

getSecret

keyVaultName.getSecret(secretName)

Retourne un secret à partir d’un Azure Key Vault. Utilisez cette fonction pour passer un secret à un paramètre de chaîne sécurisé d’un module Bicep.

Remarque

Utilisez la az.getSecret(subscriptionId, resourceGroupName, keyVaultName, secretName, secretVersion) fonction dans .bicepparam les fichiers pour récupérer les secrets du coffre-fort clé. Pour plus d’informations, consultez getSecret.

Vous ne pouvez utiliser la fonction getSecret qu’à partir de la section params d’un module. Vous ne pouvez l’utiliser qu’avec une ressource Microsoft.KeyVault/vaults.

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

Vous obtenez une erreur si vous tentez d’utiliser cette fonction dans une autre partie du fichier Bicep. Vous obtenez également une erreur si vous utilisez cette fonction avec une interpolation de chaîne, même lorsqu'elle est utilisée dans la section params.

Utilisez la fonction uniquement avec un paramètre de module qui a le @secure() décorateur.

Le enabledForTemplateDeployment du coffre de clés doit être défini sur true. L’utilisateur qui déploie le fichier Bicep doit avoir accès au secret. Pour plus d’informations, consultez Utilisez Azure Key Vault pour passer une valeur de paramètre sécurisée pendant Bicep déploiement.

Un qualificateur d’espace de noms n’est pas nécessaire, car la fonction est utilisée avec un type de ressource.

Paramètres

Paramètre Obligatoire Catégorie Descriptif
secretName Oui ficelle Nom du secret stocké dans un coffre de clés.

Valeur retournée

Valeur du secret pour le nom du secret.

Exemple

Le fichier Bicep suivant est utilisé comme module. Il est doté d’un paramètre adminPassword défini avec l’élément décoratif @secure().

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string

resource sqlServer 'Microsoft.Sql/servers@2024-11-01-preview' = {
  ...
}

Le fichier Bicep suivant utilise le fichier Bicep précédent en tant que module. Le fichier Bicep fait référence à un coffre de clés existant et appelle la fonction getSecret pour récupérer le secret du coffre de clés, puis transmet la valeur en tant que paramètre au module.

param sqlServerName string
param adminLogin string

param subscriptionId string
param kvResourceGroup string
param kvName string

resource keyVault 'Microsoft.KeyVault/vaults@2025-05-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: keyVault.getSecret('vmAdminPassword')
  }
}

liste*

resourceName.list([apiVersion], [functionValues])

Vous pouvez appeler une fonction de liste pour n’importe quel type de ressource avec une opération qui commence par list. Voici quelques utilisations courantes : list, listKeys, listKeyValue et listSecrets.

La syntaxe de cette fonction varie en fonction du nom des opérations de liste. Les valeurs retournées varient également selon l’opération. Bicep ne prend actuellement pas en charge les achèvements et la validation pour les fonctions list*.

Avec Bicep CLI version 0.4.X ou ultérieure, vous appelez la fonction de liste à l’aide de l’opérateur accessor. Par exemple : storageAccount.listKeys().

Un qualificateur d’espace de noms n’est pas nécessaire, car la fonction est utilisée avec un type de ressource.

Paramètres

Paramètre Obligatoire Catégorie Descriptif
apiVersion Non ficelle Si vous ne fournissez pas ce paramètre, la version de l’API de la ressource est utilisée. Fournissez une version d’API personnalisée uniquement lorsque vous avez besoin que la fonction soit exécutée avec une version spécifique. Utilisez le format aaaa-mm-jj.
functionValues Non objet Objet qui contient les valeurs de la fonction. Fournissez uniquement cet objet pour les fonctions qui prennent en charge la réception d’un objet avec des valeurs de paramètre, comme listAccountSas sur un compte de stockage. Un exemple de transmission de valeurs de fonction est illustré dans cet article.

Utilisations valides

Utilisez les list fonctions dans les propriétés d’une définition de ressource. N'utilisez pas une list fonction qui expose des informations sensibles dans la outputs section d'un fichier Bicep. Les valeurs de sortie sont stockées dans l’historique de déploiement et un utilisateur malveillant pourrait les récupérer.

Lorsque vous utilisez une list fonction avec une boucle itérative, vous pouvez l’utiliser car input l’expression est assignée à la propriété de la ressource. Vous ne pouvez pas l’utiliser avec count car le nombre doit être déterminé avant que la list fonction soit résolue.

Si vous utilisez une fonction list dans une ressource qui est déployée conditionnellement, la fonction est évaluée, même si la ressource n’est pas déployée. Vous obtenez une erreur si la fonction list fait référence à une ressource qui n’existe pas. Utilisez l’opérateur d’expression conditionnelle ?: pour vous assurer que la fonction est uniquement évaluée lorsque la ressource est déployée.

La use-recognized-resource-type règle linter signale toute ressource référencée qui utilise un type de ressource non reconnu ou invalide.

Valeur retournée

L’objet retourné varie selon la fonction list que vous utilisez. Par exemple, la listKeys fonction d’un compte de stockage restitue le format suivant :

{
  "keys": [
    {
      "keyName": "key1",
      "permissions": "Full",
      "value": "{value}"
    },
    {
      "keyName": "key2",
      "permissions": "Full",
      "value": "{value}"
    }
  ]
}

D’autres fonctions list ont différents formats de retour. Pour voir le format d’une fonction, incluez-la dans la outputs section illustrée dans l’exemple de fichier Bicep.

Exemple de liste

L’exemple suivant déploie un compte de stockage, puis appelle listKeys sur ce compte de stockage. La clé est utilisée pour définir une valeur pour les scripts de déploiement.

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'dscript${uniqueString(resourceGroup().id)}'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource dScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = {
  name: 'scriptWithStorage'
  location: location
  ...
  properties: {
    azCliVersion: '2.0.80'
    storageAccountSettings: {
      storageAccountName: storageAccount.name
      storageAccountKey: storageAccount.listKeys().keys[0].value
    }
    ...
  }
}

L’exemple suivant montre une fonction list qui accepte un paramètre. Dans ce cas, la fonction est listAccountSas. Passez un objet pour l’heure d’expiration. L’heure d’expiration doit être dans le futur.

param accountSasProperties object {
  default: {
    signedServices: 'b'
    signedPermission: 'r'
    signedExpiry: '2020-08-20T11:00:00Z'
    signedResourceTypes: 's'
  }
}
...
sasToken: storageAccount.listAccountSas('2021-04-01', accountSasProperties).accountSasToken

Implémentations

Le tableau suivant montre les utilisations possibles des list* fonctions.

Type de ressource Nom de la fonction
Microsoft. Addons/supportProviders listsupportplaninfo
Microsoft. AnalysisServices/serveurs listGatewayStatus
Microsoft. ApiManagement/service/authorizationServers listSecrets
Microsoft. ApiManagement/service/passerelles listKeys
Microsoft. ApiManagement/service/identityProviders listSecrets
Microsoft. ApiManagement/service/namedValues listValue
Microsoft. ApiManagement/service/openidConnectProviders listSecrets
Microsoft. ApiManagement/service/abonnements listSecrets
Microsoft. AppConfiguration/configurationStores Listkeys
Microsoft. AppPlatform/Spring listTestKeys
Microsoft. Automation/automationAccounts listKeys
Microsoft. Batch/batchAccounts listkeys
Microsoft. BatchAI/workspaces/experiments/jobs listoutputfiles
Microsoft. BotService/botServices/canaux listChannelWithKeys
Microsoft. Cache/redis listKeys
Microsoft. CognitiveServices/comptes listKeys
Microsoft. ContainerRegistry/registrys listCredentials
Microsoft. ContainerRegistry/registrys listUsages
Microsoft. ContainerRegistry/registrys/agentpools listQueueStatus
Microsoft. ContainerRegistry/registrys/buildTasks listSourceRepositoryProperties
Microsoft. ContainerRegistry/registrys/buildTasks/steps listBuildArguments
Microsoft. ContainerRegistry/registrys/taskruns listDetails
Microsoft. ContainerRegistry/registrys/webhooks listEvents
Microsoft. ContainerRegistry/registrys/runs listLogSasUrl
Microsoft. ContainerRegistry/registrys/tasks listDetails
Microsoft. ContainerService/managedClusters listClusterAdminCredential
Microsoft. ContainerService/managedClusters listClusterMonitoringUserCredential
Microsoft. ContainerService/managedClusters listClusterUserCredential
Microsoft. ContainerService/managedClusters/accessProfiles listCredential
Microsoft. DataBox/jobs listCredentials
Microsoft. DataFactory/datafactories/gateways listauthkeys
Microsoft. DataFactory/factories/integrationruntimes listauthkeys
Microsoft. DataLakeAnalytics/accounts/storageAccounts/Containers listSasTokens
Microsoft. Partage de données/comptes/partages listSynchronizations
Microsoft. DataShare/accounts/shareSubscriptions listSourceShareSynchronizationSettings
Microsoft. DataShare/accounts/shareSubscriptions listSynchronizationDetails
Microsoft. DataShare/accounts/shareSubscriptions listSynchronizations
Microsoft. Appareils/iotHubs listkeys
Microsoft. Appareils/iotHubs/iotHubKeys listkeys
Microsoft. Appareils/provisionnementServices/clés listkeys
Microsoft. Appareils/provisionnementServices listkeys
Microsoft. DevTestLab/labs ListVhds
Microsoft. DevTestLab/labs/schedules ListApplicable
Microsoft. DevTestLab/labs/users/serviceFabrics ListApplicableSchedules
Microsoft. DevTestLab/labs/virtualMachines ListApplicableSchedules
Microsoft. DocumentDB/databaseAccounts listKeys
Microsoft. DocumentDB/databaseAccounts/notebookWorkspaces listConnectionInfo
Microsoft. DomainRegistration listDomainRecommendations
Microsoft. DomainRegistration/topLevelDomains listAgreements
Microsoft. EventGrid/domains listKeys
Microsoft. EventGrid/topics listKeys
Microsoft. EventHub/namespaces/authorizationRules listkeys
Microsoft. EventHub/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft. EventHub/namespaces/eventhubs/authorizationRules listkeys
Microsoft. ImportExport/jobs listBitLockerKeys
Microsoft. Kusto/clusters/bases de données ListPrincipals
Microsoft. LabServices/labs/users liste
Microsoft. LabServices/labs/virtualMachines liste
Microsoft. Logic/integrationAccounts/agreements listContentCallbackUrl
Microsoft. Logic/integrationAccounts/assemblys listContentCallbackUrl
Microsoft. Logic/integrationAccounts listCallbackUrl
Microsoft. Logic/integrationAccounts listKeyVaultKeys
Microsoft. Logic/integrationAccounts/maps listContentCallbackUrl
Microsoft. Logic/integrationAccounts/partners listContentCallbackUrl
Microsoft. Logic/integrationAccounts/schemas listContentCallbackUrl
Microsoft. Logique/flux de travail listCallbackUrl
Microsoft. Logique/flux de travail listSwagger
Microsoft. Logique/workflows/exécutions/actions listExpressionTraces
Microsoft. Logique/workflows/exécutions/actions/répétitions listExpressionTraces
Microsoft. Logique/workflows/déclencheurs listCallbackUrl
Microsoft. Logique/workflows/versions/déclencheurs listCallbackUrl
Microsoft. MachineLearning/webServices listkeys
Microsoft. MachineLearning/Workspaces listworkspacekeys
Microsoft. MachineLearningServices/workspaces/computes listKeys
Microsoft. MachineLearningServices/workspaces/computes listNodes
Microsoft. MachineLearningServices/espaces de travail listKeys
Microsoft. Cartes/comptes listKeys
Microsoft. Media/mediaservices/assets listContainerSas
Microsoft. Media/mediaservices/assets listStreamingLocators
Microsoft. Media/mediaservices/streamingLocators listContentKeys
Microsoft. Media/mediaservices/streamingLocators listPaths
Microsoft. Network/applicationSecurityGroups listIpConfigurations
Microsoft. NotificationHubs/Namespaces/authorizationRules listkeys
Microsoft. NotificationHubs/Namespaces/NotificationHubs/authorizationRules listkeys
Microsoft. OperationalInsights/workspaces liste
Microsoft. OperationalInsights/workspaces listKeys
Microsoft. PolicyInsights/corrections listDeployments
Microsoft. RedHatOpenShift/openShiftClusters listCredentials
Microsoft. Relay/namespaces/disasterRecoveryConfigs/authorizationRules listkeys
Microsoft. Search/searchServices listAdminKeys
Microsoft. Search/searchServices listQueryKeys
Microsoft. SignalRService/SignalR listkeys
Microsoft. Storage/storageAccounts listAccountSas
Microsoft. Storage/storageAccounts listkeys
Microsoft. Storage/storageAccounts listServiceSas
Microsoft. StorSimple/gestionnaires/appareils listFailoverSets
Microsoft. StorSimple/gestionnaires/appareils listFailoverTargets
Microsoft. StorSimple/gestionnaires listActivationKey
Microsoft. StorSimple/gestionnaires listPublicEncryptionKey
Microsoft. Synapse/workspaces/integrationRuntimes listauthkeys
Microsoft. Web/connectionGateways ListStatus
microsoft.web/connections listconsentlinks
Microsoft. Web/customApis listWsdlInterfaces
microsoft.web/locations listwsdlinterfaces
microsoft.web/apimanagementaccounts/apis/connections listconnectionkeys
microsoft.web/apimanagementaccounts/apis/connections listsecrets
microsoft.web/sites/backups liste
Microsoft. Web/sites/config liste
microsoft.web/sites/functions listkeys
microsoft.web/sites/functions listsecrets
microsoft.web/sites/hybridconnectionnamespaces/relays listkeys
microsoft.web/sites listsyncfunctiontriggerstatus
microsoft.web/sites/slots/functions listsecrets
microsoft.web/sites/slots/backups liste
Microsoft. Web/sites/emplacements/configuration liste
microsoft.web/sites/slots/functions listsecrets

Pour déterminer quels types de ressources ont une opération de liste, utilisez les options suivantes :

  • Affichez les opérations d’API REST pour un fournisseur de ressources et recherchez les opérations de liste. Par exemple, les comptes de stockage présentent l’opération listKeys.

  • Utilisez la cmdlet PowerShell Get-​AzProvider​Operation. L’exemple ci-dessous obtient toutes les opérations de liste pour les comptes de stockage :

    Get-AzProviderOperation -OperationSearchString "Microsoft.Storage/*" | where {$_.Operation -like "*list*"} | FT Operation
    
  • Utilisez la commande Azure CLI suivante pour filtrer uniquement les opérations de liste :

    az provider operation show --namespace Microsoft.Storage --query "resourceTypes[?name=='storageAccounts'].operations[].name | [?contains(@, 'list')]"
    

managementGroupResourceId

managementGroupResourceId(resourceType, resourceName1, [resourceName2], ...)

Retourne l’identificateur unique d’une ressource déployée au niveau du groupe d’administration.

Espace de noms : az.

La managementGroupResourceId fonction est disponible dans les fichiers Bicep, mais en général vous n'en avez pas besoin. Utilisez plutôt le nom symbolique de la ressource et accédez à la propriété id.

L'identificateur est retourné au format suivant :

/providers/Microsoft.Management/managementGroups/{managementGroupName}/providers/{resourceType}/{resourceName}

Notes

Utilisez cette fonction pour obtenir l’identifiant de ressource des ressources déployées dans le groupe de gestion plutôt que dans un groupe de ressources. L’ID retourné diffère de la valeur retournée par la fonction resourceId en cela qu’il n’inclut pas d’ID d’abonnement et de valeur de groupe de ressources.

managementGroupResourceId

Le modèle suivant crée et attribue une définition de stratégie. Il utilise la fonction managementGroupResourceId pour récupérer l’ID de ressource pour la définition de stratégie.

targetScope = 'managementGroup'

@description('Target Management Group')
param targetMG string

@description('An array of the allowed locations, all other locations will be denied by the created policy.')
param allowedLocations array = [
  'australiaeast'
  'australiasoutheast'
  'australiacentral'
]

var mgScope = tenantResourceId('Microsoft.Management/managementGroups', targetMG)
var policyDefinitionName = 'LocationRestriction'

resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2025-03-01' = {
  name: policyDefinitionName
  properties: {
    policyType: 'Custom'
    mode: 'All'
    parameters: {}
    policyRule: {
      if: {
        not: {
          field: 'location'
          in: allowedLocations
        }
      }
      then: {
        effect: 'deny'
      }
    }
  }
}

resource location_lock 'Microsoft.Authorization/policyAssignments@2025-03-01' = {
  name: 'location-lock'
  properties: {
    scope: mgScope
    policyDefinitionId: managementGroupResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionName)
  }
  dependsOn: [
    policyDefinition
  ]
}

pickZones

pickZones(providerNamespace, resourceType, location, [numberOfZones], [offset])

Détermine si un type de ressource prend en charge les zones pour une région. Cette fonction prend uniquement en charge les ressources zonales. Les services de redondance interzone retournent un tableau vide. Pour plus d’informations, consultez Azure services qui prennent en charge les zones de disponibilité.

Espace de noms : az.

Paramètres

Paramètre Obligatoire Catégorie Descriptif
espacedenoms_fournisseur Oui ficelle Espace de noms du fournisseur du type de ressource pour lequel la prise en charge des zones doit être vérifiée.
type de ressource Oui ficelle Type de ressource pour lequel la prise en charge des zones doit être vérifiée.
lieu Oui ficelle Région pour laquelle la prise en charge des zones doit être vérifiée.
numberOfZones Non entier Nombre de zones logiques à retourner. La valeur par défaut est 1. Le nombre doit être un entier positif compris entre 1 et 3. Utilisez 1 pour les ressources à une seule zone. Pour les ressources multizones, la valeur doit être inférieure ou égale au nombre de zones prises en charge.
décalage Non entier Décalage par rapport à la zone logique de départ. La fonction retourne une erreur si le décalage plus le nombre de zones (numberOfZones) dépasse le nombre de zones prises en charge.

Valeur retournée

Tableau avec les zones prises en charge. Lorsque vous utilisez les valeurs par défaut pour offset et numberOfZones, un type de ressource et une région qui supportent les zones retournent le tableau suivant :

[
  "1"
]

Lorsque vous définissez le numberOfZones paramètre à 3, il revient :

[
  "1",
  "2",
  "3"
]

Lorsque le type de ressource ou la région ne supporte pas les zones, la fonction renvoie un tableau vide.

[
]

Notes

Azure Zones de disponibilité se divisent en deux catégories : zonales et zonales redondantes. Utilisez la pickZones fonction pour renvoyer une zone de disponibilité pour une ressource zonale. Pour les services redondants interzone (ZRS), la fonction retourne un tableau vide. Les ressources zonales ont généralement une propriété zones au niveau supérieur de la définition de ressource. Pour déterminer la catégorie de prise en charge des zones de disponibilité, consultez Azure services qui prennent en charge les zones de disponibilité.

Pour déterminer si une région ou un emplacement Azure donné prend en charge les zones de disponibilité, appelez la fonction pickZones avec un type de ressource zonal, tel que Microsoft.Network/publicIPAddresses. Si la réponse n’est pas vide, la région prend en charge les zones de disponibilité.

Exemple de pickZones

Le fichier Bicep suivant affiche trois résultats pour utiliser la fonction pickZones.

output supported array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus2')
output notSupportedRegion array = pickZones('Microsoft.Compute', 'virtualMachines', 'westus')
output notSupportedType array = pickZones('Microsoft.Cdn', 'profiles', 'westus2')

La sortie des exemples précédents retourne trois tableaux.

Nom Catégorie Valeur
soutenu tableau [ "1" ]
notSupportedRegion tableau []
notSupportedType tableau []

Utilisez la réponse de pickZones pour décider s’il faut fournir un null pour les zones ou attribuer des machines virtuelles à différentes zones.

fournisseurs

La fonction des fournisseurs est dépréciée dans Bicep. Ne l’utilisez pas. Si vous avez utilisé cette fonction pour obtenir une version API pour le fournisseur de ressources, fournissez une version spécifique de l’API dans votre fichier Bicep. L’utilisation d’une version d’API retournée dynamiquement peut rompre votre modèle si les propriétés changent d’une version à l’autre.

L’opération de fournisseurs est toujours disponible via l’API REST. Vous pouvez l’utiliser en dehors d’un fichier Bicep pour obtenir des informations sur un fournisseur de ressources.

Espace de noms : az.

référence

reference(resourceName or resourceIdentifier, [apiVersion], ['Full'])

Retourne un objet qui représente l’état d’exécution d’une ressource. La sortie et le comportement de la reference fonction dépendent fortement de la manière dont chaque fournisseur de ressources (RP) implémente ses réponses PUT et GET.

Espace de noms : az.

Les fichiers Bicep donnent accès à la fonction de référence, même si en général ce n'est pas nécessaire. Utilisez plutôt le nom symbolique de la ressource. Vous ne pouvez utiliser la fonction de référence qu’à l’intérieur de l’objet properties d’une ressource. Vous ne pouvez pas l’utiliser pour des propriétés de haut niveau comme name ou location. La même règle s’applique généralement aux références utilisant le nom symbolique. Cependant, pour des propriétés telles que name, vous pouvez générer un modèle sans utiliser la fonction de référence. Vous connaissez assez le nom de la ressource pour l’émettre directement. Ce sont des propriétés au moment de la compilation. Bicep validation peut identifier toute utilisation incorrecte du nom symbolique.

L’exemple suivant déploie un compte de stockage. Les deux premières sorties vous offrent les mêmes résultats.

param storageAccountName string = uniqueString(resourceGroup().id)
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageObjectSymbolic object = storageAccount.properties
output storageObjectReference object = reference('storageAccount')
output storageName string = storageAccount.name
output storageLocation string = storageAccount.location

Pour obtenir une propriété d’une ressource existante que vous n’avez pas déployée dans le modèle, utilisez le existing mot-clé :

param storageAccountName string

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

// use later in template as often as needed
output blobAddress string = storageAccount.properties.primaryEndpoints.blob

Pour référencer une ressource imbriquée dans une ressource parente, utilisez l’accessoire imbriqué (::). Vous n’utilisez cette syntaxe que lorsque vous accédez à la ressource imbriquée en dehors de la ressource parente.

vNet1::subnet1.properties.addressPrefix

Si vous tentez de référencer une ressource qui n’existe pas, vous recevez l’erreur NotFound et votre déploiement échoue. La use-recognized-resource-type règle linter signale toute ressource référencée qui utilise un type de ressource non reconnu ou invalide.

identifiant de ressource

resourceId([subscriptionId], [resourceGroupName], resourceType, resourceName1, [resourceName2], ...)

Retourne l'identificateur unique d'une ressource.

Espace de noms : az.

La resourceId fonction est disponible dans les fichiers Bicep, mais en général vous n'en avez pas besoin. Utilisez plutôt le nom symbolique de la ressource et accédez à la propriété id.

Utilisez cette fonction lorsque le nom de la ressource est ambigu ou non provisionné dans le même fichier Bicep. Le format de l’identificateur retourné varie selon que le déploiement se produit à l’échelle d’un groupe de ressources, d’un abonnement, d’un groupe d’administration ou d’un locataire.

Par exemple :

param storageAccountName string
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountName
  location: location
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output storageID string = storageAccount.id

Pour obtenir l'ID de ressource d'une ressource qui n'est pas déployée dans le fichier Bicep, utilisez le mot clé existant.

param storageAccountName string

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

output storageID string = storageAccount.id

Pour obtenir plus d'informations, consultez la fonction resourceId du modèle JSON.

définitionsDeRôle

roleDefinitions(roleName)

Retourne des informations sur la définition de rôle spécifiée, y compris id et roleDefinitionId. Il s'agit d'un helper basé sur un nom pour Azure attributions de rôles RBAC. Au lieu de vous demander de coder en dur le GUID d’une définition de rôle personnalisée ou intégrée (comme Contributeur, Lecteur, etc.), cela vous permet de fournir le nom d’affichage du rôle personnalisé ou intégré, et la fonction résout les informations de définition correspondante du rôle au moment du déploiement.

Espace de noms : az.

Paramètres

Paramètre Obligatoire Catégorie Descriptif
roleName Oui ficelle Nom complet de la définition de rôle.

Valeur retournée

Objet représentant la définition de rôle, y compris id et roleDefinitionId.

Exemples

Le code Bicep suivant crée une attribution déterministe de rôle Azure RBAC qui accorde à un principal spécifié le rôle intégré de Storage Blob Data Reader dans le champ de déploiement en résolvant la définition du rôle par nom au moment du déploiement.

@description('Specifies the role definition ID used in the role assignment.')
param roleDefinitionName string = 'Storage Blob Data Reader'

@description('Specifies the principal ID assigned to the role.')
param principalId string

var roleAssignmentName= guid(principalId, roleDefinitionName, resourceGroup().id)
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: roleAssignmentName
  properties: {
    roleDefinitionId: roleDefinitions(roleDefinitionName).id
    principalId: principalId
  }
}

Pour obtenir plus d'informations, consultez la fonction resourceId du modèle JSON.

subscriptionResourceId

subscriptionResourceId([subscriptionId], resourceType, resourceName1, [resourceName2], ...)

Retourne l’identificateur unique d’une ressource déployée au niveau de l’abonnement.

Espace de noms : az.

La fonction subscriptionResourceId est disponible dans les fichiers Bicep, mais en général, vous n'en avez pas besoin. Utilisez plutôt le nom symbolique de la ressource et accédez à la propriété id.

L'identificateur est retourné au format suivant :

/subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Notes

Utilisez cette fonction pour obtenir l’identifiant de ressource des ressources déployées sur l’abonnement plutôt que sur un groupe de ressources. L’ID retourné diffère de la valeur retournée par la fonction resourceId en ce qu’il n’inclut pas de valeur de groupe de ressources.

subscriptionResourceId , exemple

Le fichier Bicep suivant affecte un rôle intégré. Vous pouvez le déployer soit sur un groupe de ressources, soit sur un abonnement. Il utilise la fonction subscriptionResourceId pour récupérer l’ID de ressource pour les rôles intégrés.

@description('Principal Id')
param principalId string

@allowed([
  'Owner'
  'Contributor'
  'Reader'
])
@description('Built-in role to assign')
param builtInRoleType string

var roleDefinitionId = {
  Owner: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', '8e3af657-a8ff-443c-a75c-2fe8c4bcb635')
  }
  Contributor: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
  }
  Reader: {
    id: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'acdd72a7-3385-48ef-bd42-f606fba81ae7')
  }
}

resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(resourceGroup().id, principalId, roleDefinitionId[builtInRoleType].id)
  properties: {
    roleDefinitionId: roleDefinitionId[builtInRoleType].id
    principalId: principalId
  }
}

tenantResourceId

tenantResourceId(resourceType, resourceName1, [resourceName2], ...)

Retourne l’identificateur unique d’une ressource déployée au niveau du tenant.

Espace de noms : az.

La fonction tenantResourceId est disponible dans les fichiers Bicep, mais en général, vous n'en avez pas besoin. Utilisez plutôt le nom symbolique de la ressource et accédez à la propriété id.

L'identificateur est retourné au format suivant :

/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

Les définitions de stratégie intégrées sont des ressources de niveau locataire. Pour déployer une attribution de stratégie qui fait référence à une définition de stratégie intégrée, utilisez la fonction tenantResourceId.

@description('Specifies the ID of the policy definition or policy set definition being assigned.')
param policyDefinitionID string = '0a914e76-4921-4c19-b460-a2d36003525a'

@description('Specifies the name of the policy assignment, can be used defined or an idempotent name as the defaultValue provides.')
param policyAssignmentName string = guid(policyDefinitionID, resourceGroup().name)

resource policyAssignment 'Microsoft.Authorization/policyAssignments@2025-03-01' = {
  name: policyAssignmentName
  properties: {
    scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
    policyDefinitionId: tenantResourceId('Microsoft.Authorization/policyDefinitions', policyDefinitionID)
  }
}

toLogicalZone

toLogicalZone(subscriptionId, location, physicalZone)

Retourne la zone de disponibilité logique (par exemple, 1, 2, ou 3) qui correspond à une zone de disponibilité physique pour un abonnement spécifié dans une région Azure donnée.

Espace de noms : az

Paramètres

Paramètre Obligatoire Catégorie Descriptif
ID d'abonnement Oui ficelle L’identifiant de l’abonnement Azure, tel que 12345678-1234-1234-1234-1234567890ab.
lieu Oui ficelle La région Azure qui prend en charge les zones de disponibilité, telles que westus2.
physicalZone Oui ficelle Identificateur de zone de disponibilité physique (par exemple, un identificateur spécifique au centre de données comme westus2-az1).

Valeur retournée

Chaîne représentant la zone de disponibilité logique (par exemple, 1, 2ou 3) qui correspond à la zone physique spécifiée dans la région et l’abonnement donnés. Si la zone physique est invalide ou non prise en charge, la fonction retourne une chaîne vide ('').

Notes

  • La toLogicalZone fonction récupère le mappage de zone logique en fonction de la configuration de zone de l’abonnement dans la région spécifiée.
  • Les zones logiques sont des identificateurs standardisés (par exemple, 1, 2, 3) utilisés dans les configurations de ressources pour garantir des affectations de zones cohérentes entre les services Azure.
  • Les identifiants de zone physiques sont spécifiques à chaque région et peuvent varier selon les abonnements. Utilisez la toPhysicalZone fonction pour inverser ce mappage.
  • La fonction exige que la région prenne en charge les zones de disponibilité. Pour obtenir la liste des régions prises en charge, consultez Azure services qui prennent en charge les zones de disponibilité.
  • Si la zone physique n’existe pas ou n’est pas mappée pour l’abonnement, la fonction retourne une chaîne vide.
  • Cette fonction est utile pour aligner les déploiements de zones physiques avec des configurations de zone logique dans des modèles, en particulier pour les scénarios inter-abonnements ou multirégions.

Exemples

L’exemple suivant récupère la zone logique d’une zone physique dans usa Ouest 2 pour un abonnement spécifique :

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZone string = 'westus2-az1'

output logicalZone string = toLogicalZone(subscriptionId, 'westus2', physicalZone)

Sortie attendue :

Nom Catégorie Valeur
logicalZone Chaîne 1

L’exemple suivant utilise toLogicalZone pour configurer une machine virtuelle avec la zone logique appropriée :

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZone string = 'westus2-az1'
param location string = 'westus2'

var logicalZone = toLogicalZone(subscriptionId, location, physicalZone)

resource vm 'Microsoft.Compute/virtualMachines@2025-04-01' = {
  name: 'myVM'
  location: location
  zones: logicalZone != '' ? [logicalZone] : []
  properties: {
    // VM properties
  }
}

output logicalZone string = logicalZone

Sortie attendue :

Nom Catégorie Valeur
logicalZone Chaîne 1

toLogicalZones

toLogicalZones(subscriptionId, location, physicalZones)

Retourne les zones de disponibilité logiques (par exemple, 1, 2 ou 3) correspondant aux zones de disponibilité physiques d’un abonnement spécifié dans une région Azure donnée. Pour convertir une seule zone physique, utilisez la toLogicalZone fonction.

Espace de noms : az

Paramètres

Paramètre Obligatoire Catégorie Descriptif
ID d'abonnement Oui ficelle L’identifiant de l’abonnement Azure, tel que 12345678-1234-1234-1234-1234567890ab.
lieu Oui ficelle La région Azure qui prend en charge les zones de disponibilité, telles que westus2.
physicalZones Oui tableau Tableau de noms de zones physiques à convertir en zones logiques (par exemple, un identificateur spécifique au centre de données tel que westus2-az1, westus2-az2...).

Valeur retournée

Tableau de noms de zones logiques correspondant aux zones physiques fournies (par exemple, 1, ou 23). Si une zone physique est invalide ou non prise en charge, la fonction retourne une chaîne vide ('').

Notes

La fonction toLogicalZones mappe les noms de zones physiques à leurs équivalents de zone logique pour un abonnement et une région Azure spécifiés. Cette correspondance est utile pour configurer ou interroger des ressources en fonction des zones logiques au sein d’une région Azure. La fonction nécessite un ID d’abonnement valide, un emplacement de Azure pris en charge et un tableau de noms de zones physiques. Si une zone physique est invalide ou non disponible à l’emplacement spécifié, la fonction peut retourner une chaîne vide pour cette zone ou générer une erreur, selon le contexte.

Exemples

L’exemple suivant récupère les zones logiques d’une liste de zones physiques dans usa Ouest 2 pour un abonnement spécifique :

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param physicalZones array = ['westus2-az1', 'westus2-az2', 'westus2-az3']

output logicalZones array = toLogicalZones(subscriptionId, 'westus2', physicalZones)

Sortie attendue :

Nom Catégorie Valeur
logicalZone tableau ["1","2","3"]

toPhysicalZone

toPhysicalZone(subscriptionId, location, logicalZone)

Retourne l’identifiant de zone de disponibilité physique, tel qu’un identifiant spécifique au centre de données comme westus2-az1, qui correspond à une zone de disponibilité logique pour un abonnement spécifié dans une région Azure donnée.

Espace de noms : az

Paramètres

Paramètre Obligatoire Catégorie Descriptif
ID d'abonnement Oui ficelle L’identifiant de l’abonnement Azure, tel que 12345678-1234-1234-1234-1234567890ab.
lieu Oui ficelle La région Azure qui prend en charge les zones de disponibilité, telles que westus2.
logicalZone Oui ficelle La zone de disponibilité logique, telle que 1, 2, ou 3.

Valeur retournée

Une chaîne représentant l’identifiant de zone de disponibilité physique, tel que westus2-az1, qui correspond à la zone logique spécifiée dans la région et l’abonnement donnés. Si la zone logique est invalide ou non prise en charge, la fonction retourne une chaîne vide ('').

Notes

  • La toPhysicalZone fonction récupère le mappage de zone physique en fonction de la configuration de zone de l’abonnement dans la région spécifiée.
  • Les zones physiques sont des identifiants spécifiques aux centres de données qui peuvent varier entre les abonnements, tandis que les zones logiques, telles que 1, 2, 3, sont standardisées pour la configuration des ressources.
  • Utilisez la toLogicalZone fonction pour inverser cette correspondance et convertir une zone physique en son équivalent logique.
  • La fonction exige que la région prenne en charge les zones de disponibilité. Pour obtenir la liste des régions prises en charge, consultez Azure services qui prennent en charge les zones de disponibilité.
  • Si la zone logique n’existe pas ou n’est pas mappée pour l’abonnement, la fonction retourne une chaîne vide.
  • Cette fonction est utile pour les scénarios nécessitant des identifiants de zone physiques, tels que la journalisation, l’audit ou l’alignement des zones croisées dans les déploiements multirégions.

Exemples

L’exemple suivant récupère la zone physique d’une zone logique dans USA Ouest 2 pour un abonnement spécifique :

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'

output physicalZone string = toPhysicalZone(subscriptionId, 'westus2', logicalZone)

Sortie attendue (en supposant que la zone 1 logique est mappée à westus2-az1) :

Nom Catégorie Valeur
physicalZone Chaîne westus2-az1

L’exemple suivant utilise toPhysicalZone pour journaliser la zone physique d’un déploiement de machine virtuelle :

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZone string = '1'
param location string = 'westus2'

var physicalZone = toPhysicalZone(subscriptionId, location, logicalZone)

resource vm 'Microsoft.Compute/virtualMachines@2025-04-01' = {
  name: 'myVM'
  location: location
  zones: [logicalZone]
  properties: {
    // VM properties
  }
}

output physicalZone string = physicalZone

Sortie attendue :

Nom Catégorie Valeur
physicalZone Chaîne westus2-az1

toPhysicalZones

toPhysicalZones(subscriptionId, location, logicalZones)

Retourne les identificateurs de zone de disponibilité physique (par exemple, un identificateur spécifique au centre de données tel que westus2-az1) correspondant aux zones de disponibilité logiques d’un abonnement spécifié dans une région Azure donnée. Pour convertir une zone logique unique, utilisez la toPhysicalZone fonction.

Espace de noms : az

Paramètres

Paramètre Obligatoire Catégorie Descriptif
ID d'abonnement Oui ficelle L’identifiant de l’abonnement Azure, tel que 12345678-1234-1234-1234-1234567890ab.
lieu Oui ficelle La région Azure qui prend en charge les zones de disponibilité, telles que westus2.
logicalZone Oui chaîne de caractères[] Zones de disponibilité logiques (par exemple, 1, ou 23) à convertir en zones physiques.

Valeur retournée

Tableau de noms de zones physiques (par exemple, westus2-az1, westus2-az2 ) correspondant aux zones logiques fournies. Si une zone logique est invalide ou non prise en charge, la fonction retourne une chaîne vide ('').

Notes

La fonction toPhysicalZones mappe les noms de zones logiques à leurs équivalents de zone physique pour un abonnement et une région Azure spécifiés. Cette cartographie est utile pour déployer ou configurer des ressources dans des zones physiques spécifiques au sein d’une région Azure. La fonction nécessite un ID d’abonnement valide, un emplacement de Azure pris en charge et un tableau de noms de zones logiques. Si une zone logique est invalide ou indisponible à l’emplacement spécifié, la fonction peut retourner une chaîne vide pour cette zone ou générer une erreur, selon le contexte.

Exemples

L’exemple suivant récupère les zones physiques d’une liste de zones logiques dans usa Ouest 2 pour un abonnement spécifique :

param subscriptionId string = '12345678-1234-1234-1234-1234567890ab'
param logicalZones array = ['1', '2', '3']

output physicalZones array = toPhysicalZones(subscriptionId, 'westus2', logicalZones)

Sortie attendue (en supposant que la zone 1 logique est mappée à westus2-az1, les mappages de zones 1 logiques vers westus2-az1et les mappages de zone 3 logiques à westus2-az3) :

Nom Catégorie Valeur
physicalZone tableau ["westus2-az1 »,"westus2-az2 »,"westus2-az3"]

Étapes suivantes