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

En variabel kan inte ha samma namn som en parameter, modul eller resurs. Du kan lägga till en eller flera dekoratörer för varje variabel. Mer information finns i Använda dekoratörer.

Otypade variabler

När du definierar en variabel utan att ange en datatyp härleds typen från värdet. Syntaxen för att definiera en otypad variabel är:

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

I följande exempel anges en variabel till en sträng.

var stringVar = 'preset variable'

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

Utdata från 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 utdata:

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

Inskrivna variabler

Från och med Bicep CLI version 0.36.X stöder Bicep typvariabler, där du uttryckligen deklarerar datatypen för en variabel för att säkerställa typsäkerhet och förbättra kodens tydlighet. Fördelarna med typvariabler:

  • Felidentifiering: Bicep-kompilatorn verifierar att tilldelade värden matchar den deklarerade typen och fångar fel tidigt.
  • Kodklarhet: Explicita typer gör det tydligt vilken typ av data en variabel innehåller.
  • Stöd för Intellisense: Verktyg som Visual Studio Code ger bättre automatisk komplettering och validering för inskrivna variabler.
  • Refaktoriseringssäkerhet: Säkerställer att ändringar i variabeltilldelningar inte oavsiktligt bryter typförväntningarna.

Om du vill definiera en typvariabel använder du nyckelordet var följt av variabelnamnet, typen och det tilldelade värdet:

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

I följande exempel visas hur du definierar typade variabler:

var resourceName string = 'myResource'
var instanceCount int = 3
var isProduction bool = true
var tags object = { environment: 'dev' }
var subnets array = ['subnet1', 'subnet2']

För object typer kan du definiera ett schema för att framtvinga en specifik struktur. Kompilatorn ser till att objektet följer det definierade schemat.

var config {
  name: string
  count: int
  enabled: bool
} = {
  name: 'myApp'
  count: 5
  enabled: true
}

I följande exempel används typvariabler med dekoratörer för att framtvinga begränsningar:

@description('The environment to deploy to')
@allowed(['dev', 'test', 'prod'])
param environment string = 'dev'

var instanceCount int = environment == 'prod' ? 5 : 2
var resourcePrefix string = 'app'
var tags {
  environment: string
  deployedBy: string 
} = {
  environment: environment
  deployedBy: 'Bicep'
}

resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: '${resourcePrefix}storage${instanceCount}'
  location: 'westus'
  tags: tags
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

I det här exemplet:

  • instanceCount skrivs som int och använder ett villkorsuttryck.
  • resourcePrefix skrivs som string.
  • tags skrivs som object med en specifik struktur.

Använda iterativa loopar

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 Argumentation beskrivning
beskrivning sträng Ange beskrivningar för variabeln.
exportera 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.

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