Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel beschreibt, wie Sie in einer Bicep-Datei Ausgabewerte definieren. Sie verwenden Ausgaben, wenn Werte von den bereitgestellten Ressourcen zurückgegeben werden müssen. Die Anzahl der Ausgaben in einer Bicep-Datei ist auf 64 beschränkt. Weitere Informationen finden Sie unter Vorlagengrenzwerte.
Definieren der Ausgaben
Die Syntax zum Definieren eines Ausgabewerts lautet:
output <name> <data-type or type-expression> = <value>
Eine Ausgabe darf nicht denselben Namen wie ein Parameter, eine Variable, ein Modul oder eine Ressource haben. Jeder Ausgabewert muss zu einem der Datentypen oder benutzerdefinierten Datentypen in Bicep aufgelöst werden.
Im folgenden Beispiel wird gezeigt, wie Sie eine Eigenschaft von einer bereitgestellten Ressource zurückgeben lassen. Im Beispiel ist publicIP
der symbolische Name für eine öffentliche IP-Adresse, die in der Bicep-Datei bereitgestellt wird. Der Ausgabewert ruft den vollqualifizierten Domänennamen für die öffentliche IP-Adresse ab:
output hostname string = publicIP.properties.dnsSettings.fqdn
Das nächste Beispiel zeigt, wie Ausgaben unterschiedlicher Typen zurückgegeben werden:
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()
Wenn Sie eine Eigenschaft ausgeben müssen, die einen Bindestrich im Namen aufweist, setzen Sie den Namen in eckige Klammern, anstatt die Punktnotation zu verwenden. Verwenden Sie z. B. ['property-name']
statt .property-name
.
var user = {
'user-name': 'Test Person'
}
output stringOutput string = user['user-name']
Das folgende Beispiel zeigt, wie Typausdrücke verwendet wird:
param foo 'a' | 'b' = 'a'
output out 'a' | 'b' = foo
Verwenden von Decorator-Elementen
Decorator-Elemente werden im Format @expression
geschrieben und oberhalb von Ausgabedeklarationen platziert. In der folgenden Tabelle werden die für die Ausgabe verfügbaren Decorator-Elemente gezeigt:
Dekorateur | Anwenden auf | Streitpunkt | Beschreibung |
---|---|---|---|
Beschreibung | alle | Zeichenfolge | Gibt Beschreibungen für die Ausgabe an. |
Diskriminator | Objekt | Zeichenfolge | Verwenden Sie dieses Decorator-Element, um sicherzustellen, dass die richtige Unterklasse identifiziert und verwaltet wird. Weitere Informationen finden Sie unter Benutzerdefinierter markierter Union-Datentyp. |
MaxLength | Array, Zeichenfolge | INT | Gibt die maximale Länge für Zeichenfolgen- und Arrayausgabe an; der Wert ist inklusiv. |
maxValue | INT | INT | Gibt den Maximalwert für die Ganzzahl an; der Wert ist inklusiv. |
Metadaten | alle | Objekt | Dies stellt benutzerdefinierte Eigenschaften bereit, die auf die Ausgabe angewendet werden sollen, und kann eine Beschreibungseigenschaft enthalten, die dem Beschreibungsdekorator entspricht. |
minLength | Array, Zeichenfolge | INT | Gibt die minimale Länge für Zeichenfolgen- und Arrayausgabe an; der Wert ist inklusiv. |
minValue | INT | INT | Gibt den Minimalwert für die Ganzzahl an; der Wert ist inklusiv. |
versiegelt | Objekt | nichts | Erhöhen Sie BCP089 von einer Warnung auf einen Fehler, wenn ein Eigenschaftenname eines benutzerdefinierten Datentyps wahrscheinlich einen Tippfehler enthält. Weitere Informationen finden Sie unter Erhöhen der Fehlerebene. |
sicher | String-Objekt | nichts | Markiert die Ausgabe als sicher. Der Wert für eine sichere Ausgabe wird nicht im Bereitstellungsverlauf gespeichert und nicht protokolliert. Weitere Informationen finden Sie unter Sichern von Zeichenfolgen und Objekten. |
Dekoratoren sind im sys
-Namespace. Wenn Sie diesen Decorator von einem anderen Element gleichen Namens unterscheiden müssen, stellen Sie dem Decorator sys
voran. Wenn Ihre Bicep-Datei z. B. einen Parameter mit dem Namen description
enthält, müssen Sie den sys
-Namespace bei Verwendung der Beschreibungsdekoration hinzufügen.
@sys.description('The name of the instance.')
param name string
@sys.description('The description of the instance to display.')
param description string
Beschreibung
Um eine Erklärung hinzuzufügen, fügen Sie eine Beschreibung zu Ausgabedeklarationen hinzu. Zum Beispiel:
@description('Conditionally output the endpoint.')
output endpoint string = deployStorage ? myStorageAccount.properties.primaryEndpoints.blob : ''
Mit Markdown formatierter Text kann für den Beschreibungstext verwendet werden.
Diskriminator
Weitere Informationen finden Sie unter Benutzerdefinierter markierter Union-Datentyp.
Ganzzahlige Einschränkungen
Sie können Mindest- und Höchstwerte für ganzzahlige Ausgaben und eine oder beide Einschränkungen festlegen.
var thisMonth = 3
@minValue(1)
@maxValue(12)
output month int = thisMonth
Längenbeschränkungen
Sie können die minimale und maximale Länge für die Zeichenfolge- und Array-Ausgabe angeben. Sie können eine oder beide Einschränkungen festlegen. Bei Zeichenfolgen gibt die Länge die Anzahl der Zeichen an. Bei Arrays gibt die Länge die Anzahl der Elemente im Array an.
Im folgenden Beispiel werden zwei Ausgaben deklariert. Eine Ausgabe bezieht sich auf den Namen eines Speicherkontos, der 3–24 Zeichen enthalten muss. Die andere Ausgabe ist ein Array, das aus 1 bis 5 Elementen bestehen muss:
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
Metadaten
Wenn Sie benutzerdefinierte Eigenschaften haben, die Sie auf eine Ausgabe anwenden möchten, fügen Sie einen Metadaten-Decorator hinzu. Definieren Sie innerhalb der Metadaten ein Objekt mit den benutzerdefinierten Namen und Werten. Das Objekt, das Sie für die Metadaten definieren, kann Eigenschaften eines beliebigen Namens und Typs enthalten.
Sie können diesen Decorator verwenden, um Informationen über die Ausgabe nachzuverfolgen, bei denen es nicht sinnvoll wäre, sie in die Beschreibung aufzunehmen.
var obj = {}
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
output settings object = obj
Wenn Sie ein @metadata()
-Decorator-Element mit einer Eigenschaft bereitstellen, die mit einem anderen Decorator-Element in Konflikt steht, hat dieses Decorator-Element immer Vorrang vor allen Elementen im @metadata()
-Decorator-Element. Wiederum ist die widersprüchliche Eigenschaft innerhalb des @metadata()
Werts redundant und wird ersetzt. Weitere Informationen finden Sie unter Linter-Regel – keine widersprüchlichen Metadaten.
Versiegelt
Siehe Erhöhen der Fehlerebene.
Sichere Ergebnisse
Mit Bicep Version 0.35.1 und höher können Sie Zeichenfolgen- oder Objektausgabe als sicher markieren. Wenn eine Ausgabe mit @secure()
versehen ist, behandelt Azure Resource Manager den Ausgabewert als vertraulich, verhindert, dass sie im Bereitstellungsverlauf, im Azure-Portal oder in Befehlszeilenausgaben protokolliert oder angezeigt wird.
@secure()
output demoPassword string
@secure()
output demoSecretObject object
Der @secure()
Dekorateur ist nur für Ausgaben vom Typ Zeichenfolge oder Objekt gültig, da diese mit den SecureString - und secureObject-Typen in ARM-Vorlagen übereinstimmen. Um Arrays oder Zahlen sicher zu übergeben, schließen Sie sie in ein secureObject ein, oder serialisieren Sie sie als secureString.
Bedingte Ausgabe
Wenn der zurückzugebende Wert von einer Bedingung in der Bereitstellung abhängt, verwenden Sie den ?
-Operator.
output <name> <data-type> = <condition> ? <true-value> : <false-value>
In der Regel verwenden Sie eine bedingte Ausgabe, wenn Sie eine Ressource bedingt bereitgestellt haben. Das folgende Beispiel zeigt, wie die Ressourcen-ID für eine öffentliche IP-Adresse abhängig davon zurückgegeben wird, ob eine neue Ressourcen-ID bereitgestellt wurde.
Um eine bedingte Ausgabe in Bicep anzugeben, verwenden Sie den ?
-Operator. Im folgenden Beispiel wird entweder eine Endpunkt-URL oder eine leere Zeichenfolge zurückgegeben, die von einer Bedingung abhängt:
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 : ''
Dynamische Anzahl von Ausgaben
In einigen Szenarien kennen Sie nicht die Anzahl der Instanzen eines Werts, die Sie beim Erstellen der Vorlage zurückgeben müssen. Sie können den for
Ausdruck verwenden, um eine variable Anzahl von Werten zurückzugeben.
output <name> <data-type> = [for <item> in <collection>: {
...
}]
Im folgenden Beispiel wird ein Array durchlaufen:
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
}]
Weitere Informationen zu Schleifen finden Sie unter Iterative Schleifen in Bicep.
Ausgaben von Modulen
Um von einem Modul einen Ausgabewert zu erhalten, verwenden Sie die folgende Syntax:
<module-name>.outputs.<property-name>
Das folgende Beispiel zeigt, wie Sie einen Wert aus einem Modul abrufen, um die IP-Adresse für einen Lastenausgleich festzulegen:
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
}
}
}
]
// ...
}
}
Abrufen von Ausgabewerten
Wenn die Bereitstellung erfolgreich ist, zeigen die Ergebnisse der Bereitstellung automatisch die Ausgabewerte an.
Sie können das Azure CLI- oder Azure PowerShell-Skript verwenden, um Ausgabewerte aus dem Bereitstellungsverlauf abzurufen.
(Get-AzResourceGroupDeployment `
-ResourceGroupName <resource-group-name> `
-Name <deployment-name>).Outputs.resourceID.value
Objektsortierung in Ausgaben
In JSON ist ein Objekt eine ungeordnete Auflistung von Null- oder mehr Schlüssel- oder Wertpaaren. Die Sortierung kann je nach Implementierung unterschiedlich sein. Beispielsweise sortiert die Bicep items() -Funktion die Objekte in alphabetischer Reihenfolge. An anderen Stellen können Sie die ursprüngliche Reihenfolge beibehalten. Vermeiden Sie aufgrund dieses Nichtdeterminismus beim Schreiben von Code, der mit Bereitstellungsparametern und Ausgaben interagiert, annahmen über die Anordnung von Objektschlüsseln.
Nächste Schritte
Informationen zu Eigenschaften, die für Ausgaben verfügbar sind, finden Sie unter Bicep-Dateistruktur und -syntax.