この記事では、Bicep ファイルで変数を定義および使用する方法について説明します。 変数を使用して、Bicep ファイルの開発を簡略化します。 Bicep ファイル全体で複雑な式を繰り返すのではなく、複雑な式を含む変数を定義します。 次に、Bicep ファイル全体で、必要に応じてその変数を使用します。
Resource Manager は、デプロイ操作を開始する前に変数を解決します。 Bicep ファイルで変数が使用されている場合、Resource Manager はそれを解決済みの値に置き換えます。 Bicep ファイルでは変数が 512 個に制限されます。 詳細については、「テンプレートの制限」を参照してください。
変数の定義
変数の名前を変数、パラメーター、モジュール、またはリソースと同じにすることはできません。 各変数に対して 1 つ以上のデコレーターを追加できます。 詳細については、「 デコレーターの使用」を参照してください。
型指定されていない変数
データ型を指定せずに変数を定義すると、その値から型が推論されます。 型指定されていない変数を定義するための構文は次のとおりです。
@<decorator>(<argument>)
var <variable-name> = <variable-value>
次の例では、変数を文字列に設定します。
var stringVar = 'preset variable'
変数を構築する際には、パラメーターまたは別の変数からの値を使用できます。
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"
}
型指定された変数
Bicep CLI バージョン 0.36.X 以降、Bicep では型指定された変数がサポートされています。ここでは、型の安全性を確保し、コードの明確さを向上させるために変数のデータ型を明示的に宣言します。 型指定された変数の利点は次のとおりです。
- エラー検出: Bicep コンパイラは、割り当てられた値が宣言された型と一致することを検証し、エラーを早期にキャッチします。
- コードの明確さ: 明示的な型を使用すると、変数が保持するデータの種類が明確になります。
- Intellisense のサポート: Visual Studio Code などのツールでは、型指定された変数のオートコンプリートと検証が向上します。
- リファクタリングの安全性: 変数の割り当てに対する変更が誤って型の期待を破らないようにします。
型指定された変数を定義するには、 var
キーワードの後に変数名、型、割り当てられた値を使用します。
var <variable-name> <data-type> = <variable-value>
次の例は、型指定された変数を定義する方法を示しています。
var resourceName string = 'myResource'
var instanceCount int = 3
var isProduction bool = true
var tags object = { environment: 'dev' }
var subnets array = ['subnet1', 'subnet2']
object
型の場合は、特定の構造を適用するスキーマを定義できます。 コンパイラは、オブジェクトが定義されたスキーマに準拠していることを確認します。
var config {
name: string
count: int
enabled: bool
} = {
name: 'myApp'
count: 5
enabled: true
}
次の例では、デコレーターと共に型指定された変数を使用して制約を適用します。
@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'
}
}
この例では:
-
instanceCount
はint
として型指定され、条件式を使用します。 -
resourcePrefix
はstring
として型指定されます。 -
tags
は、特定の構造体を持つobject
として型指定されます。
反復ループを使用する
変数を定義するときに反復ループを使用できます。 次の例では、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
の形式で記述され、変数宣言の上に配置されます。 次の表に、変数で使用できるデコレーターを示します。
デコレーター | 引数 | 説明 |
---|---|---|
説明 | ひも | 変数の説明を指定します。 |
エクスポート | なし | 変数を別の Bicep ファイルでインポートできることを示します。 |
デコレーターは、sys 名前空間にあります。 このデコレーターを同じ名前の別の項目と区別する必要がある場合は、デコレータの前に「sys
」を付けます。 たとえば、Bicep ファイルに description
という名前の変数が含まれている場合、description デコレーターを使用するときに、sys 名前空間を追加する必要があります。
説明
説明を追加するには、変数の宣言に description を追加します。 次に例を示します。
@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)
説明のテキストとして Markdown 形式のテキストを使用できます。
輸出
変数を他の Bicep ファイルと共有するには、@export()
を使います。 詳細については、「変数、型、関数のエクスポート」を参照してください。
構成変数
環境を構成するための関連する値を保持する変数を定義できます。 変数は、値を持つオブジェクトとして定義します。 次の例は、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 の反復ループ」を参照してください。