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