Déploiements de groupes de ressources avec des fichiers Bicep

Cet article explique comment définir l’étendue avec Bicep lors du déploiement sur un groupe de ressources.

Ressources prises en charge

La plupart des ressources peuvent être déployées dans un groupe de ressources. Pour obtenir la liste des ressources disponibles, consultez Référence de modèle Resource Manager.

Étendue de jeu

Par défaut, un fichier Bicep est défini sur l’étendue du groupe de ressources. Si vous souhaitez définir explicitement l’étendue, utilisez :

targetScope = 'resourceGroup'

Toutefois, il est inutile de définir l’étendue cible sur le groupe de ressources, car cette étendue est utilisée par défaut.

Commandes de déploiement

Pour un déploiement dans un groupe de ressources, utilisez les commandes de déploiement de groupe de ressources.

Pour Azure CLI, utilisez az deployment group create. L’exemple suivant déploie un modèle pour créer un groupe de ressources. Le groupe de ressources que vous spécifiez dans le paramètre --resource-group est le groupe de ressources cible.

az deployment group create \
  --name demoRGDeployment \
  --resource-group ExampleGroup \
  --template-file main.bicep \
  --parameters storageAccountType=Standard_GRS

Pour plus d’informations sur les commandes et options de déploiement de modèles Resource Manager, consultez :

Étendues de déploiement

Lors du déploiement dans un groupe de ressources, vous pouvez déployer des ressources vers :

  • le groupe de ressources cible pour l’opération de déploiement
  • d’autres groupes de ressources dans le même abonnement ou dans d’autres abonnements
  • tout abonnement dans le locataire
  • le locataire pour le groupe de ressources

Une ressource d’extension peut être étendue à une cible différente de la cible de déploiement.

L’utilisateur qui déploie le modèle doit avoir accès à l’étendue spécifiée.

Cette section montre comment spécifier des étendues différentes. Vous pouvez combiner ces différentes étendues dans un seul modèle.

Étendue au groupe de ressources cible

Pour déployer des ressources dans le groupe de ressources cible, ajoutez ces ressources au fichier Bicep.

// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  ...
}

Pour obtenir un exemple de modèle, consultez Déployer dans le groupe de ressources cible.

Définir l’étendue sur un autre groupe de ressources

Pour déployer des ressources sur un groupe de ressources qui n’est pas le groupe de ressources cible, ajoutez un module. Utilisez la fonction resourceGroup pour définir la propriété scope de ce module.

Si le groupe de ressources se trouve dans un autre abonnement, fournissez l’ID d’abonnement et le nom du groupe de ressources. Si le groupe de ressources se trouve dans le même abonnement que le déploiement en cours, fournissez uniquement le nom du groupe de ressources. Si vous ne spécifiez pas d’abonnement dans la fonction resourceGroup, l’abonnement actuel est utilisé.

L’exemple qui suit montre un module qui cible un groupe de ressources dans un autre abonnement.

param otherResourceGroup string
param otherSubscriptionID string

// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
  name: 'otherSubAndRG'
  scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}

L’exemple suivant montre un module qui cible un groupe de ressources dans le même abonnement.

param otherResourceGroup string

// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
  name: 'otherRG'
  scope: resourceGroup(otherResourceGroup)
}

Pour obtenir un exemple de modèle, consultez Déployer sur plusieurs groupes de ressources.

Étendue à l’abonnement

Pour déployer des ressources sur un abonnement, ajoutez un module. Utilisez la fonction d’abonnement pour définir sa propriété scope.

Pour effectuer un déploiement sur l’abonnement actuel, utilisez la fonction d’abonnement sans paramètre.


// module deployed at subscription level
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription()
}

Pour effectuer un déploiement vers un autre abonnement, spécifiez cet ID d’abonnement en tant que paramètre dans la fonction d’abonnement.

param otherSubscriptionID string

// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
  name: 'deployToSub'
  scope: subscription(otherSubscriptionID)
}

Pour obtenir un exemple de modèle, consultez Créer un groupe de ressources avec Bicep.

Étendue au locataire

Pour créer des ressources au niveau du locataire, ajoutez un module. Utilisez la fonction locataire pour définir sa propriété scope.

L’utilisateur qui déploie le modèle doit disposer de l’accès requis pour déployer au niveau du locataire.

L’exemple suivant inclut un module qui est déployé sur le locataire.

// module deployed at tenant level
module exampleModule 'module.bicep' = {
  name: 'deployToTenant'
  scope: tenant()
}

Au lieu d’utiliser un module, vous pouvez définir l’étendue sur tenant() pour certains types de ressources. L’exemple suivant déploie un groupe d’administration au niveau du locataire.

param mgName string = 'mg-${uniqueString(newGuid())}'

// ManagementGroup deployed at tenant
resource managementGroup 'Microsoft.Management/managementGroups@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Pour plus d’informations, consultez Groupe d’administration.

Déployer dans le groupe de ressources cible

Pour déployer des ressources dans le groupe de ressources cible, définissez ces ressources dans la section resources du modèle. Le modèle suivant crée un compte de stockage dans le groupe de ressources qui est spécifié dans l’opération de déploiement.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Déployer dans plusieurs groupes de ressources

Vous pouvez déployer plusieurs groupes de ressources dans un même fichier Bicep.

Notes

Vous pouvez déployer sur 800 groupes de ressources en un seul déploiement. En règle générale, cette limitation signifie que vous pouvez déployer sur 1 groupe de ressources spécifié pour le modèle parent et jusqu’à 799 groupes de ressources dans les déploiements imbriqués ou liés. Toutefois, si votre modèle parent contient uniquement des modèles imbriqués ou liés et ne déploie lui-même aucune ressource, vous pouvez inclure jusqu’à 800 groupes de ressources dans les déploiements imbriqués ou liés.

L’exemple suivant déploie deux comptes de stockage. Le premier compte de stockage est déployé sur le groupe de ressources spécifié lors de l’opération de déploiement. Le second compte de stockage est déployé sur le groupe de ressources spécifié dans les paramètres secondResourceGroup et secondSubscriptionID :

@maxLength(11)
param storagePrefix string

param firstStorageLocation string = resourceGroup().location

param secondResourceGroup string
param secondSubscriptionID string = ''
param secondStorageLocation string

var firstStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'
var secondStorageName = '${storagePrefix}${uniqueString(secondSubscriptionID, secondResourceGroup)}'

module firstStorageAcct 'storage.bicep' = {
  name: 'storageModule1'
  params: {
    storageLocation: firstStorageLocation
    storageName: firstStorageName
  }
}

module secondStorageAcct 'storage.bicep' = {
  name: 'storageModule2'
  scope: resourceGroup(secondSubscriptionID, secondResourceGroup)
  params: {
    storageLocation: secondStorageLocation
    storageName: secondStorageName
  }
}

Les deux modules utilisent le même fichier Bicep nommé storage.bicep.

param storageLocation string
param storageName string

resource storageAcct 'Microsoft.Storage/storageAccounts@2019-06-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

Créer un groupe de ressources

Pour des informations sur la création de groupes de ressources, consultez Créer un groupe de ressources avec Bicep.

Étapes suivantes

Pour en apprendre plus sur d’autres étendues, consultez :