Bicep의 사용자 정의 함수
Bicep 파일 내에서 함수를 직접 만들 수 있습니다. 이러한 함수는 Bicep 파일에서 사용할 수 있습니다. 사용자 정의 함수는 Bicep 파일 내에서 자동으로 사용할 수 있는 표준 Bicep 함수와는 별개입니다. Bicep 파일에서 반복적으로 사용되는 복잡한 식이 있는 경우 고유한 함수를 만들 수 있습니다. 사용자 정의 함수를 사용하면 언어 버전 2.0 코드를 자동으로 생성할 수 있습니다.
이 기능을 사용하려면 Bicep CLI 버전 0.26.X 이상이 필요합니다.
제한 사항
사용자 함수를 정의할 때 몇 가지 제한 사항이 있습니다.
- 함수는 변수에 액세스할 수 없습니다.
- 함수는 함수에 정의된 매개 변수만 사용할 수 있습니다.
- 함수는 reference 함수 또는 list 함수를 사용할 수 없습니다.
- 함수의 매개 변수는 기본값을 가질 수 없습니다.
함수 정의
func
문을 사용하여 사용자 정의 함수를 정의합니다.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
예제
다음 예제에서는 사용자 정의 함수를 정의하고 사용하는 방법을 보여 줍니다.
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
func sayHelloString(name string) string => 'Hi ${name}!'
func sayHelloObject(name string) object => {
hello: 'Hi ${name}!'
}
func nameArray(name string) array => [
name
]
func addNameArray(name string) array => [
'Mary'
'Bob'
name
]
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
output greetingObject object = sayHelloObject('John')
output nameArray array = nameArray('John')
output addNameArray array = addNameArray('John')
이전 예제의 출력은 다음과 같습니다.
이름 | 타입 | 값 |
---|---|---|
azureUrl | 문자열 | https://microsoft.com/azure |
greetingArray | 배열 | ["Hi Evie!","Hi Casper!"] |
greetingObject | Object | {"hello":"Hi John!"} |
nameArray | 배열 | ["John"] |
addNameArray | 배열 | ["Mary","Bob","John"] |
Bicep CLI 버전 0.23.X 이상을 사용하면 사용자 정의 함수 내에서 다른 사용자 정의 함수를 유연하게 호출할 수 있습니다. 이전 예제에서 sayHelloString
함수 정의를 사용하면 sayHelloObject
함수를 다음과 같이 다시 정의할 수 있습니다.
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
사용자 정의 함수는 사용자 정의 데이터 형식 사용을 지원합니다. 예시:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
위 예제의 출력은 다음과 같습니다.
이름 | 타입 | 값 |
---|---|---|
요소 | positiveInt | 3 |
데코레이터 사용
데코레이터는 @expression
형식으로 작성되며 함수 선언 위에 배치됩니다. 다음 표에서는 함수에 사용할 수 있는 데코레이터를 보여 줍니다.
데코레이터 | 인수 | 설명 |
---|---|---|
description | string | 함수에 대한 설명을 제공합니다. |
export | 없음 | 함수를 다른 Bicep 파일에서 가져올 수 있음을 나타냅니다. |
metadata | 개체 | 함수에 적용할 사용자 지정 속성입니다. 설명 데코레이터와 동일한 Description 속성을 포함할 수 있습니다. |
데코레이터는 sys namespace에 있습니다. 같은 이름의 다른 항목과 데코레이터를 구별해야 하는 경우 데코레이터 앞에 sys
를 추가합니다. 예를 들어 Bicep 파일에 description
(이)라는 변수가 포함된 경우 설명 데코레이터를 사용할 때 sys 네임스페이스를 추가해야 합니다.
설명
설명을 추가하려면 함수 선언에 설명을 추가합니다. 예시:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
설명 텍스트에 Markdown 형식의 텍스트를 사용할 수 있습니다.
내보내기
@export()
을(를) 사용하여 함수를 다른 Bicep 파일과 공유합니다. 자세한 내용은 변수, 형식 및 함수 내보내기를 참조하세요.
메타데이터
사용자 정의 함수에 적용하려는 사용자 지정 속성이 있는 경우 메타데이터 데코레이터를 추가합니다. 메타데이터 내에서 사용자 지정 이름 및 값을 사용하여 개체를 정의합니다. 메타데이터에 대해 정의하는 개체에는 모든 이름과 형식의 속성이 포함될 수 있습니다.
이 데코레이터를 사용하여 설명에 추가하는 데 적합하지 않은 함수에 대한 정보를 추적할 수 있습니다.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
다른 데코레이터와 충돌하는 속성이 있는 @metadata()
데코레이터를 제공하면 해당 데코레이터는 항상 @metadata()
데코레이터의 모든 항목보다 우선합니다. 따라서 @metadata()
값 내에서 충돌하는 속성은 중복되며 바뀝니다. 자세한 내용은 충돌하는 메타데이터 없음을 참조하세요.
다음 단계
- Bicep 파일 구조 및 구문에 대해 알아보려면 Bicep 파일의 구조 및 구문 이해를 참조하세요.
- 사용 가능한 Bicep 함수 목록은 Bicep 함수를 참조하세요.