Výstupy v šablonách ARM

Tento článek popisuje, jak definovat výstupní hodnoty v šabloně Azure Resource Manageru (šablona ARM). Výstupy použijete v případě, že potřebujete vracet hodnoty z nasazených prostředků.

Formát každé výstupní hodnoty se musí přeložit na jeden z datových typů.

Tip

Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete ve výstupech.

V šabloně máte omezení na 64 výstupů. Další informace najdete v tématu Omezení šablon.

Definování výstupních hodnot

Následující příklad ukazuje, jak vrátit vlastnost z nasazeného prostředku.

outputs Přidejte oddíl do šablony. Výstupní hodnota získá plně kvalifikovaný název domény pro veřejnou IP adresu.

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

Pokud potřebujete vytvořit výstup vlastnosti, která má v názvu pomlčka, použijte místo tečky kolem názvu hranaté závorky. Například místo ['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']]"
    }
  }
}

Podmíněný výstup

Prvek můžete použít condition k podmíněnému vrácení hodnoty. Podmíněný výstup se obvykle používá při podmíněném nasazení prostředku. Následující příklad ukazuje, jak podmíněně vrátit ID prostředku pro veřejnou IP adresu na základě toho, jestli byl nasazen nový:

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

Jednoduchý příklad podmíněného výstupu najdete v šabloně podmíněného výstupu.

Dynamický počet výstupů

V některých scénářích neznáte počet instancí hodnoty, které je potřeba vrátit při vytváření šablony. Pomocí iterativního výstupu můžete vrátit proměnlivý počet hodnot. copy Přidejte prvek pro iteraci výstupu.

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

Další informace najdete v tématu Iterace výstupu v šablonách ARM.

Propojené šablony

Související šablony můžete nasadit pomocí propojených šablon. Pokud chcete načíst výstupní hodnotu z propojené šablony, použijte odkazovou funkci v nadřazené šabloně. Syntaxe v nadřazené šabloně je:

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

Následující příklad ukazuje, jak nastavit IP adresu v nástroji pro vyrovnávání zatížení načtením hodnoty z propojené šablony.

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

Pokud má název vlastnosti pomlčka, používejte místo tečky kolem názvu hranaté závorky.

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

Funkci nemůžete použít reference ve výstupní části vnořené šablony. Pokud chcete vrátit hodnoty nasazeného prostředku v vnořené šabloně, převeďte vnořenou šablonu na propojenou šablonu.

Šablona veřejné IP adresy vytvoří veřejnou IP adresu a vypíše ID prostředku. Šablona nástroje pro vyrovnávání zatížení odkazuje na předchozí šablonu. Při vytváření nástroje pro vyrovnávání zatížení používá ID prostředku ve výstupu.

Příklad šablony

Následující šablona nenasazuje žádné prostředky. Ukazuje některé způsoby vrácení výstupů různých typů.

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

Získání výstupních hodnot

Po úspěšném nasazení se výstupní hodnoty automaticky vrátí ve výsledcích nasazení.

K získání výstupních hodnot z historie nasazení můžete použít skript.

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

Řazení objektů ve výstupech

Ve formátu JSON je objekt neuspořádanou kolekcí párů klíč/hodnota nula nebo více. Řazení se může lišit v závislosti na implementacích. Například funkce Bicep items() seřadí objekty v abecedním pořadí. Na jiných místech lze původní řazení zachovat. Kvůli tomuto ne determinismu nepoužívejte žádné předpoklady týkající se řazení klíčů objektů při psaní kódu, které interaguje s parametry nasazení a výstupy.

Další kroky