다음을 통해 공유


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

앞의 예제에서 결과에 할당하면 bar 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

개체 형식 및 개체 리터럴의 매개 변수 및 변수를 포함하여 모든 개체에 속성 접근자를 사용할 수 있습니다. nonobject 형식의 식에 사용되는 속성 접근자가 오류입니다.

[] 구문을 사용하여 속성에 액세스할 수도 있습니다. 다음 예에서는 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에서 문자열은 작은따옴표로 표시되며 한 줄로 선언해야 합니다. 코드 포인트가 있는 모든 유니코드 문자는 10FFFF 허용 0 됩니다.

param exampleString string = 'test value'

다음 표에서는 백슬래시(\) 문자를 사용하여 이스케이프해야 하는 예약 문자 집합을 나열합니다.

이스케이프 시퀀스 표시 값 주의
\\ \
\' '
\n LF(줄 바꿈)
\r CR(캐리지 리턴)
\t 탭 문자
\u{x} 유니코드 코드 포인트 x 16 x 진수 코드 포인트 값과 (둘 다 포함) 사이의 10FFFF 0 값을 나타냅니다. 앞에 오는 0은 허용됩니다. 위의 FFFF 코드 포인트는 서로게이트 쌍으로 내보내집니다.
\$ $ 뒤에 {가 올 때만 이스케이프합니다.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

Bicep은 특정 문자열 값을 참조하는 문자열 리터럴 형식을 지원합니다. 다음 예제 red 에서는 문자열 리터럴 형식입니다. 에만 값을 red 할당할 redColor수 있습니다.

output redColor 'red' = 'red'

앞의 예제와 같이 인라인 또는 문에서 문자열 리터럴 형식을 선언할 type 수 있습니다.

type redColor = 'red'

output colorRed redColor = 'red'
output colorBlue redColor = 'blue'

앞의 예제에서 결과에 할당하면 colorBlue blue 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에서 여러 줄 문자열은 세 개의 작은따옴표(''')와 선택적으로 줄 바꿈(여는 시퀀스) 및 세 개의 작은따옴표(''' 닫는 시퀀스) 사이에 정의됩니다. 여는 시퀀스와 닫는 시퀀스 사이에 입력된 문자는 축자로 읽힙니다. 이스케이프가 필요하거나 불가능합니다.

참고 항목

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에서 공용 구조체 형식을 사용하면 하위 형식 집합으로 구성된 결합된 형식을 만들 수 있습니다. 개별 하위 형식 할당이 허용되는 경우 할당이 유효합니다. 이 문자는 | 조건을 사용하는 or 개별 하위 형식을 구분합니다. 예를 들어 구문 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)[]

형식 공용 구조체는 단일 Azure Resource Manager 형식(예: , int또는 bool.)으로 string축소할 수 있어야 합니다. 그렇지 않으면 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 검사합니다. 마찬가지로 매개 변수가 형식인 경우 형식 bar을 사용하여 유효성을 검사합니다 BarConfig . 이 패턴은 다른 형식에도 적용됩니다.

공용 구조체 형식에는 몇 가지 제한 사항이 있습니다.

  • 공용 구조체 형식은 단일 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 파일 구조 및 구문을 참조 하세요.