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
자세한 내용은 사용자 정의 데이터 형식을 참조하세요.
조건부 출력
반환할 값이 배포 조건에 따라 달라지면 ?
연산자를 사용합니다.
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의 구조 및 구문 이해를 참조하세요.