Bicep の変数
この記事では、Bicep ファイルで変数を定義および使用する方法について説明します。 変数を使用して、Bicep ファイルの開発を簡略化します。 Bicep ファイル全体で複雑な式を繰り返すのではなく、複雑な式を含む変数を定義します。 次に、Bicep ファイル全体で、必要に応じてその変数を使用します。
Resource Manager は、デプロイ操作を開始する前に変数を解決します。 Bicep ファイルで変数が使用されている場合、Resource Manager はそれを解決済みの値に置き換えます。
Bicep ファイルでは変数が 512 個に制限されます。 詳細については、「テンプレートの制限」を参照してください。
変数の定義
変数を定義するための構文は次のとおりです。
@<decorator>(<argument>)
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 の反復ループ」を参照してください。
デコレーターを使用する
デコレーターは、@expression
の形式で記述され、変数宣言の上に配置されます。 次の表に、変数で使用できるデコレーターを示します。
デコレーター | 引数 | 説明 |
---|---|---|
説明 | string | 変数の説明を指定します。 |
export | なし | 変数を別の Bicep ファイルでインポートできることを示します。 |
デコレーターは、sys 名前空間にあります。 このデコレーターを同じ名前の別の項目と区別する必要がある場合は、デコレータの前に「sys
」を付けます。 たとえば、Bicep ファイルに description
という名前の変数が含まれている場合、description デコレーターを使用するときに、sys 名前空間を追加する必要があります。
説明
説明を追加するには、変数の宣言に description を追加します。 次に例を示します。
@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)
説明のテキストとして Markdown 形式のテキストを使用できます。
Export
変数を他の Bicep ファイルと共有するには、@export()
を使います。 詳細については、「変数、型、関数のエクスポート」を参照してください。
変数の使用
次の例は、リソース プロパティに変数を使用する方法を示しています。 変数名 storageName
を指定することによって変数の値を参照します。
param rgLocation string
param storageNamePrefix string = 'STG'
var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'
resource demoAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageName
location: rgLocation
kind: 'Storage'
sku: {
name: 'Standard_LRS'
}
}
output stgOutput string = storageName
ストレージ アカウント名では小文字を使用する必要があるため、storageName
変数は toLower
関数を使用して storageNamePrefix
値を小文字にします。 uniqueString
関数は、リソース グループ ID から一意の値を作成します。 値は文字列に連結されます。
構成変数
環境を構成するための関連する値を保持する変数を定義できます。 変数は、値を持つオブジェクトとして定義します。 次の例は、test と prod という 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
次の手順
- 変数に使用できるプロパティの詳細については、「Bicep ファイルの構造と構文について」をご覧ください。
- ループ構文の使用の詳細については、「Bicep の反復ループ」を参照してください。