Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
Zmienna nie może mieć takiej samej nazwy jak parametr, moduł lub zasób. Dla każdej zmiennej można dodać co najmniej jeden dekorator. Aby uzyskać więcej informacji, zobacz Używanie dekoratorów.
Nietypowe zmienne
Podczas definiowania zmiennej bez określania typu danych typ jest wnioskowany z wartości. Składnia definiowania nietypowej zmiennej to:
@<decorator>(<argument>)
var <variable-name> = <variable-value>
W poniższym przykładzie zmienna jest ustawiana na ciąg.
var stringVar = 'preset variable'
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
Dane wyjściowe z poprzedniego przykładu zwracają 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ących danych wyjściowych:
"uniqueStorageName": {
"type": "String",
"value": "stghzuunrvapn6sw"
}
Zmienne typowane
Począwszy od wiersza polecenia interfejsu Bicep w wersji 0.36.X, Bicep obsługuje zmienne typizowane, gdzie jawnie deklarujesz typ danych zmiennej, aby zachować bezpieczeństwo typów i zwiększyć przejrzystość kodu. Korzyści wynikające z typionych zmiennych:
- Wykrywanie błędów: kompilator Bicep weryfikuje, czy przypisane wartości są zgodne z zadeklarowanymi typami, wcześnie przechwytując błędy.
- Przejrzystość kodu: Typy jawne umożliwiają określenie rodzaju danych przechowywanych przez zmienną.
- Obsługa funkcji IntelliSense: narzędzia, takie jak Visual Studio Code, zapewniają lepsze autouzupełnianie i walidację dla typowanych zmiennych.
- Bezpieczeństwo refaktoryzacji: zapewnia, że zmiany przypisań zmiennych nie naruszają oczekiwań dotyczących typów.
Aby zdefiniować zmienną typową, użyj var
słowa kluczowego, po którym następuje nazwa zmiennej, typ i przypisana wartość:
var <variable-name> <data-type> = <variable-value>
W poniższych przykładach pokazano, jak zdefiniować zmienne typizowane:
var resourceName string = 'myResource'
var instanceCount int = 3
var isProduction bool = true
var tags object = { environment: 'dev' }
var subnets array = ['subnet1', 'subnet2']
W przypadku object
typów można zdefiniować schemat, aby wymusić określoną strukturę. Kompilator zapewnia, że obiekt jest zgodny ze zdefiniowanym schematem.
var config {
name: string
count: int
enabled: bool
} = {
name: 'myApp'
count: 5
enabled: true
}
W poniższym przykładzie użyto typowanych zmiennych z dekoratorami, aby wymusić ograniczenia:
@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'
}
}
W tym przykładzie:
-
instanceCount
jest wpisywany jakoint
i używa wyrażenia warunkowego. -
resourcePrefix
jest wpisywany jakostring
. -
tags
jest typowany tak, jakobject
w przypadku określonej struktury.
Używanie pętli iteracyjnych
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 | Argumentacja | opis |
---|---|---|
opis | sznurek | Podaj opisy zmiennej. |
eksport | 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.
Eksport
Użyj @export()
polecenia , aby udostępnić zmienną innym plikom Bicep. Aby uzyskać więcej informacji, zobacz Eksportowanie zmiennych, typów i funkcji.
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
- Aby dowiedzieć się więcej o dostępnych właściwościach zmiennych, zobacz Omówienie struktury i składni plików Bicep.
- Aby dowiedzieć się więcej na temat używania składni pętli, zobacz Iteracyjne pętle w Bicep.