Resourcegroepimplementaties met Bicep-bestanden

In dit artikel wordt beschreven hoe u een bereik in kunt stellen met Bicep wanneer u implementeert in een resourcegroep.

Ondersteunde resources

De meeste resources kunnen worden geïmplementeerd in een resourcegroep. Zie ARM-sjabloonverwijzing voor een lijst met beschikbare resources.

Bereik instellen

Standaard is het bereik van een Bicep-bestand ingesteld op de resourcegroep. Als u het bereik expliciet wilt instellen, gebruikt u:

targetScope = 'resourceGroup'

Het is echter niet nodig om het doelbereik in te stellen op resourcegroep, omdat dat bereik standaard wordt gebruikt.

Implementatieopdrachten

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

Gebruik az deployment group create voorAzure CLI. In het volgende voorbeeld wordt een sjabloon geïmplementeerd om een resourcegroep te maken:

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

Wanneer u implementeert in een resourcegroep, kunt u resources implementeren naar:

  • de doelresourcegroep voor de implementatiebewerking
  • andere resourcegroepen in hetzelfde abonnement of andere abonnementen
  • elk abonnement in de tenant
  • de tenant voor de resourcegroep

Een extensieresource kan worden gericht op een ander doel dan het implementatiedoel.

De gebruiker die de sjabloon implementeert, moet toegang hebben tot het opgegeven bereik.

In deze sectie ziet u hoe u verschillende scopes opgeeft. U kunt deze verschillende scopes combineren in één sjabloon.

Bereik naar 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@2019-06-01' = {
  ...
}

Zie Implementeren naar doelresourcegroep voor een voorbeeldsjabloon.

Bereik naar een andere resourcegroep

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

Als de resourcegroep deel uit maakt van een ander abonnement, geeft u de abonnements-id en de naam van de resourcegroep op. Als de resourcegroep zich in hetzelfde abonnement als de huidige implementatie, geeft u alleen de naam van de resourcegroep. Als u geen abonnement opgeeft in de functie resourceGroup,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 naar meerdere resourcegroepen voor een voorbeeldsjabloon.

Bereik naar abonnement

Als u resources wilt implementeren in een abonnement, voegt u een module toe. Gebruik de abonnementsfunctie om de eigenschap ervan in scope te stellen.

Als u wilt implementeren naar het huidige abonnement, gebruikt u de abonnementsfunctie zonder een parameter.


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

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

param otherSubscriptionID string

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

Zie Resourcegroep maken voor een voorbeeldsjabloon.

Bereik naar tenant

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

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

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

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

In plaats van een module te gebruiken, kunt u het bereik voor tenant() sommige resourcetypen instellen op . 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@2020-05-01' = {
  scope: tenant()
  name: mgName
  properties: {}
}

output output string = mgName

Zie Beheergroep voor meer informatie.

Implementeren naar doelresourcegroep

Als u resources in de doelresourcegroep wilt implementeren, definieert u deze resources in resources de sectie van de sjabloon. Met de volgende sjabloon maakt u een opslagaccount in de resourcegroep dat 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@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Implementeren naar meerdere resourcegroepen

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

Notitie

U kunt in één implementatie implementeren naar 800 resourcegroepen. Deze beperking betekent doorgaans dat u kunt implementeren naar één resourcegroep die is opgegeven 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 zelf geen resources 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 secondSubscriptionID parameters en :

@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@2019-06-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

Een resourcegroep maken

Vanuit een resourcegroepimplementatie kunt u overschakelen naar het niveau van een abonnement en een resourcegroep maken. Met de volgende sjabloon wordt een opslagaccount geïmplementeerd in de doelresourcegroep en wordt een nieuwe resourcegroep gemaakt in het opgegeven abonnement.

@maxLength(11)
param storagePrefix string

param firstStorageLocation string = resourceGroup().location

param secondResourceGroup string
param secondSubscriptionID string = ''
param secondLocation string

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

// resource deployed to target resource group
module firstStorageAcct 'storage2.bicep' = {
  name: 'storageModule1'
  params: {
    storageLocation: firstStorageLocation
    storageName: firstStorageName
  }
}

// module deployed to subscription
module newRG 'resourceGroup.bicep' = {
  name: 'newResourceGroup'
  scope: subscription(secondSubscriptionID)
  params: {
    resourceGroupName: secondResourceGroup
    resourceGroupLocation: secondLocation
  }
}

In het voorgaande voorbeeld wordt het volgende Bicep-bestand gebruikt voor de module die de nieuwe resourcegroep maakt.

targetScope='subscription'

param resourceGroupName string
param resourceGroupLocation string

resource newRG 'Microsoft.Resources/resourceGroups@2021-01-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
}

Volgende stappen

Zie voor meer informatie over andere scopes: