Bicep의 출력
이 문서에서는 Bicep 파일에서 출력 값을 정의하는 방법을 설명합니다. 배포된 리소스에서 값을 반환해야 하는 경우 출력을 사용합니다. Bicep 파일의 출력은 64개로 제한됩니다. 자세한 내용은 템플릿 제한을 참조하세요.
출력 정의
출력 값을 정의하는 구문은 다음과 같습니다.
output <name> <data-type or type-expression> = <value>
출력은 매개 변수, 변수, 모듈 또는 리소스와 동일한 이름을 가질 수 없습니다. 각 출력 값은 데이터 형식 또는 사용자 정의 데이터 형식 식 중 하나로 확인되어야 합니다.
다음 예제에서는 배포된 리소스에서 속성을 반환하는 방법을 보여 줍니다. 예에서 publicIP
는 Bicep 파일에 배포된 공용 IP 주소의 기호 이름입니다. 출력 값은 공용 IP 주소의 정규화된 도메인 이름을 가져옵니다.
output hostname string = publicIP.properties.dnsSettings.fqdn
다음 예에서는 다양한 유형의 출력을 반환하는 방법을 보여 줍니다.
output stringOutput string = deployment().name
output integerOutput int = length(environment().authentication.audiences)
output booleanOutput bool = contains(deployment().name, 'demo')
output arrayOutput array = environment().authentication.audiences
output objectOutput object = subscription()
이름에 하이픈이 포함된 속성을 출력해야 하는 경우 점 표기법 대신 이름 주위에 대괄호를 사용합니다. 예를 들어 .property-name
대신 ['property-name']
을 사용합니다.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
다음 예제에는 형식 식을 사용하는 방법을 보여 줍니다.
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
자세한 내용은 사용자 정의 데이터 형식을 참조하세요.
데코레이터 사용
데코레이터는 형식 @expression
으로 작성되며 출력 선언 위에 배치됩니다. 다음 표에서는 출력에 사용할 수 있는 데코레이터를 보여 줍니다.
데코레이터 | 적용 대상 | 인수 | 설명 |
---|---|---|---|
description | all | string | 출력에 대한 설명을 제공합니다. |
discriminator | 개체 | string | 이 데코레이터를 사용하면 올바른 하위 클래스가 식별되고 관리되는지 확인할 수 있습니다. 자세한 내용은 사용자 지정 태그가 지정된 공용 구조체 데이터 형식을 참조하세요. |
maxLength | 배열, 문자열 | int | 문자열 및 배열 출력의 최대 길이입니다. 해당 값이 포함되어 있습니다. |
maxValue | int | int | 정수 출력의 최대값입니다. 해당 값이 포함되어 있습니다. |
metadata | all | 개체 | 출력에 적용할 사용자 지정 속성입니다. 설명 데코레이터와 동일한 Description 속성을 포함할 수 있습니다. |
minLength | 배열, 문자열 | int | 문자열 및 배열 출력의 최소 길이입니다. 해당 값이 포함되어 있습니다. |
minValue | int | int | 정수 출력의 최소값입니다. 해당 값이 포함되어 있습니다. |
sealed | 개체 | 없음 | 사용-정의 데이터 형식의 속성 이름이 오타일 가능성이 높은 경우 경고에서 오류로 BCP089를 높입니다. 자세한 내용은 오류 수준 높이기를 참조하세요. |
데코레이터는 sys namespace에 있습니다. 같은 이름의 다른 항목과 데코레이터를 구별해야 하는 경우 데코레이터 앞에 sys
를 추가합니다. 예를 들어, Bicep 파일에 description
이라는 매개 변수가 포함된 경우 description 데코레이터를 사용할 때 sys namespace를 추가해야 합니다.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
설명
설명을 추가하려면 출력 선언에 설명을 추가합니다. 예시:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
설명 텍스트에 Markdown 형식의 텍스트를 사용할 수 있습니다.
판별자
사용자 지정 태그가 지정된 공용 구조체 데이터 형식을 참조 하세요.
정수 제약 조건
정수 출력의 최소값과 최대값을 설정할 수 있습니다. 하나 또는 두 개의 제약 조건을 설정할 수 있습니다.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
길이 제약 조건
문자열 및 배열 출력에 대한 최소 및 최대 길이를 지정할 수 있습니다. 하나 또는 두 개의 제약 조건을 설정할 수 있습니다. 문자열의 경우 길이는 문자 수를 나타냅니다. 배열의 경우 길이는 배열의 항목 수를 나타냅니다.
다음 예제에서는 두 개의 출력을 선언합니다. 한 출력은 3-24자여야 하는 스토리지 계정 이름에 대한 것입니다. 다른 출력은 1-5개 항목이 있어야 하는 배열입니다.
var accountName = uniqueString(resourceGroup().id)
var appNames = [
'SyncSphere'
'DataWhiz'
'FlowMatrix'
]
@minLength(3)
@maxLength(24)
output storageAccountName string = accountName
@minLength(1)
@maxLength(5)
output applicationNames array = appNames
메타데이터
출력에 적용할 사용자 지정 속성이 있는 경우 메타데이터 데코레이터를 추가합니다. 메타데이터 내에서 사용자 지정 이름 및 값을 사용하여 개체를 정의합니다. 메타데이터에 대해 정의하는 개체에는 모든 이름과 형식의 속성이 포함될 수 있습니다.
이 데코레이터를 사용하여 설명에 추가하는 데 적합하지 않은 출력에 대한 정보를 추적할 수 있습니다.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
다른 데코레이터와 충돌하는 속성이 있는 @metadata()
데코레이터를 제공하면 해당 데코레이터는 항상 @metadata()
데코레이터의 모든 항목보다 우선합니다. 따라서 @metadata()
값 내에서 충돌하는 속성은 중복되며 바뀝니다. 자세한 내용은 충돌하는 메타데이터 없음을 참조하세요.
봉인됨
오류 수준 높이기를 참조하세요.
조건부 출력
반환할 값이 배포 조건에 따라 달라지면 ?
연산자를 사용합니다.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
일반적으로 리소스를 조건부로 배포한 경우 조건부 출력을 사용합니다. 다음 예에서는 새 항목이 배포되었는지 여부에 따라 공용 IP 주소의 리소스 ID를 조건부로 반환하는 방법을 보여 줍니다.
Bicep에서 조건부 출력을 지정하려면 ?
연산자를 사용합니다. 다음 예에서는 조건에 따라 엔드포인트 URL 또는 빈 문자열을 반환합니다.
param deployStorage bool = true
param storageName string
param location string = resourceGroup().location
resource myStorageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = if (deployStorage) {
name: storageName
location: location
kind: 'StorageV2'
sku:{
name:'Standard_LRS'
tier: 'Standard'
}
properties: {
accessTier: 'Hot'
}
}
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
출력의 동적 수
일부 시나리오에서는 템플릿을 만들 때 반환해야 하는 값의 인스턴스 수를 알 수 없습니다. for
표현식을 사용하여 다양한 수의 값을 반환할 수 있습니다.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
다음 예제에서는 배열을 반복합니다.
param nsgLocation string = resourceGroup().location
param orgNames array = [
'Contoso'
'Fabrikam'
'Coho'
]
resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-01' = [for name in orgNames: {
name: 'nsg-${name}'
location: nsgLocation
}]
output deployedNSGs array = [for (name, i) in orgNames: {
orgName: name
nsgName: nsg[i].name
resourceId: nsg[i].id
}]
루프에 대한 자세한 내용은 Bicep의 반복 루프를 참조하세요.
모듈의 출력
모듈에서 출력 값을 얻으려면 다음 구문을 사용합니다.
<module-name>.outputs.<property-name>
다음 예제에서는 모듈에서 값을 검색하여 부하 분산 장치에서 IP 주소를 설정하는 방법을 보여 줍니다.
module publicIP 'modules/public-ip-address.bicep' = {
name: 'public-ip-address-module'
}
resource loadBalancer 'Microsoft.Network/loadBalancers@2023-11-01' = {
name: loadBalancerName
location: location
properties: {
frontendIPConfigurations: [
{
name: 'name'
properties: {
publicIPAddress: {
id: publicIP.outputs.resourceId
}
}
}
]
// ...
}
}
출력 값 가져오기
배포에 성공하면 배포 결과에 출력 값이 자동으로 반환됩니다.
배포 기록에서 출력 값을 가져오려면 Azure CLI 또는 Azure PowerShell 스크립트를 사용할 수 있습니다.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
출력의 개체 정렬
JSON에서 개체는 0개 이상 키/값 쌍의 순서가 지정되지 않은 컬렉션입니다. 순서는 구현에 따라 다를 수 있습니다. 예를 들어 Bicep items() 함수는 개체를 알파벳 순서로 정렬합니다. 다른 위치에서는 원래 순서를 유지할 수 있습니다. 이러한 비결정성 때문에 배포 매개 변수 및 출력과 상호 작용하는 코드를 작성할 때는 개체 키의 순서를 가정하지 않아야 합니다.
다음 단계
- 출력에 사용할 수 있는 속성에 대한 자세한 내용은 Bicep의 구조 및 구문 이해를 참조하세요.