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

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 jako int i używa wyrażenia warunkowego.
  • resourcePrefix jest wpisywany jako string.
  • tags jest typowany tak, jak object 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