다음을 통해 공유


Bicep의 데이터 형식

이 문서에서는 Bicep에서 지원되는 데이터 형식에 대해 설명합니다. 사용자 지정 데이터 형식을 정의하려면 사용자 정의 데이터 형식을 참조하세요.

배열

Bicep의 배열 은 문자열, 정수, 개체 또는 기타 배열과 같은 정렬된 값 컬렉션으로, 일반적으로 리소스 이름, 구성 설정 또는 매개 변수와 같은 관련 항목을 그룹화하기 위해 사용됩니다. 배열은 배포 데이터를 구성하고, 목록을 리소스에 전달하고, 여러 값을 반복하는 데 유용합니다.

Bicep의 배열은 변경할 수 없습니다. 선언된 후에는 해당 내용을 변경할 수 없습니다. 배열을 "수정"하려면 , 또는 concat.와 같은 mapfilter함수를 사용하여 새 배열을 만듭니다.

한 줄 또는 여러 줄 구문을 사용하여 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'
]

var arrayOfObjects = [
  { name: 'dev', size: 1 }
  { name: 'prod', size: 2 }
]

Bicep의 배열은 0부터 시작합니다. 인덱스별로 요소에 액세스할 수 있습니다.

var exampleArray = [1, 2, 3]
output firstElement int = exampleArray[0] // 1
output thirdElement int = exampleArray[2] // 3

var index = 1
output secondElement int = exampleArray[index] // 2

Bicep CLI 버전 0.34.x부터 구문을 사용하여 array[^index] 배열 ^1 의 끝에서 요소에 액세스할 수 있습니다. 마지막 요소, ^2 두 번째에서 마지막 요소까지 참조합니다.

var exampleArray = [1, 2, 3]

output lastElement int = exampleArray[^1] // 3
output secondToLastElement int = exampleArray[^2] // 2

범위를 벗어난 인덱스에 액세스하면 오류가 발생합니다.

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

앞의 예제에서 결과에 할당하면 2bar 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에서 문자열은 작은따옴표로 표시되며 한 줄로 선언해야 합니다. 코드 포인트가 있는 모든 유니코드 문자는 0 허용 10FFFF 됩니다.

param exampleString string = 'test value'

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

이스케이프 시퀀스 표시 값 주의
\\ \
\' '
\n LF(줄 바꿈)
\r CR(캐리지 리턴)
\t 탭 문자
\u{x} 유니코드 코드 포인트 x 16 x 진수 코드 포인트 값과 (둘 다 포함) 사이의 010FFFF 값을 나타냅니다. 앞에 오는 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'

앞의 예제에서 결과에 할당하면 bluecolorBlue 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 형식(예: , string또는 int.)으로 bool축소할 수 있어야 합니다. 그렇지 않으면 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
    
  • 리터럴만 멤버로 허용됩니다.

  • 모든 리터럴은 동일한 기본 데이터 형식이어야 합니다(예: 모든 문자열 또는 모든 정수).

사용자 정의 데이터 형식에서 공용 구조체 형식 구문을 사용할 수 있습니다.

Nullable 유형

형식 이름에 추가하면 기본 형식 또는 복합 형식을 null 허용으로 ? 만들 수 있습니다. 이렇게 하면 매개 변수, 변수 또는 출력이 null을 유효한 값으로 수락할 수 있습니다. 예시:

output description string? = null
output config object? = null
output optionalValue int? = null

보안 문자열 및 개체

보안 문자열은 문자열과 동일한 형식을 사용하고 보안 개체는 개체와 동일한 형식을 사용합니다. 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 파일 구조 및 구문을 참조 하세요.