Sdílet prostřednictvím


Proměnné v Bicep

Tento článek popisuje, jak definovat a používat proměnné v souboru Bicep. Proměnné se používají ke zjednodušení vývoje souborů Bicep. Místo opakování složitých výrazů v souboru Bicep definujete proměnnou, která obsahuje složitý výraz. Tuto proměnnou pak použijete podle potřeby v celém souboru Bicep.

Resource Manager před zahájením operací nasazení přeloží proměnné. Kdykoli se proměnná použije v souboru Bicep, Resource Manager ji nahradí přeloženou hodnotou. V souboru Bicep jste omezeni na 512 proměnných. Další informace najdete v tématu Omezení šablon.

Definování proměnných

Proměnná nemůže mít stejný název jako parametr, modul nebo prostředek. Pro každou proměnnou můžete přidat jeden nebo více dekorátorů. Další informace naleznete v tématu Použití dekorátorů.

Netypové proměnné

Když definujete proměnnou bez zadání datového typu, typ se odvozuje z hodnoty. Syntaxe pro definování netypové proměnné je:

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

Následující příklad nastaví proměnnou na řetězec.

var stringVar = 'preset variable'

Hodnotu z parametru nebo jiné proměnné můžete použít při vytváření proměnné.

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

Výstup z předchozího příkladu vrátí:

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

K vytvoření hodnoty proměnné můžete použít funkce Bicep. Následující příklad používá funkce Bicep k vytvoření řetězcové hodnoty pro název účtu úložiště.

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

output uniqueStorageName string = storageName

Předchozí příklad vrátí hodnotu jako následující výstup:

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

Typové proměnné

Počínaje rozhraním příkazového řádku Bicep verze 0.36.X podporuje Biceptypové proměnné, kde explicitně deklarujete datový typ proměnné, abyste zajistili bezpečnost typů a zlepšili srozumitelnost kódu. Výhody typových proměnných:

  • Detekce chyb: Kompilátor Bicep ověří, že přiřazené hodnoty odpovídají deklarovanému typu a zachytává chyby v rané fázi.
  • Srozumitelnost kódu: Explicitní typy zpřehlední, jaký druh dat proměnná obsahuje.
  • Podpora IntelliSense: Nástroje, jako je Visual Studio Code, poskytují lepší automatické dokončování a ověřování pro typové proměnné.
  • Bezpečnost refaktoringu: Zajišťuje, aby změny přiřazení proměnných neúmyslně nepřerušovaly očekávání typu.

Pokud chcete definovat typovou proměnnou, použijte var klíčové slovo následované názvem proměnné, typem a přiřazenou hodnotou:

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

Následující příklady ukazují, jak definovat typové proměnné:

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

U object typů můžete definovat schéma, které vynucuje konkrétní strukturu. Kompilátor zajišťuje, že objekt dodržuje definované schéma.

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

Následující příklad používá typové proměnné s dekorátory k vynucení omezení:

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

V tomto příkladu:

  • instanceCount je zadán jako int a používá podmíněný výraz.
  • resourcePrefix je zadána jako string.
  • tags se zadává jako object s konkrétní strukturou.

Použití iterativních smyček

Při definování proměnné můžete použít iterativní smyčky. Následující příklad vytvoří pole objektů se třemi vlastnostmi.

param itemCount int = 3

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

output arrayResult array = objectArray

Výstup vrátí matici s následujícími hodnotami:

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

Další informace o typech smyček, které můžete použít s proměnnými, najdete v tématu Iterativní smyčky v bicep.

Použití dekorátorů

Dekorátory jsou zapsány ve formátu @expression a jsou umístěny nad deklaracemi proměnných. V následující tabulce jsou uvedeny dostupné dekorátory proměnných.

Dekoratér Důvod Popis
popis řetězec Zadejte popisy proměnné.
exportu Žádná Označuje, že proměnná je k dispozici pro import jiným souborem Bicep.

Dekorátory jsou v oboru názvů sys. Pokud potřebujete odlišit dekorátor od jiné položky se stejným názvem, předkožte dekorátorem .sys Pokud například váš soubor Bicep obsahuje proměnnou s názvem description, musíte přidat obor názvů sys při použití dekorátoru popisu .

Popis

Pokud chcete přidat vysvětlení, přidejte popis do deklarace proměnné. Příklad:

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

Text ve formátu Markdown lze použít pro text popisu.

Vývoz

Slouží @export() ke sdílení proměnné s jinými soubory Bicep. Další informace najdete v tématu Export proměnných, typů a funkcí.

Proměnné konfigurace

Můžete definovat proměnné, které obsahují související hodnoty pro konfiguraci prostředí. Proměnnou definujete jako objekt s hodnotami. Následující příklad ukazuje objekt, který obsahuje hodnoty pro dvě prostředí – test a prod. Předejte jednu z těchto hodnot během nasazení.

@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

Další kroky