Udostępnij za pośrednictwem


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 użyjesz tej zmiennej zgodnie z potrzebami w pliku Bicep.

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

W pliku Bicep można ograniczyć do 512 zmiennych. Aby uzyskać więcej informacji, zobacz Limity szablonów.

Definiowanie zmiennych

Składnia definiująca zmienną to:

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

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

Zwróć uwagę, że nie określasz 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ść można użyć z parametru lub innej zmiennej 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"
  }
}

Aby utworzyć wartość 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.

Korzystanie z dekoratorów

Dekoratory są zapisywane w formacie @expression i są umieszczane powyżej deklaracji zmiennych. W poniższej tabeli przedstawiono dostępne dekoratory zmiennych.

Dekorator Argument opis
opis string Podaj opisy zmiennej.
export Brak Wskazuje, że zmienna jest dostępna do zaimportowania przez inny plik Bicep.

Dekoratory znajdują się w przestrzeni nazw systemu. Jeśli musisz odróżnić dekorator od innego elementu o tej samej nazwie, należy poprzeć dekorator za pomocą polecenia sys. Jeśli na przykład plik Bicep zawiera zmienną o nazwie description, należy dodać przestrzeń nazw systemu podczas korzystania z dekoratora opisu .

opis

Aby dodać wyjaśnienie, dodaj opis do deklaracji zmiennej. Na przykład:

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

Tekst w formacie markdown może służyć do tekstu opisu.

Export

Użyj @export() polecenia , aby udostępnić zmienną innym plikom Bicep. Aby uzyskać więcej informacji, zobacz Eksportowanie zmiennych, typów i funkcji.

Używanie zmiennych

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@2023-04-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

Zmienne przechowujące powiązane wartości do konfigurowania środowiska można zdefiniować. Zmienną należy zdefiniować jako obiekt z wartościami. W poniższym przykładzie pokazano obiekt, który przechowuje 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