Bicep のスプレッド演算子

スプレッド演算子は、反復可能な配列またはオブジェクトを個々の要素に展開するために使用されます。 スプレッド演算子を使用すると、配列やオブジェクトを簡単に操作できるように、それらの要素やプロパティを新しい配列やオブジェクトに分散させることができます。

Spread

...

スプレッド演算子は、あるオブジェクトから別のオブジェクトにプロパティをコピーしたり、簡潔で読みやすい方法で配列とオブジェクトをマージしたりするために使用されます。

次の例は、オブジェクトで使用されるスプレッド演算子を示しています。

var objA = { color: 'white' }
output objB object = { shape: 'circle', ...objA } 

例からの出力を次に示します。

名前 Type Value
objB オブジェクト { shape: 'circle', color: 'white' }

次の例は、配列で使用されるスプレッド演算子を示しています。

var arrA = [ 2, 3 ]
output arrB array = [ 1, ...arrA, 4 ] 

例からの出力を次に示します。

名前 Type
arrB 配列 [ 1, 2, 3, 4 ]

次の例は、1 回の操作で複数回使用されるスプレッドを示しています。

var arrA = [ 2, 3 ]
output arrC array = [ 1, ...arrA, 4, ...arrA ] 

例からの出力を次に示します。

名前 Type
arrC 配列 [ 1, 2, 3, 4, 2, 3 ]

次の例は、複数行の操作で使用されるスプレッドを示しています。

var objA = { color: 'white' }
var objB = { shape: 'circle'}
output objCombined object = { 
  ...objA 
  ...objB
} 

この使用法では、2 行の間にコンマは使用されません。 例からの出力を次に示します。

名前 Type Value
objCombined オブジェクト { color: 'white', shape: 'circle' }

スプレッド操作を使用すると、省略可能なプロパティの設定を回避できます。 次の例では、パラメーター tier が空の文字列でない場合にのみ、accessTier が設定されます。

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)
var accessTier = tier != '' ? {accessTier: tier} : {}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...accessTier
  } 
}

上記の例は、次のように記述することもできます。

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...(tier != '' ? {accesssTier: tier} : {})
  } 
}

スプレッド演算子を使用して、既存のプロパティをオーバーライドできます。

param location string = resourceGroup().location
param storageProperties {
  accessTier: string?
}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: uniqueString(resourceGroup().id)
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Cold'
    ...storageProperties
  }
}

次のステップ