Bicep의 데이터 형식
이 문서에서는 Bicep에서 지원되는 데이터 형식을 설명합니다. 사용자 지정 데이터 형식을 정의하려면 사용자 정의 데이터 형식을 참조하세요.
지원되는 유형
Bicep 내에서 다음 데이터 형식을 사용할 수 있습니다.
배열
배열은 왼쪽 대괄호([
)로 시작하고 오른쪽 대괄호(]
)로 끝납니다. Bicep에서 배열은 한 줄 또는 여러 줄로 선언할 수 있습니다. 쉼표(,
)는 한 줄 선언의 값 사이에 사용되지만 여러 줄 선언에는 사용되지 않습니다. 한 줄 및 여러 줄 선언을 혼합하고 일치시킬 수 있습니다. 여러 줄 선언에는 Bicep CLI 버전 0.7.X 이상이 필요합니다.
var multiLineArray = [
'abc'
'def'
'ghi'
]
var singleLineArray = ['abc', 'def', 'ghi']
var mixedArray = ['abc', 'def'
'ghi']
각 배열 요소는 모든 형식일 수 있습니다. 각 항목이 동일한 데이터 형식인 배열 또는 서로 다른 데이터 형식을 포함하는 배열이 있을 수 있습니다.
다음 예제에서는 정수의 배열과 다양한 형식의 배열을 보여줍니다.
var integerArray = [
1
2
3
]
var mixedArray = [
resourceGroup().name
1
true
'example string'
]
Bicep의 배열은 0부터 시작합니다. 다음 예제에서 exampleArray[0]
식은 1로 계산되고 exampleArray[2]
식은 3으로 계산됩니다. 인덱서의 인덱스도 다른 식일 수 있습니다. exampleArray[index]
식은 2로 계산됩니다. 정수 인덱서는 배열 형식의 식에만 사용할 수 있습니다.
var index = 1
var exampleArray = [
1
2
3
]
인덱스가 범위를 벗어나면 다음 오류가 발생합니다.
The language expression property array index 'x' is out of bounds
이 예외를 방지하려면 다음 예제와 같이 Or 논리 연산자를 사용할 수 있습니다.
param emptyArray array = []
param numberArray array = [1, 2, 3]
output foo bool = empty(emptyArray) || emptyArray[0] == 'bar'
output bar bool = length(numberArray) <= 3 || numberArray[3] == 4
부울
부울 값을 지정하는 경우 true
또는 false
를 사용합니다. 값을 따옴표로 묶지 마세요.
param exampleBool bool = true
정수
정수 값을 지정하는 경우 따옴표를 사용하지 마세요.
param exampleInt int = 1
Bicep 정수는 64비트 정수입니다. 인라인 매개 변수로 전달되는 경우 배포에 사용하는 SDK 또는 명령줄 도구로 값 범위를 제한할 수 있습니다. 예를 들어, PowerShell을 사용하여 Bicep을 배포하는 경우 정수 형식의 범위는 -2147483648 ~ 2147483647일 수 있습니다. 이 제한을 피하려면 매개 변수 파일에 큰 정수 값을 지정합니다. 리소스 종류는 정수 속성에 대해 고유한 한도를 적용합니다.
Bicep은 정확한 정수인 특정 값을 참조하는 정수 리터럴 형식을 지원합니다. 다음 예제에서 1은 정수 리터럴 형식이며 foo 는 값 1만 할당할 수 있고 다른 값은 할당할 수 없습니다.
output foo 1 = 1
정수 리터럴 형식은 앞의 예제와 같이 인라인으로 선언하거나 문에서 type
선언할 수 있습니다.
type oneType = 1
output foo oneType = 1
output bar oneType = 2
앞의 예제에서 막대에 2를 할당하면 BCP033 오류가 발생합니다. "1" 형식의 값이 필요하지만 제공된 값은 "2" 형식입니다.
다음 예제에서는 정수 리터럴 형식을 공용 구조체 형식과 함께 사용하는 방법을 보여줍니다.
output bar 1 | 2 | 3 = 3
부동 소수점, 10진 또는 이진 형식은 현재 지원되지 않습니다.
개체
개체는 왼쪽 중괄호({
)로 시작하고 오른쪽 중괄호(}
)로 끝납니다. Bicep에서 개체는 한 줄 또는 여러 줄로 선언할 수 있습니다. 개체의 각 속성은 키와 값으로 구성됩니다. 키와 값은 콜론(:
)으로 구분합니다. 개체는 모든 형식의 속성을 허용합니다. 쉼표(,
)는 한 줄 선언의 속성 간에 사용되지만 여러 줄 선언의 속성 간에는 사용되지 않습니다. 한 줄 및 여러 줄 선언을 혼합하고 일치시킬 수 있습니다. 여러 줄 선언에는 Bicep CLI 버전 0.7.X 이상이 필요합니다.
param singleLineObject object = {name: 'test name', id: '123-abc', isCurrent: true, tier: 1}
param multiLineObject object = {
name: 'test name'
id: '123-abc'
isCurrent: true
tier: 1
}
param mixedObject object = {name: 'test name', id: '123-abc', isCurrent: true
tier: 1}
Bicep에서 따옴표는 선택적으로 개체 속성 키에 허용됩니다.
var test = {
'my - special. key': 'value'
}
앞의 예에서 개체 속성 키에 특수 문자가 포함된 경우 따옴표가 사용됩니다. 예를 들어 공백, '-' 또는 '.'입니다. 다음 예는 개체 속성 키에서 보간을 사용하는 방법을 보여 줍니다.
var stringVar = 'example value'
var objectVar = {
'${stringVar}': 'this value'
}
속성 접근자는 개체의 속성에 액세스하는 데 사용됩니다. .
연산자를 사용하여 구성됩니다.
var a = {
b: 'Dev'
c: 42
d: {
e: true
}
}
output result1 string = a.b // returns 'Dev'
output result2 int = a.c // returns 42
output result3 bool = a.d.e // returns true
속성 접근자는 개체 유형 및 개체 리터럴의 매개변수 및 변수를 포함한 모든 개체와 함께 사용할 수 있습니다. 개체가 아닌 형식의 식에서 속성 접근자를 사용하면 오류가 발생합니다.
[]
구문을 사용하여 속성에 액세스할 수도 있습니다. 다음 예에서는 Development
를 반환합니다.
var environmentSettings = {
dev: {
name: 'Development'
}
prod: {
name: 'Production'
}
}
output accessorResult string = environmentSettings['dev'].name
JSON에서 개체는 0개 이상 키/값 쌍의 순서가 지정되지 않은 컬렉션입니다. 순서는 구현에 따라 다를 수 있습니다. 예를 들어 Bicep items() 함수는 개체를 알파벳 순서로 정렬합니다. 다른 위치에서는 원래 순서를 유지할 수 있습니다. 이러한 비결정성 때문에 배포 매개 변수 및 출력과 상호 작용하는 코드를 작성할 때는 개체 키의 순서를 가정하지 않아야 합니다.
개체의 존재하지 않는 속성에 액세스할 때 다음 오류가 발생합니다.
The language expression property 'foo' doesn't exist
이 예외를 방지하려면 다음 예제와 같이 And 논리 연산자를 사용할 수 있습니다.
param objectToTest object = {
one: 1
two: 2
three: 3
}
output bar bool = contains(objectToTest, 'four') && objectToTest.four == 4
문자열
Bicep에서 문자열은 작은 따옴표로 표시되며 한 줄에 선언되어야 합니다. 코드 포인트가 0에서 10FFFF 사이인 모든 유니코드 문자가 허용됩니다.
param exampleString string = 'test value'
다음 표에서는 백슬래시(\
) 문자로 이스케이프되어야 하는 예약 문자 세트를 나열합니다.
이스케이프 시퀀스 | 표시 값 | 주의 |
---|---|---|
\\ |
\ |
|
\' |
' |
|
\n |
LF(줄 바꿈) | |
\r |
CR(캐리지 반환) | |
\t |
탭 문자 | |
\u{x} |
유니코드 코드 포인트 x |
x는 0에서 10FFFF(둘 다 포함) 사이의 16진수 코드 포인트 값을 나타냅니다. 앞에 오는 0은 허용됩니다. FFFF 위의 코드 포인트는 서로게이트 쌍으로 내보내집니다. |
\$ |
$ |
뒤에 { 가 올 때만 이스케이프합니다. |
// evaluates to "what's up?"
var myVar = 'what\'s up?'
Bicep은 특정 문자열 값을 참조하는 문자열 리터럴 형식을 지원합니다. 다음 예제에서 빨간색은 문자열 리터럴 형식이며, redColor는 빨강 값만 할당하고 다른 값은 할당할 수 없습니다.
output redColor 'red' = 'red'
문자열 리터럴 형식은 앞의 예제와 같이 인라인으로 선언하거나 문에서 type
선언할 수 있습니다.
type redColor = 'red'
output colorRed redColor = 'red'
output colorBlue redColor = 'blue'
앞의 예제에서 colorBlue에 파란색을 할당하면 BCP033 오류가 발생합니다. "'red'" 형식의 값이 필요하지만 제공된 값은 "'blue'" 형식입니다.
다음 예제에서는 공용 구조체 형식으로 문자열 리터럴 형식을 사용하는 방법을 보여 있습니다.
type direction = 'north' | 'south' | 'east' | 'west'
output west direction = 'west'
output northWest direction = 'northwest'
Bicep의 모든 문자열은 보간을 지원합니다. 식을 주입하려면 ${
및 }
로 둘러쌉니다. 참조되는 식은 여러 줄에 걸쳐 있을 수 없습니다.
var storageName = 'storage${uniqueString(resourceGroup().id)}'
다중 선 문자열
Bicep에서 여러 줄 문자열은 3개의 작은따옴표 문자('''
) 다음에 선택적으로 줄 바꿈(여는 시퀀스)과 3개의 작은따옴표 문자('''
- 닫는 시퀀스) 사이에 정의됩니다. 여는 시퀀스와 닫는 시퀀스 사이에 입력된 문자를 그대로 읽으며 이스케이프가 필요하거나 가능하지 않습니다.
참고 항목
Bicep 파서는 모든 문자를 있는 그대로 읽기 때문에 Bicep 파일의 줄 끝에 따라 줄바꿈을 \r\n
또는 \n
으로 해석할 수 있습니다.
보간은 현재 다중 선 문자열에서 지원되지 않습니다. 이 제한으로 인해 보간 대신, concat
함수를 사용해야 할 수 있습니다.
'''
가 포함된 다중 선 문자열은 지원되지 않습니다.
// evaluates to "hello!"
var myVar = '''hello!'''
// evaluates to "hello!" because the first newline is skipped
var myVar2 = '''
hello!'''
// evaluates to "hello!\n" because the final newline is included
var myVar3 = '''
hello!
'''
// evaluates to " this\n is\n indented\n"
var myVar4 = '''
this
is
indented
'''
// evaluates to "comments // are included\n/* because everything is read as-is */\n"
var myVar5 = '''
comments // are included
/* because everything is read as-is */
'''
// evaluates to "interpolation\nis ${blocked}"
// note ${blocked} is part of the string, and is not evaluated as an expression
var myVar6 = '''interpolation
is ${blocked}'''
공용 구조체 유형
Bicep에서 공용 구조체 형식을 사용하면 하위 형식 집합으로 구성된 결합된 형식을 만들 수 있습니다. 개별 하위 형식 할당이 허용되는 경우 할당이 유효합니다. 문자는 |
또는 조건을 사용하여 개별 하위 형식을 구분합니다. 예를 들어 구문 'a' | 'b'는 유효한 할당이 'a' 또는 'b'일 수 있음을 의미합니다. 공용 구조체 형식은 Bicep에서 허용된 값 제약 조건으로 변환되므로 리터럴만 멤버로 허용됩니다. 공용 구조체에는 여러 리터럴 형식의 식이 포함될 수 있습니다.
type color = 'Red' | 'Blue' | 'White'
type trueOrFalse = 'true' | 'false'
type permittedIntegers = 1 | 2 | 3
type oneOfSeveralObjects = {foo: 'bar'} | {fizz: 'buzz'} | {snap: 'crackle'}
type mixedTypeArray = ('fizz' | 42 | {an: 'object'} | null)[]
형식 공용 구조체는 'string', 'int' 또는 'bool'과 같은 단일 ARM 형식으로 축소할 수 있어야 합니다. 그렇지 않으면 BCP294 오류 코드가 표시됩니다. 예시:
type foo = 'a' | 1
모든 형식 식은 공용 구조체 형식 선언(문자 간 |
)에서 하위 형식으로 사용할 수 있습니다. 예를 들어 다음 예제는 모두 유효합니다.
type foo = 1 | 2
type bar = foo | 3
type baz = bar | (4 | 5) | 6
사용자 지정 태그가 지정된 공용 구조체 데이터 형식
Bicep은 여러 다른 형식 중 하나일 수 있는 값을 나타내는 데 사용되는 사용자 지정 태그가 지정된 공용 구조체 데이터 형식을 지원합니다. 사용자 지정 태그가 지정된 공용 구조체 데이터 형식을 선언하려면 데코레이터를 @discriminator()
사용할 수 있습니다. 이 데코레이터를 사용하려면 Bicep CLI 버전 0.21.X 이상이 필요합니다. 구문은 다음과 같습니다.
@discriminator('<property-name>')
판별자 데코레이터는 모든 공용 구조체 구성원 간의 공유 속성 이름을 나타내는 단일 매개 변수를 사용합니다. 이 속성 이름은 모든 구성원에서 필수 문자열 리터럴이어야 하며 대/소문자를 구분합니다. 공용 구조체 구성원의 구분된 속성 값은 대/소문자를 구분하지 않는 방식으로 고유해야 합니다.
type FooConfig = {
type: 'foo'
value: int
}
type BarConfig = {
type: 'bar'
value: bool
}
@discriminator('type')
param ServiceConfig FooConfig | BarConfig | { type: 'baz', *: string } = { type: 'bar', value: true }
매개 변수 값은 구분된 속성 값에 따라 유효성이 검사됩니다. 예를 들어 앞의 예제에서 serviceConfig 매개 변수가 foo 형식인 경우 FooConfig 형식을 사용하여 유효성을 검사합니다. 마찬가지로 매개 변수가 입력줄인 경우 BarConfig 형식을 사용하여 유효성을 검사합니다. 이 패턴은 다른 형식에도 적용됩니다.
공용 구조체 유형에는 몇 가지 제한 사항이 있습니다.
공용 구조체 형식은 ARM(단일 Azure Resource Manager) 형식으로 축소할 수 있어야 합니다. 다음 정의가 잘못되었습니다.
type foo = 'a' | 1
리터럴만 멤버로 허용됩니다.
모든 리터럴은 동일한 기본 데이터 형식이어야 합니다(예: 모든 문자열 또는 모든 정수).
공용 구조체 형식 구문은 사용자 정의 데이터 형식에서 사용할 수 있습니다.
보안 문자열 및 개체
보안 문자열은 문자열과 동일한 형식을 사용하고 보안 개체는 개체와 동일한 형식을 사용합니다. Bicep을 사용하면 데코레이터를 @secure()
문자열이나 개체에 추가합니다.
매개 변수를 보안 문자열 또는 보안 개체로 설정하면 매개 변수 값이 배포 기록에 저장되지 않고 로그되지 않습니다. 그러나 해당 보안 값을 보안 값이 필요하지 않은 속성으로 설정하면 값이 보호되지 않습니다. 예를 들어, 보안 문자열을 태그로 설정하면 해당 값이 일반 텍스트로 저장됩니다. 암호 및 비밀에 보안 문자열을 사용합니다.
다음 예제에서는 두 개의 보안 매개 변수를 보여줍니다.
@secure()
param password string
@secure()
param configValues object
데이터 형식 할당 가능성
Bicep에서는 한 유형(원본 유형)의 값을 다른 유형(대상 유형)에 할당할 수 있습니다. 다음 표는 어떤 원본 유형(가로 나열)을 어떤 대상 유형(세로 나열)에 할당할 수 있거나 할당할 수 없는지 보여 줍니다. 표에서 X
는 할당 가능, 빈 공간은 할당 불가능, ?
는 유형이 호환되는 경우에만 의미합니다.
유형 | any |
error |
string |
number |
int |
bool |
null |
object |
array |
명명된 리소스 | 명명된 모듈 | scope |
---|---|---|---|---|---|---|---|---|---|---|---|---|
any |
X | X | X | X | X | X | X | X | X | X | X | |
error |
||||||||||||
string |
X | X | ||||||||||
number |
X | X | X | |||||||||
int |
X | X | ||||||||||
bool |
X | X | ||||||||||
null |
X | X | ||||||||||
object |
X | X | ||||||||||
array |
X | X | ||||||||||
resource |
X | X | ||||||||||
module |
X | X | ||||||||||
scope |
? | |||||||||||
명명된 리소스 | X | ? | ? | |||||||||
명명된 모듈 | X | ? | ? |
다음 단계
Bicep의 구조 및 구문에 대해 자세히 알아보려면 Bicep 파일 구조를 참조하세요.