Share via


Variabler i Bicep

Den här artikeln beskriver hur du definierar och använder variabler i Bicep-filen. Du använder variabler för att förenkla Bicep-filutvecklingen. I stället för att upprepa komplicerade uttryck i hela Bicep-filen definierar du en variabel som innehåller det komplicerade uttrycket. Sedan använder du variabeln efter behov i hela Bicep-filen.

Resource Manager löser variabler innan distributionsåtgärderna startas. Oavsett var variabeln används i Bicep-filen ersätter Resource Manager den med det lösta värdet.

Du är begränsad till 256 variabler i en Bicep-fil. Mer information finns i Mallgränser.

Definiera variabel

Syntaxen för att definiera en variabel är:

var <variable-name> = <variable-value>

En variabel får inte ha samma namn som en parameter, modul eller resurs.

Observera att du inte anger någon datatyp för variabeln. Typen härleds från värdet. I följande exempel anges en variabel till en sträng.

var stringVar = 'example value'

Du kan använda värdet från en parameter eller en annan variabel när du skapar variabeln.

param inputValue string = 'deployment parameter'

var stringVar = 'preset variable'
var concatToVar =  '${stringVar}AddToVar'
var concatToParam = '${inputValue}AddToParam'

output addToVar string = concatToVar
output addToParam string = concatToParam

Föregående exempel returnerar:

{
  "addToParam": {
    "type": "String",
    "value": "deployment parameterAddToParam"
  },
  "addToVar": {
    "type": "String",
    "value": "preset variableAddToVar"
  }
}

Du kan använda Bicep-funktioner för att konstruera variabelvärdet. I följande exempel används Bicep-funktioner för att skapa ett strängvärde för ett lagringskontonamn.

param storageNamePrefix string = 'stg'
var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

output uniqueStorageName string = storageName

Föregående exempel returnerar ett värde som liknar följande:

"uniqueStorageName": {
  "type": "String",
  "value": "stghzuunrvapn6sw"
}

Du kan använda iterativa loopar när du definierar en variabel. I följande exempel skapas en matris med objekt med tre egenskaper.

param itemCount int = 3

var objectArray = [for i in range(0, itemCount): {
  name: 'myDataDisk${(i + 1)}'
  diskSizeGB: '1'
  diskIndex: i
}]

output arrayResult array = objectArray

Utdata returnerar en matris med följande värden:

[
  {
    "name": "myDataDisk1",
    "diskSizeGB": "1",
    "diskIndex": 0
  },
  {
    "name": "myDataDisk2",
    "diskSizeGB": "1",
    "diskIndex": 1
  },
  {
    "name": "myDataDisk3",
    "diskSizeGB": "1",
    "diskIndex": 2
  }
]

Mer information om vilka typer av loopar du kan använda med variabler finns i Iterativa loopar i Bicep.

Använd variabel

I följande exempel visas hur du använder variabeln för en resursegenskap. Du refererar till värdet för variabeln genom att ange variabelns namn: storageName.

param rgLocation string
param storageNamePrefix string = 'STG'

var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

resource demoAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: storageName
  location: rgLocation
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output stgOutput string = storageName

Eftersom lagringskontonamn måste använda gemener använder variabeln storageNametoLower funktionen för att göra värdet gemener storageNamePrefix . Funktionen uniqueString skapar ett unikt värde från resursgrupps-ID:t. Värdena sammanfogas med en sträng.

Konfigurationsvariabler

Du kan definiera variabler som innehåller relaterade värden för att konfigurera en miljö. Du definierar variabeln som ett objekt med värdena. I följande exempel visas ett objekt som innehåller värden för två miljöer – test och prod. Skicka in något av dessa värden under distributionen.

@allowed([
  'test'
  'prod'
])
param environmentName string

var environmentSettings = {
  test: {
    instanceSize: 'Small'
    instanceCount: 1
  }
  prod: {
    instanceSize: 'Large'
    instanceCount: 4
  }
}

output instanceSize string = environmentSettings[environmentName].instanceSize
output instanceCount int = environmentSettings[environmentName].instanceCount

Nästa steg