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
- Informace o dostupných vlastnostech pro výstupy najdete v tématu Vysvětlení struktury a syntaxe Bicep.