이 문서에서는 Bicep 파일에서 출력 값을 정의하는 방법을 설명합니다. 배포된 리소스에서 값을 반환해야 하는 경우 출력을 사용합니다. Bicep 파일의 출력은 64개로 제한됩니다. 자세한 내용은 템플릿 제한을 참조하세요.
출력 정의
출력 값을 정의하는 구문은 다음과 같습니다.
output <name> <data-type or type-expression> = <value>
출력은 매개 변수, 변수, 모듈 또는 리소스와 동일한 이름을 가질 수 없습니다. 각 출력 값은 Bicep의 데이터 형식 또는 사용자 정의 데이터 형식 중 하나로 확인되어야 합니다.
다음 예제에서는 배포된 리소스에서 속성을 반환하는 방법을 보여 줍니다. 이 예에서 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
형식으로 작성되며 출력 선언 위에 배치됩니다. 다음 표에서는 출력에 사용할 수 있는 데코레이터를 보여 줍니다.
데코레이터 | 적용 대상 | 인수 | 설명 |
---|---|---|---|
묘사 | 모두 | 문자열 | 출력에 대한 설명을 제공합니다. |
판별자 | 객체 | 문자열 | 이 데코레이터를 사용하면 올바른 하위 클래스가 식별되고 관리되는지 확인할 수 있습니다. 자세한 내용은 사용자 지정 태그가 지정된 공용 구조체 데이터 형식을 참조하세요. |
maxLength | 배열, 문자열 | 정수 (int) | 문자열 및 배열 출력의 최대 길이를 제공하며 설정 값도 포함됩니다. |
maxValue | 정수 (int) | 정수 (int) | 정수 출력의 최대값을 제공하며 설정 값도 포함됩니다. |
메타데이터 | 모두 | 객체 | 출력에 적용할 사용자 지정 속성을 제공하고 description 데코레이터에 해당하는 설명 속성을 포함할 수 있습니다. |
minLength | 배열, 문자열 | 정수 (int) | 문자열 및 배열 출력의 최소 길이를 제공하며 설정 값도 포함됩니다. |
minValue | 정수 (int) | 정수 (int) | 정수 출력의 최소값을 제공하며 설정 값도 포함됩니다. |
밀봉 | 객체 | 없음 | 사용-정의 데이터 형식의 속성 이름이 오타일 가능성이 높은 경우 경고에서 오류로 BCP089를 높입니다. 자세한 내용은 오류 수준 높이기를 참조하세요. |
확실한 | 문자열, 개체 | 없음 | 출력을 안전한 것으로 표시합니다. 보안 출력의 값은 배포 기록에 저장되지 않으며 기록되지 않습니다. 자세한 내용은 보안 문자열 및 개체를 참조하세요. |
데코레이터는 sys
네임스페이스 형식입니다. 같은 이름의 다른 항목과 데코레이터를 구별해야 하는 경우 데코레이터 앞에 sys
를 추가합니다. 예를 들어, Bicep 파일에 description
이라는 매개 변수가 포함된 경우 sys
데코레이터를 사용할 때 네임스페이스를 추가해야 합니다.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
설명
설명을 추가하려면 출력 선언에 description 데코레이터를 추가합니다. 예를 들면 다음과 같습니다.
@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()
값 내에서 충돌하는 속성은 중복 항목이라 바뀌게 됩니다. 자세한 내용은 Linter 규칙 - 충돌하는 메타데이터 없음을 참조하세요.
봉인됨
오류 수준 높이기를 참조하세요.
보안 출력
Bicep 버전 0.35.1 이상을 사용하면 문자열 또는 개체 출력을 안전한 것으로 표시할 수 있습니다. 출력이 데코레이팅되면 @secure()
Azure Resource Manager는 출력 값을 중요한 값으로 처리하여 배포 기록, Azure Portal 또는 명령줄 출력에 기록되거나 표시되지 않도록 합니다.
@secure()
output demoPassword string
@secure()
output demoSecretObject object
@secure()
데코레이터는 ARM 템플릿의 secureString 및 secureObject 형식에 맞춰 정렬되므로 문자열 또는 개체 형식의 출력에만 유효합니다. 배열 또는 숫자를 안전하게 전달하려면 secureObject로 래핑하거나 secureString으로 serialize합니다.
조건부 출력
반환할 값이 배포 조건에 따라 달라지면 ?
연산자를 사용합니다.
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 파일 구조 및 구문을 참조하세요.