Share via


Bicep 中的變數

本文說明如何在 Bicep 檔案中定義和使用變數。 您可使用變數來簡化 Bicep 檔案的開發。 您可定義包含複雜運算式的變數,而不需在整個 Bicep 檔案中重複執行複雜運算式。 如此一來,您就能在整個 Bicep 檔案中視需要使用該變數。

Resource Manager 會在開始部署作業之前解析變數。 無論在 Bicep 檔案中的任何地方使用該變數,Resource Manager 都會將其取代為已解析的值。

Bicep 檔案中限制使用 256 個變數。 如需詳細資訊,請參閱範本限制

定義變數

用於定義變數的語法為:

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

變數的名稱不能與參數、模組或資源的名稱相同。

請注意,您不會指定變數的 資料類型。 此類型是從值推斷而來。 下列範例會將變數設定為字串。

var stringVar = 'example value'

建構變數時,可以使用參數或其他變數中的值。

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

上述範例會傳回:

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

您可以使用 Bicep 函式來建立變數值。 下列範例會使用 Bicep 函式來建立儲存體帳戶名稱的字串值。

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

output uniqueStorageName string = storageName

上述範例會傳回類似以下的值:

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

您可以在定義變數時使用反覆式迴圈。 下列範例會建立具有三個屬性的物件陣列。

param itemCount int = 3

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

output arrayResult array = objectArray

輸出會傳回包含下列值的陣列:

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

如需深入了解可搭配變數使用的迴圈類型,請參閱 Bicep 中的反覆式迴圈

使用變數

下列範例顯示如何將變數用於資源屬性。 您可以藉由提供變數的名稱來參考變數的值: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

因為儲存體帳戶名稱必須使用小寫字母,因此 storageName 變數會使用 toLower 函式使 storageNamePrefix 值變成小寫。 uniqueString 函式會從資源群組識別碼建立唯一值。 這些值會串連成字串。

設定變數

您可定義包含設定環境相關值的變數。 您可將變數定義為具有值的物件。 下列範例顯示的物件包含兩個環境的值:測試生產環境。請在部署期間傳入上述其中一個值。

@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

下一步