Share via


Quickstart: Meerdere resource-exemplaren maken in Bicep

Meer informatie over het gebruik van verschillende for syntaxisen om meerdere resource-exemplaren te maken in Bicep. Hoewel dit artikel alleen het maken van meerdere resource-exemplaren laat zien, kunnen dezelfde methoden worden gebruikt om kopieën van module, variabele, eigenschap of uitvoer te definiëren. Zie Bicep-lussen voor meer informatie.

Dit artikel bevat de volgende onderwerpen:

Vereisten

Als u geen abonnement op Azure hebt, maakt u een gratis account voordat u begint.

Zie Bicep-hulpprogramma's installeren om uw omgeving in te stellen voor Bicep-ontwikkeling. Nadat u deze stappen hebt voltooid, hebt u Visual Studio Code en de Bicep-extensie. U hebt ook de nieuwste Azure CLI of de meest recente Azure PowerShell module.

Eén exemplaar maken

In deze sectie definieert u een Bicep-bestand voor het maken van een opslagaccount en implementeert u vervolgens het Bicep-bestand. De volgende secties bevatten de Bicep-voorbeelden voor verschillende for syntaxis. U kunt dezelfde implementatiemethode gebruiken om deze voorbeelden te implementeren en te experimenteren. Als uw implementatie mislukt, is dit waarschijnlijk een van de twee oorzaken:

  • De naam van het opslagaccount is te lang. Namen van opslagaccounts moeten tussen 3 en 24 tekens lang zijn en mogen alleen cijfers en kleine letters bevatten.
  • De naam van het opslagaccount is niet uniek. De naam van uw opslagaccount moet uniek zijn binnen Azure.

Met het volgende Bicep-bestand wordt één opslagaccount gedefinieerd:

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

Sla het Bicep-bestand lokaal op en gebruik vervolgens Azure CLI of Azure PowerShell om het Bicep-bestand te implementeren:

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

Index met gehele getallen gebruiken

In het volgende voorbeeld wordt een for-lus met een index gebruikt om twee opslagaccounts te maken:

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

Het indexnummer wordt gebruikt als onderdeel van de naam van het opslagaccount. Nadat u het Bicep-bestand hebt geïmplementeerd, krijgt u twee opslagaccounts die vergelijkbaar zijn met:

Index voor gehele getallen gebruiken met 0 als beginnummer

Binnen bereik(), is het eerste getal het beginnummer en het tweede getal het aantal keren dat de lus wordt uitgevoerd. Dus als u dit wijzigt in bereik(3,2), krijgt u ook twee opslagaccounts:

Index voor gehele getallen gebruiken met 3 als beginnummer

In de uitvoer van het voorgaande voorbeeld ziet u hoe u verwijst naar de resources die in een lus zijn gemaakt. De uitvoer is vergelijkbaar met:

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

Matrixelementen gebruiken

U kunt een matrix doorlopen. In het volgende voorbeeld ziet u een matrix met tekenreeksen.

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

De lus maakt gebruik van alle tekenreeksen in de matrix als onderdeel van de namen van het opslagaccount. In dit geval worden er twee opslagaccounts gemaakt:

Een matrix met tekenreeksen gebruiken

U kunt ook een matrix met objecten doorlopen. De lus past niet alleen de namen van het opslagaccount aan, maar configureert ook de SKU's.

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

Met de lus worden twee opslagaccounts gemaakt. De SKU van het opslagaccount met de naam begint met fabrikam is Premium_LRS.

Een matrix met tekenreeksen gebruiken

Matrix en index gebruiken

In dezelfde gevallen wilt u mogelijk een matrixlus combineren met een indexlus. In het volgende voorbeeld ziet u hoe u de matrix en het indexnummer gebruikt voor de naamconventie.

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

Nadat u het voorgaande voorbeeld hebt geïmplementeerd, maakt u twee opslagaccounts die vergelijkbaar zijn met:

Een matrix van tekenreeksen en indexnummer gebruiken

Woordenlijstobject gebruiken

Als u elementen in een woordenlijstobject wilt herhalen, gebruikt u de functie items, waarmee het object wordt geconverteerd naar een matrix. Gebruik de value eigenschap om eigenschappen op te halen voor de objecten.

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

Met de lus worden twee opslagaccounts gemaakt. De SKU van het opslagaccount met de naam begint met fabrikam is Premium_LRS.

Een woordenlijstobject gebruiken

Lus met voorwaarde

Voor resources en modules kunt u een if expressie met de syntaxis van de lus toevoegen om de verzameling voorwaardelijk te implementeren.

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

Zie Voorwaardelijke implementatie in Bicep voor meer informatie.

Resources opschonen

Wanneer de Azure-resources niet meer nodig zijn, gebruikt u de Azure CLI of Azure PowerShell-module om de quickstart-resourcegroep te verwijderen.

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

az group delete --name $resourceGroupName

Volgende stappen