Avvio rapido: Creare più istanze di risorse in Bicep

Informazioni su come usare sintassi for differenti 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 include i temi 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 disporrà di Visual Studio Code e dell'estensione Bicep. È disponibile anche la versione più recente dell'interfaccia della riga di comando di Azure o la versione più recente modulo di Azure PowerShell.

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 sintassi for differenti. È possibile usare lo stesso metodo di distribuzione per distribuire ed sperimentare tali esempi. Se la distribuzione non riesce, è probabile che una delle due cause sia la seguente:

  • 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@2023-04-01' = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  location: rgLocation
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Salvare il file Bicep in locale, 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 di numeri interi

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@2023-04-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 cambia in range(3,2), si ottengono 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"
      }
    ]
  }
},

Usa elementi array

È possibile scorrere in ciclo un array. L'esempio seguente mostra un array di stringhe.

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

resource createStorages 'Microsoft.Storage/storageAccounts@2023-04-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 nell'array come parte dei nomi degli account di archiviazione. In questo caso, crea due account di archiviazione:

Usare una matrice di stringhe

È anche possibile scorrere un array 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@2023-04-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 array e indice

Negli stessi casi, è possibile combinare un ciclo di matrici con un ciclo di indice. Nell'esempio seguente viene illustrato come usare l'array 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@2023-04-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

Usa oggetto del dizionario

Per scorrere gli elementi in un oggetto dizionario, usare la funzione elementi, che converte l'oggetto in un array. Utilizzare la proprietà value per ottenere 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@2023-04-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 del 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@2023-04-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