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:
- usa indice di numeri interi
- usa elementi array
- usa array e indice
- usa oggetto del dizionario
- ciclo con condizione
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:
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:
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:
È 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 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:
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.
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