Share via


Bicep gebruiken om resources uit te rollen naar resource groepen

In dit artikel wordt beschreven hoe u het bereik instelt met Bicep bij de implementatie in een resourcegroep. Zie Begrijp het bereik voor meer informatie.

Ondersteunde middelen

De meeste middelen kunnen aan een resourcegroep worden toegewezen. Raadpleeg de richtlijnen voor ARM-sjablonen voor een lijst met beschikbare resources.

Bereik instellen

Een Bicep-bestand is standaard gekoppeld aan de resourcegroep. Als u het bereik expliciet wilt instellen, gebruikt u:

targetScope = 'resourceGroup'

Het instellen van het doelbereik op resourcegroep is echter niet nodig omdat dat bereik standaard wordt gebruikt.

Implementatieopdrachten

Als u wilt implementeren in een resourcegroep, gebruikt u de implementatieopdrachten van de resourcegroep.

Gebruik az deployment group create voor Azure CLI. In het volgende voorbeeld wordt een sjabloon geïmplementeerd om een resourcegroep te maken. De resourcegroep die u in de --resource-group parameter opgeeft, is de doelresourcegroep.

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

Zie voor meer informatie over implementatieopdrachten en opties voor het implementeren van ARM-sjablonen:

Implementatiebereiken

In een Bicep-bestand moeten alle resources die met het resource trefwoord zijn gedeclareerd, worden geïmplementeerd binnen hetzelfde bereik als de implementatie. Voor een implementatie van een resourcegroep betekent dit dat alle resource declaraties in het Bicep-bestand moeten worden geïmplementeerd in dezelfde resourcegroep of als een onderliggende of extensieresource van een resource in dezelfde resourcegroep als de implementatie.

Deze beperking is echter niet van toepassing op existing resources. U kunt verwijzen naar bestaande resources in een andere scope dan de implementatie.

Gebruik modules om resources op meerdere niveaus binnen één implementatie te verdelen. Als u een module implementeert, wordt een geneste implementatie geactiveerd, zodat u zich op verschillende bereiken kunt richten. De gebruiker die het bovenliggende Bicep-bestand implementeert, moet de benodigde machtigingen hebben om implementaties op die niveaus te starten.

U kunt een resource implementeren vanuit een Bicep-bestand met resource-groep-bereik op de volgende bereiken:

Bereik van de doelresourcegroep

Als u resources wilt implementeren in de doelresourcegroep, voegt u deze resources toe aan het Bicep-bestand.

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

Zie Implementeren in de doelresourcegroep voor een voorbeeldsjabloon.

Bereik tot verschillende resourcegroep

Als u resources wilt implementeren in een resourcegroep die niet de doelresourcegroep is, voegt u een module toe. Gebruik de resourceGroup functie om de scope eigenschap voor die module in te stellen.

Als de resourcegroep zich in een ander abonnement bevindt, geeft u de abonnements-id en de naam van de resourcegroep op. Als de resourcegroep zich in hetzelfde abonnement bevindt als de huidige implementatie, geeft u alleen de naam van de resourcegroep op. Als u geen abonnement in de resourceGroup functie opgeeft, wordt het huidige abonnement gebruikt.

In het volgende voorbeeld ziet u een module die is gericht op een resourcegroep in een ander 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)
}

In het volgende voorbeeld ziet u een module die is gericht op een resourcegroep in hetzelfde abonnement:

param otherResourceGroup string

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

Zie Implementeren in meerdere resourcegroepen voor een voorbeeldsjabloon.

Reikwijdte van abonnement

To deploy resources to a subscription, add a module. Use the [eigenschap abonnementsbereikfunction](bicep-functions-scope.md#subscription) to set its.

Als u wilt implementeren in het huidige abonnement, gebruikt u de subscription functie zonder parameter.


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

Als u wilt implementeren in een ander abonnement, geeft u die abonnements-id op als parameter in de subscription functie.

param otherSubscriptionID string

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

Toepassingsgebied voor huurder

Als u resources wilt maken in de tenant, voegt u een module toe. Gebruik de tenant functie om de eigenschap ervan scope in te stellen.

De gebruiker die de sjabloon implementeert, moet over de vereiste toegang beschikken om te implementeren in de tenant.

Het volgende voorbeeld bevat een module die in de tenant wordt geïmplementeerd:

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

In plaats van een module te gebruiken, kunt u het bereik tenant() voor sommige resourcetypen instellen. In het volgende voorbeeld wordt een beheergroep geïmplementeerd in de tenant:

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

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

output output string = mgName

Zie Beheergroep voor meer informatie.

Implementeren in de doelresourcegroep

Als u resources in de doelresourcegroep wilt implementeren, definieert u deze resources in de resources sectie van de sjabloon. Met de volgende sjabloon maakt u een opslagaccount in de resourcegroep die is opgegeven in de implementatiebewerking:

@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@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Implementeren in meerdere resourcegroepen

U kunt implementeren naar meer dan één resourcegroep in één Bicep-bestand.

Notitie

U kunt maximaal 800 resourcegroepen in één implementatie implementeren. Deze beperking betekent typisch dat u kunt implementeren in één resourcegroep die is gespecificeerd voor de bovenliggende sjabloon, en maximaal 799 resourcegroepen in geneste of gekoppelde implementaties. Als uw bovenliggende sjabloon echter alleen geneste of gekoppelde sjablonen bevat en geen resources zelf implementeert, kunt u maximaal 800 resourcegroepen opnemen in geneste of gekoppelde implementaties.

In het volgende voorbeeld worden twee opslagaccounts geïmplementeerd. Het eerste opslagaccount wordt geïmplementeerd in de resourcegroep die is opgegeven in de implementatiebewerking. Het tweede opslagaccount wordt geïmplementeerd in de resourcegroep die is opgegeven in de secondResourceGroup en secondSubscriptionID parameters:

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

Beide modules gebruiken hetzelfde Bicep-bestand met de naam storage.bicep:

param storageLocation string
param storageName string

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

Resourcegroep maken

Zie Resourcegroep maken met Bicep voor een voorbeeldsjabloon en meer informatie over het maken van resourcegroepen.

Volgende stappen

Zie voor meer informatie over andere onderdelen: