Guida introduttiva: Creare più istanze di risorse in Bicep

Informazioni su come usare sintassi diverse for per creare più istanze di risorse in Bicep. Anche se questo articolo illustra solo la creazione di più istanze di risorse, è possibile usare gli stessi metodi per definire copie di modulo, variabile, proprietà o output. Per altre informazioni, vedere Cicli Bicep.

Questo articolo contiene gli argomenti seguenti:

Prerequisiti

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Per configurare l'ambiente per lo sviluppo Bicep, vedere Installare gli strumenti Bicep. Dopo aver completato questi passaggi, si avranno Visual Studio Code e l'estensione Bicep. È anche disponibile l'interfaccia della riga di comando di Azure più recente o il modulo di Azure PowerShell più recente.

Creare una singola istanza

In questa sezione si definisce un file Bicep per la creazione di un account di archiviazione e quindi si distribuisce il file Bicep. Le sezioni successive forniscono gli esempi Bicep per diverse for sintassi. È possibile usare lo stesso metodo di distribuzione per distribuire ed sperimentare tali esempi. Se la distribuzione ha esito negativo, è probabile che si tratti di una delle due cause seguenti:

  • Il nome dell'account di archiviazione è troppo lungo. I nomi degli account di archiviazione devono avere una lunghezza compresa tra 3 e 24 caratteri e possono contenere solo numeri e lettere minuscole.
  • Il nome dell'account di archiviazione non è univoco. Nome dell'account di archiviazione deve essere univoco all'interno di Azure.

Il file Bicep seguente definisce un account di archiviazione:

param rgLocation string = resourceGroup().location

resource createStorage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Salvare il file Bicep in locale e quindi usare l'interfaccia della riga di comando di Azure o Azure PowerShell per distribuire il file Bicep:

resourceGroupName = "{provide-a-resource-group-name}"
templateFile="{provide-the-path-to-the-bicep-file}"

az group create --name $resourceGroupName --location eastus

az deployment group create --resource-group $resourceGroupName --template-file $templateFile

Usare l'indice integer

Un ciclo for con un indice viene usato nell'esempio seguente per creare due account di archiviazione:

param rgLocation string = resourceGroup().location
param storageCount int = 2

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

output names array = [for i in range(0,storageCount) : {
  name: createStorages[i].name
} ]

Il numero di indice viene usato come parte del nome dell'account di archiviazione. Dopo aver distribuito il file Bicep, si ottengono due account di archiviazione simili a:

Usare l'indice integer con 0 come numero iniziale

All'interno di range(), il primo numero è il numero iniziale e il secondo è il numero di volte in cui verrà eseguito il ciclo. Pertanto, se si imposta l'intervallo (3,2), si otterranno anche due account di archiviazione:

Usare l'indice integer con 3 come numero iniziale

L'output dell'esempio precedente mostra come fare riferimento alle risorse create in un ciclo. L'output è simile a:

"outputs": {
  "names": {
    "type": "Array",
    "value": [
      {
        "name": "0storage52iyjssggmvue"
      },
      {
        "name": "1storage52iyjssggmvue"
      }
    ]
  }
},

Usare gli elementi della matrice

È possibile eseguire un ciclo in una matrice. L'esempio seguente mostra una matrice di stringhe.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for name in storageNames: {
  name: '${name}str${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Il ciclo usa tutte le stringhe nella matrice come parte dei nomi degli account di archiviazione. In questo caso, crea due account di archiviazione:

Usare una matrice di stringhe

È anche possibile scorrere una matrice di oggetti. Il ciclo non solo personalizza i nomi degli account di archiviazione, ma configura anche gli SKU.

param rgLocation string = resourceGroup().location
param storages array = [
  {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for storage in storages: {
  name: '${storage.name}obj${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: storage.skuName
  }
  kind: 'StorageV2'
}]

Il ciclo crea due account di archiviazione. Lo SKU dell'account di archiviazione con il nome che inizia con fabrikam è Premium_LRS.

Usare una matrice di stringhe

Usare matrice e indice

Nello stesso caso, è possibile combinare un ciclo di matrice con un ciclo di indice. Nell'esempio seguente viene illustrato come usare la matrice e il numero di indice per la convenzione di denominazione.

param rgLocation string = resourceGroup().location
param storageNames array = [
  'contoso'
  'fabrikam'
]

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for (name, i) in storageNames: {
  name: '${i}${name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Dopo aver distribuito l'esempio precedente, si creano due account di archiviazione simili a:

Usare una matrice di stringhe e un numero di indice

Utilizzare l'oggetto dizionario

Per scorrere gli elementi in un oggetto dizionario, usare la funzione items, che converte l'oggetto in una matrice. Utilizzare la value proprietà per ottenere le proprietà sugli oggetti .

param rgLocation string = resourceGroup().location

param storageConfig object = {
  storage1: {
    name: 'contoso'
    skuName: 'Standard_LRS'
  }
  storage2: {
    name: 'fabrikam'
    skuName: 'Premium_LRS'
  }
}

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for config in items(storageConfig): {
  name: '${config.value.name}${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: config.value.skuName
  }
  kind: 'StorageV2'
}]

Il ciclo crea due account di archiviazione. Lo SKU dell'account di archiviazione con il nome che inizia con fabrikam è Premium_LRS.

Usare un oggetto dizionario

Ciclo con condizione

Per risorse e moduli, è possibile aggiungere un'espressione if con la sintassi del ciclo per distribuire in modo condizionale la raccolta.

param rgLocation string = resourceGroup().location
param storageCount int = 2
param createNewStorage bool = true

resource createStorages 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): if(createNewStorage) {
  name: '${i}storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}]

Per altre informazioni, vedere Distribuzione condizionale in Bicep.

Pulire le risorse

Quando le risorse non sono più necessarie, usare l'interfaccia della riga di comando di Azure o il modulo di Azure PowerShell per eliminare il gruppo di risorse dell'argomento di avvio rapido.

resourceGroupName = "{provide-the-resource-group-name}"

az group delete --name $resourceGroupName

Passaggi successivi