Výstupy v Bicep

Tento článek popisuje, jak definovat výstupní hodnoty v souboru Bicep. Výstupy použijete v případě, že potřebujete vracet hodnoty z nasazených prostředků. V souboru Bicep jste omezeni na 64 výstupů. Další informace najdete v tématu Omezení šablon.

Definování výstupů

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

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

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

Následující příklad ukazuje, jak vrátit vlastnost z nasazeného prostředku. V tomto příkladu publicIP je symbolický název veřejné IP adresy nasazené 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

Následující příklad ukazuje, jak vrátit 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 vytvořit výstup vlastnosti, která má v názvu pomlčku, použijte kolem názvu hranaté závorky místo tečky. Například použijte ['property-name'] místo .property-name.

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

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

Následující příklad ukazuje použití výrazu typu:

param foo 'a' | 'b' = 'a'

output out 'a' | 'b' = foo

Použití dekorátorů

Dekorátory jsou zapsány ve formátu @expression a jsou umístěny nad deklaracemi výstupu. V následující tabulce jsou uvedeny dostupné dekorátory pro výstupy:

Dekoratér Přihlásit se Důvod Popis
popis vše řetězec Tím se zobrazí popis výstupu.
diskriminátor objekt řetězec Pomocí tohoto dekorátoru zajistěte, aby byla správná podtřída správně identifikována a spravována. Další informace naleznete v tématu Datový typ unie s vlastními značkami.
maxLength pole, řetězec int (integer) To poskytuje maximální délku pro výstupy řetězců a polí a hodnota je inkluzivní.
maxValue int (integer) int (integer) To poskytuje maximální hodnotu pro celočíselný výstup, a tato hodnota je zahrnuta.
metadata vše objekt Poskytuje vlastní vlastnosti, které se mají použít na výstup a mohou obsahovat vlastnost popisu, která je ekvivalentní dekorátoru popisu.
minLength pole, řetězec int (integer) To poskytuje minimální délku pro výstupy řetězců a polí a hodnota je inkluzivní.
minValue int (integer) int (integer) Toto poskytuje minimální hodnotu pro celočíselný výstup a tato hodnota je včetně.
zapečetěno objekt Žádná Stanovte BCP089 jako chybu místo upozornění, když je název vlastnosti uživatelsky definovaného datového typu pravděpodobně překlep. Další informace naleznete v tématu Zvýšení úrovně chyby.
zajistit řetězec, objekt Žádná Označí výstup jako zabezpečený. Hodnota zabezpečeného výstupu se neuloží do historie nasazení a nezaprotokoluje se. Další informace naleznete v tématu Zabezpečení řetězců a objektů.

Dekorátory jsou v sys prostoru názvů. Pokud potřebujete odlišit dekorátor od jiné položky se stejným názvem, uveďte dekorátor pomocí sys. Pokud například váš soubor Bicep obsahuje parametr s názvem description, musíte přidat sys obor názvů při použití dekorátoru description.

@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string

Popis

Pokud chcete přidat vysvětlení, přidejte popis k výstupním deklaracím. Příklad:

@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''

Text ve formátu Markdown lze použít pro text popisu.

Diskriminátor

Viz uživatelsky definovaný označený sjednocený datový typ.

Celočíselná omezení

Můžete nastavit minimální a maximální hodnoty pro celočíselné výstupy a jedno nebo obě omezení.

var thisMonth = 3

@minValue(1)
@maxValue(12)
output month int = thisMonth

Omezení délky

Pro výstupy řetězců a polí můžete zadat minimální a maximální délku. Můžete nastavit jedno nebo obě omezení. U řetězců délka označuje počet znaků. U polí určuje délka počet položek v matici.

Následující příklad deklaruje dva výstupy. Jedním výstupem je název účtu úložiště, který musí mít 3 až 24 znaků. Druhý výstup je pole, které musí mít 1–5 položek:

var accountName = uniqueString(resourceGroup().id)
var appNames = [
  'SyncSphere'
  'DataWhiz'
  'FlowMatrix'
]

@minLength(3)
@maxLength(24)
output storageAccountName string = accountName

@minLength(1)
@maxLength(5)
output applicationNames array = appNames

Metadáta

Pokud máte vlastní vlastnosti, které chcete použít na výstup, přidejte dekorátor metadat. V metadatech definujte objekt s vlastními názvy a hodnotami. Objekt, který definujete pro metadata, může obsahovat vlastnosti libovolného názvu a typu.

Tento dekorátor můžete použít ke sledování informací o výstupu, které není vhodné přidávat do popisu.

var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
output settings object = obj

Když poskytnete @metadata() dekorátoru vlastnost, která je v konfliktu s jiným dekorátorem, má tento dekorátor vždy přednost před čímkoli v dekorátoru @metadata() . Konfliktní vlastnost v rámci @metadata() hodnoty je redundantní a bude nahrazena. Další informace najdete v tématu Pravidlo Linter – žádná konfliktní metadata.

Zapečetěný

Viz Zvýšení úrovně chyby.

Zabezpečené výstupy

S Bicep verze 0.35.1 a novějšími můžete označit výstupy řetězců nebo objektů jako bezpečné. Když je výstup zdobený @secure(), Azure Resource Manager považuje výstupní hodnotu za citlivou, brání jejímu zaprotokolování nebo zobrazení v historii nasazení, webu Azure Portal nebo výstupech příkazového řádku.

@secure()
output demoPassword string

@secure()
output demoSecretObject object

Dekorátor @secure() je platný pouze pro výstupy typu řetězec nebo objekt, protože jsou v souladu s typy secureString a secureObject v šablonách ARM. Chcete-li bezpečně předat pole nebo čísla, zabalte je do objektu secureObject nebo je serializujte jako řetězec secureString.

Podmíněný výstup

Pokud hodnota, kterou chcete vrátit, závisí na podmínce v nasazení, použijte operátor ?.

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

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, zda byla nasazena nová.

Pokud chcete zadat podmíněný výstup v Bicep, použijte ? operátor. Následující příklad vrátí adresu URL koncového bodu nebo prázdný řetězec, který závisí na podmínce:

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

resource myStorageAccount 'Microsoft.Storage/storageAccounts@2025-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í, které potřebujete vrátit při vytváření šablony. Pomocí výrazu for můžete vrátit proměnlivý počet hodnot.

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

Následující příklad prochází přes pole:

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

resource nsg 'Microsoft.Network/networkSecurityGroups@2025-01-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ů

Pokud chcete získat výstupní hodnotu z modulu, použijte následující syntaxi:

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

Následující příklad ukazuje, jak načíst hodnotu z modulu pro nastavení IP adresy v nástroji pro vyrovnávání zatížení:

module publicIP 'modules/public-ip-address.bicep' = {
  name: 'public-ip-address-module'
}

resource loadBalancer 'Microsoft.Network/loadBalancers@2025-01-01' = {
  name: loadBalancerName
  location: location
  properties: {
    frontendIPConfigurations: [
      {
        name: 'name'
        properties: {
          publicIPAddress: {
            id: publicIP.outputs.resourceId
          }
        }
      }
    ]
    // ...
  }
}

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

Když nasazení proběhne úspěšně, výsledky nasazení automaticky zobrazí výstupní hodnoty.

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

(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í nula nebo více párů klíč-hodnota. Ř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 můžete zachovat původní řazení. Kvůli tomuto nedeterminismu nepoužívejte žádné předpoklady týkající se řazení klíčů objektů při psaní kódu, který komunikuje s parametry nasazení a výstupy.

Další kroky

Informace o vlastnostech, které jsou k dispozici pro výstupy, najdete v tématu Struktura a syntaxe souborů Bicep.