Zmienne w Bicep

W tym artykule opisano sposób definiowania i używania zmiennych w pliku Bicep. Zmienne służą do uproszczenia tworzenia plików Bicep. Zamiast powtarzać skomplikowane wyrażenia w pliku Bicep, należy zdefiniować zmienną zawierającą skomplikowane wyrażenie. Następnie należy użyć tej zmiennej zgodnie z potrzebami w pliku Bicep.

Resource Manager rozwiązuje zmienne przed rozpoczęciem operacji wdrażania. Wszędzie tam, gdzie zmienna jest używana w pliku Bicep, Resource Manager zastępuje ją rozpoznaną wartością.

W pliku Bicep jest ograniczonych do 256 zmiennych. Aby uzyskać więcej informacji, zobacz Limity szablonów.

Definiowanie zmiennej

Składnia definiowania zmiennej jest następująca:

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

Zmienna nie może mieć takiej samej nazwy jak parametr, moduł lub zasób.

Zwróć uwagę, że nie określono typu danych dla zmiennej. Typ jest wnioskowany z wartości. W poniższym przykładzie zmienna jest ustawiana na ciąg.

var stringVar = 'example value'

Wartość z parametru lub innej zmiennej można użyć podczas konstruowania zmiennej.

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

Powyższy przykład zwraca następujące dane:

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

Do konstruowania wartości zmiennej można użyć funkcji Bicep . W poniższym przykładzie użyto funkcji Bicep do utworzenia wartości ciągu dla nazwy konta magazynu.

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

output uniqueStorageName string = storageName

Powyższy przykład zwraca wartość podobną do następującej:

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

Pętle iteracyjne można używać podczas definiowania zmiennej. Poniższy przykład tworzy tablicę obiektów z trzema właściwościami.

param itemCount int = 3

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

output arrayResult array = objectArray

Dane wyjściowe zwracają tablicę z następującymi wartościami:

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

Aby uzyskać więcej informacji na temat typów pętli, których można używać ze zmiennymi, zobacz Iteracyjne pętle w Bicep.

Używanie zmiennej

W poniższym przykładzie pokazano, jak używać zmiennej dla właściwości zasobu. Należy odwołać się do wartości zmiennej, podając nazwę zmiennej: 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

Ponieważ nazwy kont magazynu muszą używać małych liter, storageName zmienna używa toLower funkcji do tworzenia storageNamePrefix małych liter. Funkcja uniqueString tworzy unikatową wartość na podstawie identyfikatora grupy zasobów. Wartości są łączone z ciągiem.

Zmienne konfiguracji

Można zdefiniować zmienne, które przechowują powiązane wartości na potrzeby konfigurowania środowiska. Zmienną należy zdefiniować jako obiekt z wartościami. W poniższym przykładzie pokazano obiekt, który zawiera wartości dla dwóch środowisk — test i prod. Przekaż jedną z tych wartości podczas wdrażania.

@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

Następne kroki