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"
}

変数を定義するときに反復ループを使用できます。 次の例では、3 つのプロパティを持つオブジェクトの配列を作成します。

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 関数は、リソース グループ ID から一意の値を作成します。 値は文字列に連結されます。

構成変数

環境を構成するための関連する値を保持する変数を定義できます。 変数は、値を持つオブジェクトとして定義します。 次の例は、testprod という 2 つの環境の値を保持するオブジェクトを示しています。デプロイ中に、これらの値のいずれかを渡します。

@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

次の手順