ARM 템플릿의 출력

이 문서에서는 ARM 템플릿(Azure Resource Manager 템플릿)에서 출력 값을 정의하는 방법을 설명합니다. 배포된 리소스에서 값을 반환해야 하는 경우 출력을 사용합니다.

각 출력 값의 형식은 데이터 유형 중 하나로 해석되어야 합니다.

ARM 템플릿과 동일한 기능을 제공하고 구문이 사용하기 더 쉽기 때문에 Bicep를 권장합니다. 자세한 내용은 출력을 참조하세요.

템플릿의 출력은 64개로 제한됩니다. 자세한 내용은 템플릿 제한을 참조하세요.

출력 값 정의

다음 예제에서는 배포된 리소스에서 속성을 반환하는 방법을 보여 줍니다.

outputs 섹션을 템플릿에 추가합니다. 출력 값은 공용 IP 주소의 정규화된 도메인 이름을 가져옵니다.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
  },
}

이름에 하이픈이 포함된 속성을 출력해야 하는 경우 점 표기법 대신 이름 주위에 대괄호를 사용합니다. 예를 들어 .property-name 대신 ['property-name']을 사용합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "variables": {
    "user": {
      "user-name": "Test Person"
    }
  },
  "resources": [
  ],
  "outputs": {
    "nameResult": {
      "type": "string",
      "value": "[variables('user')['user-name']]"
    }
  }
}

조건부 출력

condition 요소를 사용하여 값을 조건부로 반환할 수 있습니다. 일반적으로 리소스를 조건부로 배포한 경우 조건부 출력을 사용합니다. 다음 예에서는 새 항목이 배포되었는지 여부에 따라 공용 IP 주소의 리소스 ID를 조건부로 반환하는 방법을 보여 줍니다.

"outputs": {
  "resourceID": {
    "condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
    "type": "string",
    "value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
  }
}

조건부 출력의 간단한 예는 조건부 출력 템플릿을 참조하세요.

출력의 동적 수

일부 시나리오에서는 템플릿을 만들 때 반환해야 하는 값의 인스턴스 수를 알 수 없습니다. 반복 출력을 사용하여 가변 개수의 값을 반환할 수 있습니다. copy 요소를 추가하여 출력을 반복합니다.

"outputs": {
  "storageEndpoints": {
    "type": "array",
    "copy": {
      "count": "[parameters('storageCount')]",
      "input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
    }
  }
}

자세한 내용은 ARM 템플릿에서 출력 반복을 참조하세요.

연결된 템플릿

연결된 템플릿을 사용하여 관련 템플릿을 배포할 수 있습니다. 링크된 템플릿에서 출력 값을 검색하려면 상위 템플릿에서 reference 함수를 사용하세요. 부모 템플릿의 구문은 다음과 같습니다.

"[reference('<deploymentName>').outputs.<propertyName>.value]"

다음 예제에서는 연결된 템플릿에서 값을 검색하여 부하 분산 장치에서 IP 주소를 설정하는 방법을 보여 줍니다.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs.resourceID.value]"
}

속성 이름에 하이픈이 있는 경우 점 표기법 대신 이름 주위에 대괄호를 사용합니다.

"publicIPAddress": {
  "id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}

reference 함수는 중첩된 템플릿의 출력 섹션에 사용할 수 없습니다. 중첩된 템플릿에서 배포된 리소스의 값을 반환하려면 중첩된 템플릿을 연결된 템플릿으로 변환합니다.

공개 IP 주소 템플릿은 공개 IP 주소를 만들고 리소스 ID를 출력합니다. 부하 분산기 템플릿은 이전 템플릿에 연결됩니다. 부하 분산 장치를 만들 때 출력에 리소스 ID를 사용합니다.

예제 템플릿

다음 템플릿은 리소스를 배포하지 않습니다. 다양한 형식의 출력을 반환하는 몇가지 방법을 보여 줍니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [],
  "outputs": {
    "stringOutput": {
      "type": "string",
      "value": "[deployment().name]"
    },
    "integerOutput": {
      "type": "int",
      "value": "[length(environment().authentication.audiences)]"
    },
    "booleanOutput": {
      "type": "bool",
      "value": "[contains(deployment().name, 'demo')]"
    },
    "arrayOutput": {
      "type": "array",
      "value": "[environment().authentication.audiences]"
    },
    "objectOutput": {
      "type": "object",
      "value": "[subscription()]"
    }
  }
}

출력 값 가져오기

배포에 성공하면 배포 결과에 출력 값이 자동으로 반환됩니다.

배포 기록에서 출력 값을 가져오려면 스크립트를 사용할 수 있습니다.

(Get-AzResourceGroupDeployment `
  -ResourceGroupName <resource-group-name> `
  -Name <deployment-name>).Outputs.resourceID.value

출력의 개체 정렬

JSON에서 개체는 0개 이상 키/값 쌍의 순서가 지정되지 않은 컬렉션입니다. 순서는 구현에 따라 다를 수 있습니다. 예를 들어 Bicep items() 함수는 개체를 알파벳 순서로 정렬합니다. 다른 위치에서는 원래 순서를 유지할 수 있습니다. 이러한 비결정성 때문에 배포 매개 변수 및 출력과 상호 작용하는 코드를 작성할 때는 개체 키의 순서를 가정하지 않아야 합니다.

다음 단계