本文說明如何在 Azure Resource Manager 範本 (ARM 範本) 中定義輸出值。 當您需要從部署後的資源中傳回值時,請使用輸出。
每個輸出值的格式都必須解析為其中一種 數據類型。
範本中的輸出限制為 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位址,有條件地傳回公用IP位址的資源識別碼:
"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
的 outputs 區段中使用 函式。 若要傳回巢狀範本中已部署資源的值,請將巢狀範本轉換成連結的範本。
公用IP位址範本會建立公用IP位址,並輸出資源標識碼。 負載平衡器範本會連結至上述範本。 它會在建立負載平衡器時,使用輸出中的資源識別符。
範例範本
下列範本不會部署任何資源。 它顯示了數種方法來傳回不同類型的輸出。
{
"$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 中,物件是零或多個索引鍵/值組的未排序集合。 根據實作而定,排序可能會不同。 例如,Bicep items() 函式會依字母順序排序物件。 在其他位置,可以保留原始排序。 由於這種非確定性,請避免在編寫與部署參數和輸出互動的程式碼時,對物件索引鍵的排序進行任何假設。
後續步驟
- 若要了解輸出的可用屬性,請參閱 瞭解ARM範本的結構和語法。