Distribuzioni di gruppi di risorse con file Bicep

Questo articolo descrive come impostare l'ambito con Bicep durante la distribuzione in un gruppo di risorse.

Risorse supportate

La maggior parte delle risorse può essere distribuita in un gruppo di risorse. Per un elenco delle risorse disponibili, vedere Informazioni di riferimento sul modello di Resource Manager.

Ambito set

Per impostazione predefinita, un file Bicep ha come ambito il gruppo di risorse. Se si vuole impostare in modo esplicito l'ambito, usare:

targetScope = 'resourceGroup'

Tuttavia, l'impostazione dell'ambito di destinazione sul gruppo di risorse non è necessaria perché tale ambito viene usato per impostazione predefinita.

Comandi di distribuzione

Per eseguire la distribuzione in un gruppo di risorse, usare i comandi di distribuzione del gruppo di risorse.

Per l'interfaccia della riga di comando di Azure usare az deployment group create. Nell'esempio seguente viene distribuito un modello per creare un gruppo di risorse. Il gruppo di risorse specificato nel --resource-group parametro è il gruppo di risorse di destinazione.

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

Per informazioni più dettagliate sui comandi di distribuzione e sulle opzioni per la distribuzione di modelli di Resource Manager, vedere:

Ambiti di distribuzione

Quando si esegue la distribuzione in un gruppo di risorse, è possibile distribuire le risorse in:

  • gruppo di risorse di destinazione per l'operazione di distribuzione
  • altri gruppi di risorse nella stessa sottoscrizione o in altre sottoscrizioni
  • qualsiasi sottoscrizione nel tenant
  • tenant per il gruppo di risorse

È possibile definire l'ambito di una risorsa di estensione in una destinazione diversa dalla destinazione di distribuzione.

L'utente che distribuisce il modello deve avere accesso all'ambito specificato.

Questa sezione illustra come specificare ambiti diversi. È possibile combinare questi ambiti diversi in un singolo modello.

Ambito per il gruppo di risorse di destinazione

Per distribuire le risorse nel gruppo di risorse di destinazione, aggiungere tali risorse al file Bicep.

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

Per un modello di esempio, vedere Distribuire nel gruppo di risorse di destinazione.

Ambito di un gruppo di risorse diverso

Per distribuire le risorse in un gruppo di risorse che non è il gruppo di risorse di destinazione, aggiungere un modulo. Usare la funzione resourceGroup per impostare la scope proprietà per tale modulo.

Se il gruppo di risorse si trova in una sottoscrizione diversa, specificare l'ID sottoscrizione e il nome del gruppo di risorse. Se il gruppo di risorse si trova nella stessa sottoscrizione della distribuzione corrente, specificare solo il nome del gruppo di risorse. Se non si specifica una sottoscrizione nella funzione resourceGroup, viene usata la sottoscrizione corrente.

Nell'esempio seguente viene illustrato un modulo destinato a un gruppo di risorse in una sottoscrizione diversa.

param otherResourceGroup string
param otherSubscriptionID string

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

Nell'esempio seguente viene illustrato un modulo destinato a un gruppo di risorse nella stessa sottoscrizione.

param otherResourceGroup string

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

Per un modello di esempio, vedere Distribuire in più gruppi di risorse.

Ambito della sottoscrizione

Per distribuire le risorse in una sottoscrizione, aggiungere un modulo. Usare la funzione di sottoscrizione per impostare la relativa scope proprietà.

Per eseguire la distribuzione nella sottoscrizione corrente, usare la funzione di sottoscrizione senza un parametro.


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

Per eseguire la distribuzione in una sottoscrizione diversa, specificare l'ID sottoscrizione come parametro nella funzione di sottoscrizione.

param otherSubscriptionID string

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

Per un modello di esempio, vedere Creare un gruppo di risorse con Bicep.

Ambito del tenant

Per creare risorse nel tenant, aggiungere un modulo. Usare la funzione tenant per impostare la relativa scope proprietà.

L'utente che distribuisce il modello deve avere l'accesso necessario per la distribuzione nel tenant.

L'esempio seguente include un modulo distribuito nel tenant.

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

Anziché usare un modulo, è possibile impostare l'ambito su tenant() per alcuni tipi di risorse. Nell'esempio seguente viene distribuito un gruppo di gestione nel 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

Per altre informazioni, vedere Gruppo di gestione.

Distribuire nel gruppo di risorse di destinazione

Per distribuire le risorse nel gruppo di risorse di destinazione, definire tali risorse nella resources sezione del modello. Il modello seguente crea un account di archiviazione nel gruppo di risorse specificato nell'operazione di distribuzione.

@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

Distribuire in più gruppi di risorse

È possibile eseguire la distribuzione in più gruppi di risorse in un singolo file Bicep.

Nota

Una singola distribuzione può interessare fino a 800 gruppi di risorse. Questa limitazione significa in genere che è possibile eseguire la distribuzione in un solo gruppo di risorse specificato per il modello padre e in un massimo di 799 gruppi di risorse nelle distribuzioni annidate o collegate. Tuttavia, se il modello padre contiene solo modelli annidati o collegati e non distribuisce risorse, è possibile includere fino a 800 gruppi di risorse nelle distribuzioni annidate o collegate.

L'esempio seguente consente di distribuire due account di archiviazione. Il primo account di archiviazione viene distribuito nel gruppo di risorse specificato nell'operazione di distribuzione. Il secondo account di archiviazione viene distribuito nel gruppo di risorse specificato nei parametri secondResourceGroup e 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
  }
}

Entrambi i moduli usano lo stesso file Bicep denominato 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: {}
}

Creare un gruppo di risorse

Per informazioni sulla creazione di gruppi di risorse, vedere Creare un gruppo di risorse con Bicep.

Passaggi successivi

Per altre informazioni sugli altri ambiti, vedere: