Condividi tramite


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. Per altre informazioni, vedere Comprendere l'ambito.

Risorse supportate

La maggior parte delle risorse può essere distribuita in un gruppo di risorse. Per un elenco delle risorse disponibili, consultare riferimento al modello di ARM.

Ambito set

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

targetScope = 'resourceGroup'

Tuttavia, l'impostazione dell'ambito di destinazione sul gruppo di risorse non è necessaria, poiché 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. L'esempio seguente distribuisce un modello per creare un gruppo di risorse. Il gruppo di risorse specificato nel parametro --resource-group è 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 e sulle opzioni di distribuzione per la distribuzione di modelli di ARM, vedere:

Ambiti di distribuzione

In un file Bicep tutte le risorse dichiarate con la resource parola chiave devono essere distribuite nello stesso ambito della distribuzione. Per una distribuzione di un gruppo di risorse, significa che tutte le resource dichiarazioni nel file Bicep devono essere distribuite nello stesso gruppo di risorse o come risorsa figlio o estensione di una risorsa nello stesso gruppo di risorse della distribuzione.

Tuttavia, questa restrizione non si applica alle existing risorse. È possibile fare riferimento alle risorse esistenti in un ambito diverso rispetto alla distribuzione.

Per distribuire le risorse in più ambiti all'interno di una singola distribuzione, usare i moduli. La distribuzione di un modulo attiva una "distribuzione nidificata", consentendo di specificare come destinazione ambiti diversi. L'utente che distribuisce il file Bicep padre deve disporre delle autorizzazioni necessarie per avviare le distribuzioni in tali ambiti.

È possibile distribuire una risorsa dall'interno di un file Bicep con ambito gruppo di risorse negli ambiti seguenti:

Ambito del gruppo di risorse di destinazione

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

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

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

Ambito di un gruppo di risorse diverso

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

Se il gruppo di risorse si trova in una sottoscrizione diversa, specificare l'ID di 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, verrà usata quella corrente.

L'esempio seguente illustra 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 sottoscrizione per impostare la sua proprietà scope.

Per eseguire la distribuzione nella sottoscrizione corrente, usare la funzione di sottoscrizione senza specificare alcun 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 di 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 impostarne la proprietà scope.

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. L'esempio seguente distribuisce un gruppo di gestione nel 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

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 sezione resources 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@2023-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 alcuna risorsa, è 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@2023-04-01' = {
  name: storageName
  location: storageLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'Storage'
  properties: {}
}

Crea 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: