分享方式:


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

下一步