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

변수를 정의할 때 반복 루프를 사용할 수 있습니다. 다음 예제에서는 세 개의 속성이 있는 개체 배열을 만듭니다.

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 형식으로 작성되며 함수 변수 위에 배치됩니다. 다음 표에서는 변수에 사용할 수 있는 데코레이터를 보여 줍니다.

데코레이터 인수 설명
description string 변수에 대한 설명을 제공합니다.
export 없음 변수를 다른 Bicep 파일에서 가져올 수 있음을 나타냅니다.

데코레이터는 sys namespace에 있습니다. 같은 이름의 다른 항목과 데코레이터를 구별해야 하는 경우 데코레이터 앞에 sys를 추가합니다. 예를 들어 Bicep 파일에 description(이)라는 변수가 포함된 경우 설명 데코레이터를 사용할 때 sys 네임스페이스를 추가해야 합니다.

설명

설명을 추가하려면 변수 선언에 설명을 추가합니다. 예시:

@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)

설명 텍스트에 Markdown 형식의 텍스트를 사용할 수 있습니다.

내보내기

@export()을(를) 사용하여 변수를 다른 Bicep 파일과 공유합니다. 자세한 내용은 변수, 형식 및 함수 내보내기를 참조하세요.

변수 사용

다음 예제에서는 리소스 속성에 대한 변수를 사용하는 방법을 설명합니다. 변수의 이름(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에서 고유한 값을 만듭니다. 값은 문자열에 연결됩니다.

구성 변수

환경을 구성하기 위한 관련된 값을 포함하는 변수를 정의할 수 있습니다. 값이 있는 개체로 변수를 정의합니다. 다음 예제는 testprod의 두 가지 환경 값을 보유하는 개체를 보여 줍니다. 배포 중에 이러한 값 중 하나를 전달합니다.

@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

다음 단계