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 máte omezení na 64 výstupů. Další informace najdete v tématu Omezení šablon.
Definování výstupních hodnot
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.
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.