Snabbstart: Skapa flera resursinstanser i Bicep

Lär dig hur du använder olika for syntaxer för att skapa flera resursinstanser i Bicep. Även om den här artikeln bara visar hur du skapar flera resursinstanser kan samma metoder användas för att definiera kopior av modul, variabel, egenskap eller utdata. Mer information finns i Bicep-loopar.

Den här artikeln innehåller följande avsnitt:

Förutsättningar

Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

Information om hur du konfigurerar din miljö för Bicep-utveckling finns i Installera Bicep-verktyg. När du har slutfört de här stegen har du Visual Studio Code och Bicep-tillägget. Du har också antingen den senaste Azure CLI-modulen eller den senaste Azure PowerShell modulen.

Skapa en enskild instans

I det här avsnittet definierar du en Bicep-fil för att skapa ett lagringskonto och distribuerar sedan Bicep-filen. Följande avsnitt innehåller Bicep-exempel för olika for syntaxer. Du kan använda samma distributionsmetod för att distribuera och experimentera dessa exempel. Om distributionen misslyckas är det troligtvis en av de två orsakerna:

  • Lagringskontots namn är för långt. Namnet på ett lagringskonto måste vara mellan 3 och 24 tecken långt och får endast innehålla siffror och gemener.
  • Namnet på lagringskontot är inte unikt. Namnet på ditt lagringskonto måste vara unikt i Azure.

Följande Bicep-fil definierar ett lagringskonto:

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'
}

Spara Bicep-filen lokalt och använd sedan Azure CLI eller Azure PowerShell för att distribuera Bicep-filen:

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

Använda heltalsindex

En for-loop med ett index används i följande exempel för att skapa två lagringskonton:

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
} ]

Indexnumret används som en del av lagringskontots namn. När du har distribuerat Bicep-filen får du två lagringskonton som liknar följande:

Använd heltalsindex med 0 som startnummer

Inuti range() är det första talet startnumret och det andra talet är antalet gånger som loopen körs. Så om du ändrar den till range(3,2) får du även två lagringskonton:

Använd heltalsindex med 3 som startnummer

Utdata från föregående exempel visar hur du refererar till de resurser som skapats i en loop. Utdatan liknar följande:

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

Använda matriselement

Du kan loopa genom en matris. I följande exempel visas en matris med strängar.

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'
}]

Loopen använder alla strängar i matrisen som en del av lagringskontonamnen. I det här fallet skapas två lagringskonton:

Använda en matris med strängar

Du kan också loopa genom en matris med objekt. Loopen anpassar inte bara lagringskontonamnen, utan konfigurerar även SKU:erna.

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'
}]

Loopen skapar två lagringskonton. SKU:n för lagringskontot med namnet som börjar med fabrikam är Premium_LRS.

Använda en matris med strängar

Använda matris och index

I samma fall kanske du vill kombinera en matrisloop med en indexloop. Följande exempel visar hur du använder matrisen och indexnumret för namngivningskonventionen.

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'
}]

När du har distribuerat föregående exempel skapar du två lagringskonton som liknar följande:

Använda en matris med strängar och indexnummer

Använda ordlisteobjekt

Om du vill iterera över element i ett ordlisteobjekt använder du funktionen items, som konverterar objektet till en matris. Använd egenskapen value för att hämta egenskaper för objekten.

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'
}]

Loopen skapar två lagringskonton. SKU:n för lagringskontot med namnet som börjar med fabrikam är Premium_LRS.

Använda ett ordlisteobjekt

Loopa med villkor

För resurser och moduler kan du lägga till ett if uttryck med loopsyntaxen för att villkorligt distribuera samlingen.

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'
}]

Mer information finns i villkorsstyrd distribution i Bicep.

Rensa resurser

När Azure-resurserna inte längre behövs kan du använda Azure CLI eller Azure PowerShell modulen för att ta bort snabbstartsresursgruppen.

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

az group delete --name $resourceGroupName

Nästa steg