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:
- använda heltalsindex
- använda matriselement
- använda matris och index
- använda ordlisteobjekt
- loop med villkor
Förutsättningar
Om du inte har någon Azure-prenumeration skapar du 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 dessa steg 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:
- Lagringskontonamnet ä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@2023-04-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@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
} ]
Indexnumret används som en del av lagringskontots namn. När du har distribuerat Bicep-filen får du två lagringskonton som liknar:
Inside range(), det första talet är startnumret och det andra talet är antalet gånger som loopen körs. Så om du ändrar det till intervall(3,2), får du även två lagringskonton:
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. Följande exempel visar en matris med strängar.
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'
}]
Loopen använder alla strängar i matrisen som en del av lagringskontonamnen. I det här fallet skapas två lagringskonton:
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@2023-04-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 matris och index
I samma fall kanske du vill kombinera en matrisslinga 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@2023-04-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:
Använda ordlisteobjekt
Om du vill iterera över element i ett ordlisteobjekt använder du objektfunktionen 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@2023-04-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.
Loop 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@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'
}]
Mer information finns i villkorsstyrd distribution i Bicep.
Rensa resurser
När Azure-resurserna inte längre behövs använder du Azure CLI- eller Azure PowerShell-modulen för att ta bort snabbstartsresursgruppen.
resourceGroupName = "{provide-the-resource-group-name}"
az group delete --name $resourceGroupName