Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób definiowania wartości wyjściowych w pliku Bicep. Dane wyjściowe są używane, gdy trzeba zwracać wartości z wdrożonych zasobów. Masz ograniczenie do 64 wyników w pliku Bicep. Aby uzyskać więcej informacji, zobacz Limity szablonów.
Definiowanie danych wyjściowych
Składnia definiująca wartość wyjściową to:
output <name> <data-type or type-expression> = <value>
Dane wyjściowe mogą mieć taką samą nazwę jak parametr, zmienna, moduł lub zasób. Każda wartość wyjściowa musi odnosić się do jednego z typów danych lub jednego z typów danych zdefiniowanych przez użytkownika w Bicep.
W poniższym przykładzie pokazano, jak zwrócić właściwość z wdrożonego zasobu. W tym przykładzie publicIP
to nazwa symboliczna publicznego adresu IP wdrożonego w pliku Bicep. Wartość wyjściowa pobiera w pełni kwalifikowaną nazwę domeny dla publicznego adresu IP:
output hostname string = publicIP.properties.dnsSettings.fqdn
W następnym przykładzie pokazano, jak zwrócić dane wyjściowe różnych typów:
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()
Jeśli musisz wyświetlić właściwość, która ma łącznik w nazwie, użyj nawiasów kwadratowych wokół nazwy zamiast notacji kropkowej. Na przykład użyj polecenia ['property-name']
zamiast .property-name
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
W poniższym przykładzie pokazano, jak używać wyrażenia typu:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Korzystanie z dekoratorów
Dekoratory są zapisywane w formacie @expression
i są umieszczane powyżej deklaracji wyjściowych. W poniższej tabeli przedstawiono dostępne modyfikatory dla wyników:
Dekorator | Aplikuj do | Argumentacja | opis |
---|---|---|---|
opis | wszystkie | sznurek | Zawiera on opisy danych wyjściowych. |
Rozróżniacz | obiekt | sznurek | Użyj tego dekoratora, aby upewnić się, że prawidłowa podklasa jest identyfikowana i zarządzana. Aby uzyskać więcej informacji, zobacz Custom-tagged union data type (Typ danych unii z tagiem niestandardowym). |
maxLength | tablica, ciąg | int (integer) | Zapewnia to maksymalną długość wyjściowych ciągów znaków i tablic, a wartość zawiera wartość graniczną. |
maxValue | int (integer) | int (integer) | Zapewnia to maksymalną wartość dla danych wyjściowych liczby całkowitej, a wartość jest inkluzywna. |
metadane | wszystkie | obiekt | Udostępnia niestandardowe właściwości do zastosowania do wyników i może zawierać właściwość opisu, która jest równoważna dekoratorowi opisu. |
minLength | tablica, ciąg | int (integer) | To określa minimalną długość wyników ciągów i tablic, a wartość jest włączna. |
minValue | int (integer) | int (integer) | Określa minimalną wartość dla całkowitych danych wyjściowych, a wartość ta jest wliczana. |
zapieczętowany | obiekt | Brak | Podnieś poziom BCP089 z ostrzeżenia do błędu, gdy nazwa właściwości zdefiniowanego przez użytkownika typu danych jest prawdopodobnie literówką. Aby uzyskać więcej informacji, zobacz Podnoszenie poziomu błędu. |
zabezpieczyć | ciąg, obiekt | Brak | Oznacza dane wyjściowe jako bezpieczne. Wartość bezpiecznego wyjścia nie jest zapisywana w historii wdrożenia i nie jest logowana. Aby uzyskać więcej informacji, zobacz Zabezpieczanie ciągów i obiektów. |
Dekoratory znajdują się w przestrzeni nazw sys
. Jeśli musisz odróżnić dekorator od innego elementu o tej samej nazwie, należy poprzedzić dekorator znakiem sys
. Jeśli na przykład plik Bicep zawiera parametr o nazwie description
, należy dodać przestrzeń nazw sys
podczas korzystania z dekoratora opisu .
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
opis
Aby dodać wyjaśnienie, dodaj opis do deklaracji wyjściowych. Na przykład:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Tekst w formacie markdown może służyć do tekstu opisu.
Rozróżniacza
Zobacz Typ danych unii otagowanych niestandardowych tagach.
Ograniczenia liczb całkowitych
Można ustawić wartości minimalne i maksymalne dla danych wyjściowych liczby całkowitej oraz jedno lub oba ograniczenia.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Ograniczenia długości
Możesz określić minimalną i maksymalną długość dla danych wyjściowych ciągu i tablicy. Można ustawić jedno lub oba ograniczenia. W przypadku ciągów długość wskazuje liczbę znaków. W przypadku tablic długość wskazuje liczbę elementów w tablicy.
Poniższy przykład deklaruje dwa dane wyjściowe. Jednym z danych wyjściowych jest nazwa konta magazynu, która musi mieć od 3 do 24 znaków. Inne dane wyjściowe to tablica, która musi zawierać od 1 do 5 elementów:
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
Metadane
Jeśli masz właściwości niestandardowe, które chcesz zastosować do danych wyjściowych, dodaj dekorator metadanych. W metadanych zdefiniuj obiekt z niestandardowymi nazwami i wartościami. Obiekt zdefiniowany dla metadanych może zawierać właściwości dowolnej nazwy i typu.
Możesz użyć tego dekoratora do śledzenia informacji o danych wyjściowych, które nie mają sensu dodawać do opisu.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Kiedy nadasz dekoratorowi @metadata()
właściwość powodującą konflikt z innym dekoratorem, ten dekorator zawsze ma pierwszeństwo nad wszystkim w dekoratorze @metadata()
. Z kolei właściwość powodująca konflikt w @metadata()
jest niepotrzebna i zostanie zastąpiona. Aby uzyskać więcej informacji, zobacz reguła Linter — brak konfliktowych metadanych.
Zamknięte
Zobacz Podnoszenie poziomu błędu.
Bezpieczne dane wyjściowe
W wersji Bicep w wersji 0.35.1 lub nowszej można oznaczyć dane wyjściowe ciągów lub obiektów jako bezpieczne. Gdy dane wyjściowe są ozdobione elementem @secure()
, usługa Azure Resource Manager traktuje wartość wyjściową jako wrażliwą, uniemożliwiając jej zarejestrowanie lub wyświetlenie w historii wdrożenia, witrynie Azure Portal lub danych wyjściowych wiersza polecenia.
@secure()
output demoPassword string
@secure()
output demoSecretObject object
@secure()
Dekorator jest poprawny tylko dla wyników typu ciąg znaków lub obiekt, ponieważ są one zgodne z typami secureString i secureObject w szablonach ARM. Aby bezpiecznie przekazać tablice lub liczby, opakuj je w secureObject lub serializuj je jako secureString.
Dane wyjściowe warunkowe
Gdy zwracana wartość zależy od warunku we wdrożeniu, użyj operatora ?
.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
Zazwyczaj dane wyjściowe warunkowe są używane podczas warunkowego wdrażania zasobu. W poniższym przykładzie pokazano, jak warunkowo zwrócić identyfikator zasobu dla publicznego adresu IP na podstawie tego, czy został wdrożony nowy.
Aby określić dane wyjściowe warunkowe w Bicep, użyj operatora ?
. Poniższy przykład zwraca adres URL punktu końcowego lub pusty ciąg, który zależy od warunku:
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 : ''
Dynamiczna liczba danych wyjściowych
W niektórych sytuacjach, podczas tworzenia szablonu, nie znasz liczby wystąpień wartości, które musisz zwrócić. Możesz użyć wyrażenia for
, aby zwrócić zmienną liczbę wartości.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
Poniższy przykład iteruje przez tablicę:
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
}]
Aby uzyskać więcej informacji na temat pętli, zobacz Iteracyjne pętle w Bicep.
Dane wyjściowe z modułów
Aby uzyskać wartość wyjściową z modułu, użyj następującej składni:
<module-name>.outputs.<property-name>
W poniższym przykładzie pokazano, jak pobrać wartość z modułu w celu ustawienia adresu IP w module równoważenia obciążenia:
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
}
}
}
]
// ...
}
}
Pobieranie wartości wyjściowych
Po pomyślnym wdrożeniu wyniki wdrożenia automatycznie pokazują wartości wyjściowe.
Aby uzyskać wartości wyjściowe z historii wdrożenia, możesz użyć interfejsu wiersza polecenia platformy Azure lub skryptu programu Azure PowerShell.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Sortowanie obiektów w danych wyjściowych
W formacie JSON obiekt jest nieuporządkowaną kolekcją zero lub więcej par klucz-wartość. Kolejność może się różnić w zależności od implementacji. Na przykład funkcja Bicep items() sortuje obiekty w kolejności alfabetycznej. W innych miejscach można zachować oryginalną kolejność. Ze względu na ten niedeterminizm należy unikać wprowadzania wszelkich założeń dotyczących porządkowania kluczy obiektów podczas pisania kodu, który wchodzi w interakcje z parametrami i danymi wyjściowymi wdrożenia.
Następne kroki
Aby dowiedzieć się więcej o właściwościach dostępnych dla danych wyjściowych, zobacz struktura plików Bicep i składnia.