Freigeben über


Ausgaben in ARM-Vorlagen

In diesem Artikel wird beschrieben, wie Ausgabewerte in Ihrer Azure Resource Manager-Vorlage (ARM-Vorlage) definiert werden. Sie verwenden Ausgaben, wenn Werte von den bereitgestellten Ressourcen zurückgegeben werden müssen.

Das Format der einzelnen Ausgabewerte muss in einen der Datentypen aufgelöst werden.

Tipp

Bicep wird empfohlen, da sie dieselben Funktionen wie ARM-Vorlagen bietet und die Syntax einfacher zu verwenden ist. Weitere Informationen finden Sie in den Ergebnissen.

Sie sind auf 64 Ausgaben in einer Vorlage beschränkt. Weitere Informationen finden Sie unter Vorlagenbeschränkungen.

Definieren von Ausgabewerten

Im folgenden Beispiel wird gezeigt, wie Sie eine Eigenschaft von einer bereitgestellten Ressource zurückgeben lassen. Fügen Sie der Vorlage den Ausgabeabschnitt hinzu. Der Ausgabewert ruft den vollqualifizierten Domänennamen für eine öffentliche IP-Adresse ab:

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

Wenn Sie eine Eigenschaft ausgeben müssen, die einen Bindestrich im Namen aufweist, setzen Sie den Namen in eckige Klammern, anstatt die Punktnotation zu verwenden. Verwenden Sie z. B. ['property-name'] statt .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']]"
    }
  }
}

Bedingte Ausgabe

Sie können das condition Element verwenden, um einen Wert bedingt zurückzugeben. In der Regel verwenden Sie eine bedingte Ausgabe, wenn Sie eine Ressource bedingt bereitgestellt haben. Das folgende Beispiel zeigt, wie Sie die Ressourcen-ID für eine öffentliche IP-Adresse bedingt zurückgeben, basierend darauf, ob eine neue bereitgestellt wurde:

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

Ein einfaches Beispiel für die bedingte Ausgabe finden Sie in der Vorlage für bedingte Ausgabe.

Dynamische Anzahl von Ausgaben

In einigen Szenarien wissen Sie nicht, wie viele Instanzen eines Werts beim Erstellen der Vorlage zurückgegeben werden müssen. Sie können eine variable Anzahl von Werten zurückgeben, indem Sie die iterative Ausgabe verwenden. Fügen Sie das copy Element hinzu, um eine Ausgabe zu durchlaufen:

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

Weitere Informationen finden Sie unter Ausgabeiteration in ARM-Vorlagen.

Verknüpfte Vorlagen

Sie können verwandte Vorlagen mithilfe verknüpfter Vorlagen bereitstellen. Verwenden Sie die Funktion in der reference übergeordneten Vorlage, um den Ausgabewert aus einer verknüpften Vorlage abzurufen. Die Syntax in der übergeordneten Vorlage lautet:

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

Das folgende Beispiel zeigt, wie Die IP-Adresse für ein Lastenausgleichsmodul festgelegt wird, indem ein Wert aus einer verknüpften Vorlage abgerufen wird:

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

Wenn der Eigenschaftenname einen Bindestrich aufweist, verwenden Sie eckige Klammern um den Namen anstelle der Punktnotation.

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

Sie können die reference Funktion nicht im Ausgabeabschnitt einer geschachtelten Vorlage verwenden. Um die Werte für eine bereitgestellte Ressource in einer geschachtelten Vorlage zurückzugeben, konvertieren Sie Ihre geschachtelte Vorlage in eine verknüpfte Vorlage.

Beispielvorlage

Die folgende Vorlage stellt keine Ressourcen bereit. Es zeigt einige Möglichkeiten zum Zurückgeben von Ausgaben verschiedener Typen:

{
  "$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()]"
    }
  }
}

Abrufen von Ausgabewerten

Bei erfolgreicher Bereitstellung werden die Ausgabewerte automatisch in den Ergebnissen der Bereitstellung zurückgegeben.

Um Ausgabewerte aus dem Bereitstellungsverlauf abzurufen, können Sie skript verwenden.

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

Sortieren von Objekten in Ausgaben

In JSON ist ein Objekt eine nicht geordnete Auflistung von null oder mehr Schlüssel-Wert-Paaren. Die Reihenfolge kann je nach Implementierung unterschiedlich sein. Beispielsweise sortiert die Bicep items() -Funktion die Objekte in der alphabetischen Reihenfolge. An anderen Stellen kann die ursprüngliche Reihenfolge beibehalten werden. Aufgrund dieses Nicht-Determinismus sollten Sie beim Schreiben von Code, der mit den Parametern und Ausgaben der Bereitstellung interagiert, keine Annahmen über die Reihenfolge der Objektschlüssel anstellen.

Nächste Schritte

Informationen zu den verfügbaren Eigenschaften für Ausgaben finden Sie in der Struktur und Syntax von ARM-Vorlagen.