이 문서에서는 Bicep 파일에서 변수를 정의하고 사용하는 방법을 설명합니다. 변수를 사용하여 Bicep 파일 개발을 간소화할 수 있습니다. Bicep 파일 전체에서 복잡한 식을 반복하는 대신 복잡한 식을 포함하는 변수를 정의합니다. 그런 다음 Bicep 파일 전체에서 필요에 따라 해당 변수를 사용합니다.
Resource Manager는 배포 작업을 시작하기 전에 변수를 확인합니다. Bicep 파일에서 변수를 사용할 때마다 Resource Manager는 변수를 확인된 값으로 바꿉니다. Bicep 파일의 변수는 512개로 제한됩니다. 자세한 내용은 템플릿 제한을 참조하세요.
변수 정의
변수는 매개 변수, 모듈 또는 리소스와 동일한 이름을 가질 수 없습니다. 각 변수에 대해 하나 이상의 데코레이터를 추가할 수 있습니다. 자세한 내용은 데코레이터 사용을 참조하세요.
형식화되지 않은 변수
데이터 형식을 지정하지 않고 변수를 정의하면 해당 형식이 값에서 유추됩니다. 형식화되지 않은 변수를 정의하는 구문은 다음과 같습니다.
@<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 컴파일러는 할당된 값이 선언된 형식과 일치하는지 유효성을 검사하여 오류를 조기에 catch합니다.
- 코드 명확성: 명시적 형식은 변수가 보유하는 데이터의 종류를 명확하게 합니다.
- 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
로 입력됩니다.
반복 루프 사용
변수를 정의할 때 반복 루프를 사용할 수 있습니다. 다음 예제에서는 세 개의 속성이 있는 개체 배열을 만듭니다.
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 namespace에 있습니다. 같은 이름의 다른 항목과 데코레이터를 구별해야 하는 경우 데코레이터 앞에 sys
를 추가합니다. 예를 들어 Bicep 파일에 description
(이)라는 변수가 포함된 경우 설명 데코레이터를 사용할 때 sys 네임스페이스를 추가해야 합니다.
설명
설명을 추가하려면 변수 선언에 설명을 추가합니다. 예시:
@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)
설명 텍스트에 Markdown 형식의 텍스트를 사용할 수 있습니다.
내보내기
@export()
을(를) 사용하여 변수를 다른 Bicep 파일과 공유합니다. 자세한 내용은 변수, 형식 및 함수 내보내기를 참조하세요.
구성 변수
환경을 구성하기 위한 관련된 값을 포함하는 변수를 정의할 수 있습니다. 값이 있는 개체로 변수를 정의합니다. 다음 예제는 test와 prod의 두 가지 환경 값을 보유하는 개체를 보여 줍니다. 배포 중에 이러한 값 중 하나를 전달합니다.
@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의 반복 루프를 참조하세요.