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 výrazu datového typu definovaného uživatelem.

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

Další 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čka, použijte místo tečky kolem názvu hranaté závorky. Například místo ['property-name'] ..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

Další informace naleznete v tématu Uživatelem definované datové typy.

Použití dekorátorů

Dekorátory jsou zapsány ve formátu @expression a jsou umístěny nad výstupní deklarace. Následující tabulka ukazuje dostupné dekorátory pro výstupy.

Dekoratér Platí pro Argument Popis
popis vše string Zadejte popis výstupu.
diskriminátor objekt string Pomocí tohoto dekorátoru se ujistěte, že je identifikována a spravována správná podtřída. Další informace naleznete v tématu Vlastní značky sjednocovacího datového typu.
maxLength array, string int Maximální délka pro výstupy řetězců a polí. Hodnota je inkluzivní.
maxValue int int Maximální hodnota celočíselného výstupu. Tato hodnota je inkluzivní.
metadata vše objekt Vlastní vlastnosti, které se mají použít na výstup. Může obsahovat vlastnost popisu, která je ekvivalentní popis dekorátoru.
minLength array, string int Minimální délka výstupu řetězce a pole. Hodnota je inkluzivní.
minValue int int Minimální hodnota celočíselného výstupu. Tato hodnota je inkluzivní.
sealed objekt Žádná Zvýšení úrovně BCP089 z upozornění na chybu, pokud název vlastnosti parametru use-define datový typ je pravděpodobně překlep. Další informace naleznete v tématu Zvýšení úrovně chyby.

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

@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 vlastní sjednocovaný datový typ.

Celočíselná omezení

Minimální a maximální hodnoty můžete nastavit pro celočíselné výstupy. Můžete nastavit 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

Metadata

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ý nemá smysl přidat 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 tedy redundantní a bude nahrazena. Další informace naleznete v tématu Žádné konfliktní metadata.

Zapečetěný

Viz Úroveň chyby Zvýšení úrovně.

Podmíněný výstup

Pokud vrácená hodnota 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, jestli byl nasazen 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 v závislosti na podmínce.

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

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

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

Následující příklad iteruje přes pole.

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

resource nsg 'Microsoft.Network/networkSecurityGroups@2023-11-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 nastavit IP adresu v nástroji pro vyrovnávání zatížení načtením hodnoty z modulu.

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

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

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 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í 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