다음을 통해 공유


Bicep 스프레드 연산자

스프레드 연산자는 반복 가능한 배열 또는 개체를 개별 요소로 확장하는 데 사용됩니다. 스프레드 연산자를 사용하면 해당 요소 또는 속성을 새 배열 또는 개체로 분산하여 배열 또는 개체를 쉽게 조작할 수 있습니다.

분산

...

스프레드 연산자는 한 개체에서 다른 개체로 속성을 복사하거나 배열과 개체를 간결하고 읽기 쉬운 방식으로 병합하는 데 사용됩니다.

예제

다음 예제에서는 개체에 사용되는 스프레드 연산자를 보여줍니다.

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

예제의 출력:

이름 타입
objB 개체 { 도형: 'circle', color: 'white' }

다음 예제에서는 배열에 사용되는 스프레드 연산자를 보여줍니다.

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

예제의 출력:

이름 타입
arrB 배열 [ 1, 2, 3, 4 ]

다음 예제에서는 단일 작업에서 여러 번 사용된 스프레드를 보여줍니다.

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

예제의 출력:

이름 타입
arrC 배열 [ 1, 2, 3, 4, 2, 3 ]

다음 예제에서는 다중 선 작업에 사용되는 스프레드를 보여줍니다.

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

이 사용법에서는 두 줄 사이에 쉼표가 사용되지 않습니다. 예제의 출력:

이름 타입
objCombined 개체 { color: 'white', shape: 'circle' }

다음 예제에서는 배열 요소를 조건부로 추가하는 방법을 보여 줍니다.

@allowed(['white', 'black'])
param color string = 'black'

var colorWhite = { color: 'white' }
var colorBlack = { color: 'black' }

output objB object = ((color == 'white')? { shape: 'circle', ...colorWhite} : { shape: 'circle', ...colorBlack})

예제의 출력:

이름 타입
objB 개체 { 도형: 'circle', color: 'black' }

스프레드 작업은 선택적 속성을 설정하지 않도록 하는 데 사용할 수 있습니다. 다음 예제에서는 매개 변수 계층이 빈 문자열이 아닌 경우에만 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 != '' ? {accessTier: 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
  }
}

다음 단계