Dela via


Variabler i Bicep

Den här artikeln beskriver hur du definierar och använder variabler i Bicep-filen. Du kan använda 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 512 variabler i en Bicep-fil. Mer information finns i Mallgränser.

Definiera variabler

Syntaxen för att definiera en variabel är:

@<decorator>(<argument>)
var <variable-name> = <variable-value>

En variabel kan 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ända dekoratörer

Dekoratörer är skrivna i formatet @expression och placeras ovanför variabeldeklarationer. I följande tabell visas tillgängliga dekoratörer för variabler.

Dekoratör Argument beskrivning
beskrivning sträng Ange beskrivningar för variabeln.
export inget Anger att variabeln är tillgänglig för import av en annan Bicep-fil.

Dekoratörer finns i sys-namnområdet. Om du behöver skilja en dekoratör från ett annat objekt med samma namn, förorda dekoratören med sys. Om din Bicep-fil till exempel innehåller en variabel med namnet descriptionmåste du lägga till sys-namnområdet när du använder beskrivningsdekoratören.

beskrivning

Lägg till en förklaring genom att lägga till en beskrivning i variabeldeklarationen. Till exempel:

@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)

Markdown-formaterad text kan användas för beskrivningstexten.

Export

Använd @export() för att dela variabeln med andra Bicep-filer. Mer information finns i Exportera variabler, typer och funktioner.

Använda variabler

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@2023-04-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 storageName toLower 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 till 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