Výstupy v bicep

Tento článek popisuje, jak v souboru bicep definovat výstupní hodnoty. Výstupy použijete, když potřebujete vrátit hodnoty z nasazených prostředků.

Definovat výstupní hodnoty

Syntaxe pro definování výstupní hodnoty je:

output <name> <data-type> = <value>

Výstup může mít stejný název jako parametr, proměnná, modul nebo prostředek. Každá výstupní hodnota musí být přeložena na jeden z datových typů.

Následující příklad ukazuje, jak vrátit vlastnost z nasazeného prostředku. V tomto příkladu publicIP je symbolický název pro veřejnou IP adresu, která je nasazena v souboru bicep. Výstupní hodnota získá plně kvalifikovaný název domény pro veřejnou IP adresu.

output hostname string = publicIP.properties.dnsSettings.fqdn

Další příklad ukazuje, jak vracet výstupy různých typů.

output stringOutput string = deployment().name
output integerOutput int = length(environment().authentication.audiences)
output booleanOutput bool = contains(deployment().name, 'demo')
output arrayOutput array = environment().authentication.audiences
output objectOutput object = subscription()

Pokud potřebujete výstup vlastnosti, která má v názvu pomlčku, místo zápisu tečky použijte hranaté závorky kolem názvu. Použijte například ['property-name'] místo .property-name .

var user = {
  'user-name': 'Test Person'
}

output stringOutput string = user['user-name']

Podmíněný výstup

Pokud hodnota, která má být vrácena, závisí na podmínce v nasazení, použijte ? operátor.

output <name> <data-type> = <condition> ? <true-value> : <false-value>

Obvykle používáte podmíněný výstup, když jste provedli podmíněně nasazení prostředku. Následující příklad ukazuje, jak podmíněně vracet ID prostředku pro veřejnou IP adresu na základě toho, zda byla nasazena nová.

K určení podmíněného výstupu v bicep použijte ? operátor. Následující příklad buďto vrátí adresu URL koncového bodu nebo prázdný řetězec v závislosti na podmínce.

param deployStorage bool = true
param storageName string
param location string = resourceGroup().location

resource myStorageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = if (deployStorage) {
  name: storageName
  location: location
  kind: 'StorageV2'
  sku:{
    name:'Standard_LRS'
    tier: 'Standard'
  }
  properties: {
    accessTier: 'Hot'
  }
}

output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''

Dynamický počet výstupů

V některých scénářích neznáte počet instancí hodnoty, které potřebujete vrátit při vytváření šablony. Proměnný počet hodnot můžete vracet pomocí for výrazu.

output <name> <data-type> = [for <item> in <collection>: {
  ...
}]

Následující příklad provede iteraci v poli.

param nsgLocation string = resourceGroup().location
param orgNames array = [
  'Contoso'
  'Fabrikam'
  'Coho'
]

resource nsg 'Microsoft.Network/networkSecurityGroups@2020-06-01' = [for name in orgNames: {
  name: 'nsg-${name}'
  location: nsgLocation
}]

output deployedNSGs array = [for (name, i) in orgNames: {
  orgName: name
  nsgName: nsg[i].name
  resourceId: nsg[i].id
}]

Další informace o smyčkách naleznete v tématu iterativní smyčky v bicep.

Výstupy z modulů

K získání výstupní hodnoty z modulu použijte následující syntaxi:

<module-name>.outputs.<property-name>

Následující příklad ukazuje, jak nastavit IP adresu v nástroji pro vyrovnávání zatížení načtením hodnoty z modulu. Název modulu je publicIP .

publicIPAddress: {
  id: publicIP.outputs.resourceID
}

Získat výstupní hodnoty

Po úspěšném nasazení se výstupní hodnoty automaticky vrátí do výsledků nasazení.

pokud chcete získat výstupní hodnoty z historie nasazení, můžete použít rozhraní příkazového řádku Azure nebo skript Azure PowerShell.

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

Další kroky