Dane wyjściowe w szablonach usługi ARM
W tym artykule opisano sposób definiowania wartości wyjściowych w szablonie usługi Azure Resource Manager (szablon usługi ARM). Dane wyjściowe są używane, gdy trzeba zwracać wartości z wdrożonych zasobów.
Format każdej wartości wyjściowej musi być rozpoznawany jako jeden z typów danych.
Napiwek
Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz dane wyjściowe.
W szablonie jest ograniczonych do 64 danych wyjściowych. Aby uzyskać więcej informacji, zobacz Limity szablonów.
Definiowanie wartości wyjściowych
W poniższym przykładzie pokazano, jak zwrócić właściwość z wdrożonego zasobu.
Dodaj sekcję outputs
do szablonu. Wartość wyjściowa pobiera w pełni kwalifikowaną nazwę domeny dla publicznego adresu IP.
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))).dnsSettings.fqdn]"
},
}
Jeśli musisz wyświetlić właściwość, która ma łącznik w nazwie, użyj nawiasów kwadratowych wokół nazwy zamiast notacji kropkowej. Na przykład użyj polecenia ['property-name']
zamiast .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']]"
}
}
}
Dane wyjściowe warunkowe
Możesz użyć condition
elementu , aby warunkowo zwrócić wartość. Zazwyczaj dane wyjściowe warunkowe są używane podczas warunkowego wdrażania zasobu. W poniższym przykładzie pokazano, jak warunkowo zwrócić identyfikator zasobu dla publicznego adresu IP w zależności od tego, czy wdrożono nowy:
"outputs": {
"resourceID": {
"condition": "[equals(parameters('publicIpNewOrExisting'), 'new')]",
"type": "string",
"value": "[resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIPAddresses_name'))]"
}
}
Aby zapoznać się z prostym przykładem danych wyjściowych warunkowych, zobacz szablon danych wyjściowych warunkowych.
Dynamiczna liczba danych wyjściowych
W niektórych scenariuszach nie wiadomo, ile wystąpień wartości należy zwrócić podczas tworzenia szablonu. Można zwrócić zmienną liczbę wartości przy użyciu iteracyjnych danych wyjściowych. Dodaj element, copy
aby iterować dane wyjściowe.
"outputs": {
"storageEndpoints": {
"type": "array",
"copy": {
"count": "[parameters('storageCount')]",
"input": "[reference(concat(copyIndex(), variables('baseName'))).primaryEndpoints.blob]"
}
}
}
Aby uzyskać więcej informacji, zobacz Iteracja danych wyjściowych w szablonach usługi ARM.
Połączone szablony
Powiązane szablony można wdrażać przy użyciu połączonych szablonów. Aby pobrać wartość wyjściową z połączonego szablonu, użyj funkcji reference w szablonie nadrzędnym. Składnia w szablonie nadrzędnym to:
"[reference('<deploymentName>').outputs.<propertyName>.value]"
W poniższym przykładzie pokazano, jak ustawić adres IP w module równoważenia obciążenia, pobierając wartość z połączonego szablonu.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs.resourceID.value]"
}
Jeśli nazwa właściwości ma łącznik, użyj nawiasów kwadratowych wokół nazwy zamiast notacji kropkowej.
"publicIPAddress": {
"id": "[reference('linkedTemplate').outputs['resource-ID'].value]"
}
Nie można użyć reference
funkcji w sekcji danych wyjściowych szablonu zagnieżdżonego. Aby zwrócić wartości wdrożonego zasobu w szablonie zagnieżdżonym, przekonwertuj zagnieżdżony szablon na połączony szablon.
Szablon Publiczny adres IP tworzy publiczny adres IP i generuje identyfikator zasobu. Szablon modułu równoważenia obciążenia łączy się z poprzednim szablonem. Używa identyfikatora zasobu w danych wyjściowych podczas tworzenia modułu równoważenia obciążenia.
Przykładowy szablon
Poniższy szablon nie wdraża żadnych zasobów. Przedstawia kilka sposobów zwracania danych wyjściowych różnych typów.
{
"$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()]"
}
}
}
Pobieranie wartości wyjściowych
Gdy wdrożenie zakończy się pomyślnie, wartości wyjściowe zostaną automatycznie zwrócone w wynikach wdrożenia.
Aby uzyskać wartości wyjściowe z historii wdrożenia, możesz użyć skryptu.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Sortowanie obiektów w danych wyjściowych
W formacie JSON obiekt jest nieurządkowaną kolekcją par klucz/wartość zero lub więcej. Kolejność może być różna w zależności od implementacji. Na przykład funkcja Bicep items() sortuje obiekty w kolejności alfabetycznej. W innych miejscach można zachować oryginalną kolejność. Ze względu na ten niedeterminizm należy unikać wprowadzania wszelkich założeń dotyczących porządkowania kluczy obiektów podczas pisania kodu, który wchodzi w interakcje z parametrami i danymi wyjściowymi wdrożeń.
Następne kroki
- Aby dowiedzieć się więcej o dostępnych właściwościach danych wyjściowych, zobacz Omówienie struktury i składni szablonów usługi ARM.