Resursgruppsdistributioner med Bicep-filer
Den här artikeln beskriver hur du anger omfång med Bicep när du distribuerar till en resursgrupp.
Resurser som stöds
De flesta resurser kan distribueras till en resursgrupp. En lista över tillgängliga resurser finns i ARM-mallreferens.
Ange omfång
Som standard är en Bicep-fil begränsad till resursgruppen. Om du uttryckligen vill ange omfånget använder du:
targetScope = 'resourceGroup'
Men det är inte nödvändigt att ange målomfånget till resursgrupp eftersom det omfånget används som standard.
Distributionskommandon
Om du vill distribuera till en resursgrupp använder du resursgruppens distributionskommandon.
För Azure CLI använder du az deployment group create. I följande exempel distribueras en mall för att skapa en resursgrupp:
az deployment group create \
--name demoRGDeployment \
--resource-group ExampleGroup \
--template-file main.bicep \
--parameters storageAccountType=Standard_GRS
Mer detaljerad information om distributionskommandon och alternativ för att distribuera ARM-mallar finns i:
- Distribuera resurser med ARM-mallar och Azure CLI
- Distribuera resurser med ARM-mallar och Azure PowerShell
- Distribuera ARM-mallar från Cloud Shell
Distributionsomfång
När du distribuerar till en resursgrupp kan du distribuera resurser till:
- målresursgruppen för distributionsåtgärden
- andra resursgrupper i samma prenumeration eller andra prenumerationer
- valfri prenumeration i klientorganisationen
- klientorganisationen för resursgruppen
En tilläggsresurs kan vara begränsad till ett mål som skiljer sig från distributionsmålet.
Den användare som distribuerar mallen måste ha åtkomst till det angivna omfånget.
Det här avsnittet visar hur du anger olika omfång. Du kan kombinera dessa olika omfång i en enda mall.
Omfång till målresursgrupp
Om du vill distribuera resurser till målresursgruppen lägger du till dessa resurser i Bicep-filen.
// resource deployed to target resource group
resource exampleResource 'Microsoft.Storage/storageAccounts@2019-06-01' = {
...
}
En exempelmall finns i Distribuera till målresursgruppen.
Omfång till en annan resursgrupp
Om du vill distribuera resurser till en resursgrupp som inte är målresursgruppen lägger du till en modul. Använd funktionen resourceGroup för att ange scope egenskapen för den modulen.
Om resursgruppen finns i en annan prenumeration anger du prenumerations-ID:t och namnet på resursgruppen. Om resursgruppen finns i samma prenumeration som den aktuella distributionen anger du bara namnet på resursgruppen. Om du inte anger någon prenumeration i resourceGroup-funktionenanvänds den aktuella prenumerationen.
I följande exempel visas en modul som är inriktad på en resursgrupp i en annan prenumeration.
param otherResourceGroup string
param otherSubscriptionID string
// module deployed to different subscription and resource group
module exampleModule 'module.bicep' = {
name: 'otherSubAndRG'
scope: resourceGroup(otherSubscriptionID, otherResourceGroup)
}
I nästa exempel visas en modul som är inriktad på en resursgrupp i samma prenumeration.
param otherResourceGroup string
// module deployed to resource group in the same subscription
module exampleModule 'module.bicep' = {
name: 'otherRG'
scope: resourceGroup(otherResourceGroup)
}
En exempelmall finns i Distribuera till flera resursgrupper.
Omfång till prenumeration
Om du vill distribuera resurser till en prenumeration lägger du till en modul. Använd prenumerationsfunktionen för att ange dess scope egenskap.
Om du vill distribuera till den aktuella prenumerationen använder du prenumerationsfunktionen utan en parameter.
// module deployed at subscription level
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription()
}
Om du vill distribuera till en annan prenumeration anger du prenumerations-ID:t som en parameter i prenumerationsfunktionen.
param otherSubscriptionID string
// module deployed at subscription level but in a different subscription
module exampleModule 'module.bicep' = {
name: 'deployToSub'
scope: subscription(otherSubscriptionID)
}
En exempelmall finns i Skapa resursgrupp.
Omfång för klientorganisation
Om du vill skapa resurser i klientorganisationen lägger du till en modul. Använd klientorganisationsfunktionen för att ange dess scope egenskap.
Den användare som distribuerar mallen måste ha nödvändig åtkomst för att distribuera på klientorganisationen.
I följande exempel ingår en modul som distribueras till klientorganisationen.
// module deployed at tenant level
module exampleModule 'module.bicep' = {
name: 'deployToTenant'
scope: tenant()
}
I stället för att använda en modul kan du ange omfånget tenant() till för vissa resurstyper. I följande exempel distribueras en hanteringsgrupp i klientorganisationen.
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
Mer information finns i Hanteringsgrupp.
Distribuera till målresursgrupp
Om du vill distribuera resurser i målresursgruppen definierar du resurserna resources i avsnittet i mallen. Följande mall skapar ett lagringskonto i resursgruppen som anges i distributionsåtgärden.
@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
Distribuera till flera resursgrupper
Du kan distribuera till fler än en resursgrupp i en enda Bicep-fil.
Anteckning
Du kan distribuera till 800 resursgrupper i en enda distribution. Den här begränsningen innebär vanligtvis att du kan distribuera till en resursgrupp som angetts för den överordnade mallen och upp till 799 resursgrupper i kapslade eller länkade distributioner. Men om den överordnade mallen bara innehåller kapslade eller länkade mallar och inte själv distribuerar några resurser kan du inkludera upp till 800 resursgrupper i kapslade eller länkade distributioner.
I följande exempel distribueras två lagringskonton. Det första lagringskontot distribueras till den resursgrupp som anges i distributionsåtgärden. Det andra lagringskontot distribueras till resursgruppen som anges i secondResourceGroup secondSubscriptionID parametrarna och :
@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
}
}
Båda modulerna använder samma Bicep-fil med namnet 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: {}
}
Skapa resursgrupp
Från en resursgruppsdistribution kan du växla till prenumerationsnivån och skapa en resursgrupp. Följande mall distribuerar ett lagringskonto till målresursgruppen och skapar en ny resursgrupp i den angivna prenumerationen.
@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
}
}
I föregående exempel används följande Bicep-fil för modulen som skapar den nya resursgruppen.
targetScope='subscription'
param resourceGroupName string
param resourceGroupLocation string
resource newRG 'Microsoft.Resources/resourceGroups@2021-01-01' = {
name: resourceGroupName
location: resourceGroupLocation
}
Nästa steg
Mer information om andra omfång finns i: