다음을 통해 공유


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@2019-06-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@2020-06-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@2020-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() 함수는 개체를 알파벳 순서로 정렬합니다. 다른 위치에서는 원래 순서를 유지할 수 있습니다. 이러한 비결정성 때문에 배포 매개 변수 및 출력과 상호 작용하는 코드를 작성할 때에는 개체 키의 순서를 가정하지 않아야 합니다.

다음 단계