Freigeben über


BICEP-Dateistruktur und-Syntax

In diesem Artikel wird die Struktur und Syntax einer Bicep-Datei beschrieben. Er zeigt die verschiedenen Abschnitte der Datei und die Eigenschaften, die in diesen Abschnitten verfügbar sind.

Ein schrittweises Tutorial über den Erstellungsprozess einer Bicep-Datei finden Sie unter Schnellstart: Erstellen von Bicep-Dateien mit Visual Studio Code.

Bicep-Format

Bicep ist eine deklarative Sprache, was bedeutet, dass die Elemente in beliebiger Reihenfolge enthalten sein können. Im Gegensatz zu imperativen Sprachen wirkt sich die Reihenfolge der Elemente nicht darauf aus, wie die Bereitstellung verarbeitet wird.

Eine Bicep-Datei weist die folgenden Elemente auf:

@<decorator>(<argument>)
metadata <metadata-name> = ANY

targetScope = '<scope>'

@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>

@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

@<decorator>(<argument>)
param <parameter-name> <parameter-data-type> = <default-value>

@<decorator>(<argument>)
var <variable-name> = <variable-value>

@<decorator>(<argument>)
resource <resource-symbolic-name> '<resource-type>@<api-version>' = {
  <resource-properties>
}

@<decorator>(<argument>)
module <module-symbolic-name> '<path-to-file>' = {
  name: '<linked-deployment-name>'
  params: {
    <parameter-names-and-values>
  }
}

@<decorator>(<argument>)
output <output-name> <output-data-type> = <output-value>

Das folgende Beispiel zeigt eine Implementierung dieser Elemente:

metadata description = 'Creates a storage account and a web app'

@description('The prefix to use for the storage account name.')
@minLength(3)
@maxLength(11)
param storagePrefix string

param storageSKU string = 'Standard_LRS'
param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

module webModule './webApp.bicep' = {
  name: 'webDeploy'
  params: {
    skuName: 'S1'
    location: location
  }
}

Metadaten

Metadaten in Bicep sind ein nicht typisierter Wert, den Sie in Ihre Bicep-Dateien einschließen können. Metadaten enthalten ergänzende Informationen zu Ihren Bicep-Dateien, z. B. Name, Beschreibung, Autor und Erstellungsdatum.

Zielbereich

Standardmäßig ist der Zielbereich auf festgelegt resourceGroup. Wenn Sie auf der Ebene der Ressourcengruppe bereitstellen, müssen Sie den Zielbereich in Ihrer Bicep-Datei nicht festlegen.

Zulässige Werte sind:

In einem Modul können Sie einen Bereich angeben, der sich vom Bereich für den Rest der Bicep-Datei unterscheidet. Weitere Informationen finden Sie unter Konfigurieren des Modulbereichs.

Decorator-Elemente

Sie können für jedes der folgenden Elemente einen oder mehrere Decoratoren hinzufügen:

In der folgenden Tabelle sind die Dekorateure aufgeführt:

Decorator Auf Element anwenden Auf Datentyp anwenden Argument BESCHREIBUNG
allowed param all array Verwenden Sie diesen Decorator, um sicherzustellen, dass der Benutzer korrekte Werte bereitstellt. Dieser Decorator ist nur auf param Anweisungen zulässig. Um zu deklarieren, dass eine Eigenschaft einer Gruppe vordefinierter Werte in einer type oder output-Anweisung angehören muss, verwenden Sie die Union-Typsyntax. Sie können auch die Union-Typsyntax in param-Anweisungen verwenden.
batchSize Modul, Ressource integer Richten Sie Instanzen so ein, dass sie sequenziell bereitgestellt werden.
description func, param, module, output, resource, type, var all Zeichenfolge Geben Sie Beschreibungen für die Elemente an. Verwenden Sie Markdown-formatierten Text für den Beschreibungstext.
discriminator Param, Typ, Ausgabe Objekt (object) Zeichenfolge Verwenden Sie diesen Dekorator, um sicherzustellen, dass die richtige Unterklasse identifiziert und verwaltet wird. Weitere Informationen finden Sie unter Benutzerdefinierter markierter Union-Datentyp.
Export Func, Typ, Var all none Gibt an, dass eine andere Bicep-Datei das Element importieren kann.
maxLength Param, Ausgabe, Typ Array, Zeichenfolge INT Die maximale Länge für Zeichenfolge- und Array-Elemente. Der Stop-Wert ist inklusiv.
maxValue Param, Ausgabe, Typ INT INT Der maximale Wert für die ganzzahligen Elemente. Der Stop-Wert ist inklusiv.
metadata func, output, param, type all Objekt (object) Benutzerdefinierte Eigenschaften, die auf die Elemente angewendet werden sollen. Kann eine Beschreibungseigenschaft enthalten, die dem Beschreibungsdekorator entspricht.
minLength Param, Ausgabe, Typ Array, Zeichenfolge INT Die minimale Länge für Zeichenfolge- und Array-Elemente. Der Stop-Wert ist inklusiv.
minValue Param, Ausgabe, Typ INT INT Der minimale Wert für die ganzzahligen Elemente. Der Stop-Wert ist inklusiv.
sealed Param, Typ, Ausgabe Objekt (object) none Erhöhen Sie BCP089 von einer Warnung auf einen Fehler, wenn ein Eigenschaftsname eines benutzerdefinierten Datentyps wahrscheinlich ein Tippfehler ist. Weitere Informationen finden Sie unter Erhöhen der Fehlerebene.
secure Param, Typ String-Objekt none Markiert den Parameter als sicher. Der Wert eines sicheren Parameters wird weder im Bereitstellungsverlauf gespeichert noch protokolliert. Weitere Informationen finden Sie unter Sichern von Zeichenfolgen und Objekten.

Parameter

Verwenden Sie Parameter für Werte, die für verschiedene Bereitstellungen variieren müssen. Sie können einen Standardwert für den Parameter definieren, der verwendet wird, wenn während der Bereitstellung kein Wert bereitgestellt wird.

Sie können z. B. einen SKU Parameter hinzufügen, um unterschiedliche Größen für eine Ressource anzugeben. Sie können unterschiedliche Werte übergeben, je nachdem, ob Sie die Bereitstellung in einer Test- oder Produktionsumgebungen durchführen.

param storageSKU string = 'Standard_LRS'

Der Parameter kann in Ihrer Bicep-Datei verwendet werden.

sku: {
  name: storageSKU
}

Sie können für jeden Parameter ein oder mehrere Decorator-Zeichen hinzufügen. Weitere Informationen finden Sie unter Decorators verwenden.

Weitere Informationen finden Sie unter Parameter in Bicep.

Variablen

Um ihre Bicep-Datei besser lesbar zu machen, kapseln Sie komplexe Ausdrücke in einer Variablen. Sie können beispielsweise eine Variable für einen Ressourcennamen hinzufügen, der erstellt wird, indem Sie mehrere Werte miteinander verketten.

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

Wenden Sie diese Variable überall an, wo Sie den komplexen Ausdruck benötigen.

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: uniqueStorageName

Sie können für jede Variable ein oder mehrere Decorator-Zeichen hinzufügen. Weitere Informationen finden Sie unter Decorators verwenden.

Weitere Informationen finden Sie unter Variablen in Bicep.

Typen

Sie können die Anweisung „type“ verwenden, um benutzerdefinierte Datentypen zu definieren.

param location string = resourceGroup().location

type storageAccountSkuType = 'Standard_LRS' | 'Standard_GRS'

type storageAccountConfigType = {
  name: string
  sku: storageAccountSkuType
}

param storageAccountConfig storageAccountConfigType = {
  name: 'storage${uniqueString(resourceGroup().id)}'
  sku: 'Standard_LRS'
}

resource storageAccount 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: storageAccountConfig.name
  location: location
  sku: {
    name: storageAccountConfig.sku
  }
  kind: 'StorageV2'
}

Sie können für jeden benutzerdefinierten Datentyp ein oder mehrere Decorator-Elemente hinzufügen. Weitere Informationen finden Sie unter Decorators verwenden.

Weitere Informationen finden Sie unter Benutzerdefinierte Datentypen in Bicep.

Functions

In Ihrer Bicep-Datei können Sie eigene Funktionen erstellen und auch die standardmäßigen Bicep-Funktionen verwenden, die automatisch in Ihren Bicep-Dateien verfügbar sind. Erstellen Sie eigene Funktionen, wenn Sie über komplizierte Ausdrücke verfügen, die in Ihren Bicep-Dateien wiederholt verwendet werden.

func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'

output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')

Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen in Bicep.

Ressourcen

Verwenden resource Sie das Schlüsselwort, um eine bereitzustellende Ressource zu definieren. Die Ressourcendeklaration enthält einen symbolischen Namen für die Ressource. Sie verwenden diesen symbolischen Namen in anderen Teilen der Bicep-Datei, um einen Wert aus der Ressource abzurufen.

Die Ressourcendeklaration enthält den Ressourcentyp und die API-Version. Schließen Sie im Text der Ressourcendeklaration Eigenschaften ein, die für den Ressourcentyp spezifisch sind.

resource stg 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

Sie können für jede Ressource ein oder mehrere Decorator-Zeichen hinzufügen. Weitere Informationen finden Sie unter Decorators verwenden.

Weitere Informationen finden Sie unter Ressourcendeklaration in Bicep.

Einige Ressourcen stehen in einer hierarchischen Beziehung zueinander. Sie können eine untergeordnete Ressource entweder innerhalb oder außerhalb der übergeordneten Ressource definieren.

Das folgende Beispiel zeigt, wie Sie eine untergeordnete Ressource in einer übergeordneten Ressource definieren. Es enthält ein Speicherkonto mit einer untergeordneten Ressource (Dateidienst), die innerhalb des Speicherkontos definiert ist. Der Dateidienst verfügt ebenfalls über eine untergeordnete Ressource (Freigabe), die im Dienst definiert ist.

resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }

  resource service 'fileServices' = {
    name: 'default'

    resource share 'shares' = {
      name: 'exampleshare'
    }
  }
}

Das nächste Beispiel zeigt, wie eine untergeordnete Ressource außerhalb der übergeordneten Ressource definiert wird. Sie verwenden die übergeordnete Eigenschaft, um eine hierarchische Beziehung zu ermitteln. Es werden dieselben drei Ressourcen definiert.

resource storage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2025-06-01' = {
  name: 'default'
  parent: storage
}

resource share 'Microsoft.Storage/storageAccounts/fileServices/shares@2025-06-01' = {
  name: 'exampleshare'
  parent: service
}

Weitere Informationen finden Sie unter Festlegen von Name und Typ für untergeordnete Ressourcen in Bicep.

Module

Mit Modulen können Sie Code aus einer Bicep-Datei in anderen Bicep-Dateien wiederverwenden. Sie geben in der Moduldeklaration einen Link zu der Datei an, die Sie wiederverwenden möchten. Wenn Sie die Bicep-Datei bereitstellen, werden auch die Ressourcen im Modul bereitgestellt.

module webModule './webApp.bicep' = {
  name: 'webDeploy'
  params: {
    skuName: 'S1'
    location: location
  }
}

Mit dem symbolischen Namen können Sie von einer anderen Stelle in der Datei auf das Modul verweisen. Beispielsweise können Sie einen Ausgabewert aus einem Modul mit dem symbolischen Namen und dem Namen des Ausgabewerts erhalten.

Sie können für jedes Modul ein oder mehrere Decorator-Zeichen hinzufügen. Weitere Informationen finden Sie unter Decorators verwenden.

Weitere Informationen finden Sie unter Was ist Bicep (Vorschau)?.

Ausgaben

Verwenden Sie Ausgänge, um Werte aus der Bereitstellung zurückzugeben. In der Regel geben Sie einen Wert aus einer bereitgestellten Ressource zurück, wenn Sie diesen Wert für einen anderen Vorgang wieder verwenden müssen.

output storageEndpoint object = stg.properties.primaryEndpoints

Sie können für jede Ausgabe ein oder mehrere Decorator-Zeichen hinzufügen. Weitere Informationen finden Sie unter Decorators verwenden.

Weitere Informationen finden Sie unter Ausgaben in Bicep.

Schleifen

Fügen Sie Ihrer Bicep-Datei iterative Schleifen hinzufügen, um mehrere Kopien von folgenden Elementen zu definieren:

  • Eine Ressource
  • Ein Modul
  • Eine Variable
  • Eine Eigenschaft
  • Eine Ausgabe

Verwenden Sie den for-Ausdruck, um eine Schleife zu definieren.

param moduleCount int = 2

module stgModule './example.bicep' = [for i in range(0, moduleCount): {
  name: '${i}deployModule'
  params: {
  }
}]

Sie können ein Array, ein Objekt oder einen ganzzahligen Index durchlaufen.

Für weitere Informationen siehe Iterative Schleifen in Bicep.

Bedingte Bereitstellung

Sie können Ihrer Bicep-Datei, die bedingt bereitgestellt wird, eine Ressource oder ein Modul hinzufügen. Während der Bereitstellung wird die Bedingung ausgewertet. Das Ergebnis bestimmt dann, ob die Ressource oder das Modul bereitgestellt wird. Verwenden Sie den if-Ausdruck, um eine bedingte Bereitstellung zu definieren.

param deployZone bool

resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
  name: 'myZone'
  location: 'global'
}

Weitere Informationen finden Sie unter Bedingte Bereitstellungen in Bicep mit dem If-Ausdruck.

Leerzeichen

Leerzeichen und Tabstoppzeichen werden bei Ihrer Erstellung von Bicep-Dateien ignoriert.

Bicep reagiert empfindlich auf Zeilenvorschübe. Beispiel:

resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' = if (newOrExisting == 'new') {
  ...
}

Kann nicht wie folgt geschrieben werden:

resource sa 'Microsoft.Storage/storageAccounts@2025-06-01' =
    if (newOrExisting == 'new') {
      ...
    }

Definieren Sie Objekte und Arrays auf mehreren Zeilen.

Kommentare

Verwenden Sie // für einzeilige Kommentare oder /* ... */ für mehrzeilige Kommentare.

Das folgende Beispiel zeigt einen einzeiligen Kommentar.

// This is your primary NIC.
resource nic1 'Microsoft.Network/networkInterfaces@2025-01-01' = {
  ...
}

Das folgende Beispiel zeigt einen mehrteiligen Kommentar.

/*
  This Bicep file assumes the key vault already exists and
  is in same subscription and resource group as the deployment.
*/
param existingKeyVaultName string

Mehrzeilige Zeichenfolgen

Sie können eine Zeichenfolge in mehrere Zeilen unterteilen. Verwenden Sie drei einfache Anführungszeichen ''' , um die mehrzeilige Zeichenfolge zu starten und zu beenden.

Zeichen innerhalb der mehrzeiligen Zeichenfolge werden wie folgt behandelt. Escapezeichen sind nicht erforderlich. Sie können nicht ''' in die mehrzeilige Zeichenfolge einschließen. Zeichen folgen Interpolationen werden zurzeit nicht unterstützt.

Sie können die Zeichenfolge direkt nach dem Öffnen ''' oder eine neue Zeile einschließen. In beiden Fällen enthält die resultierende Zeichenfolge keine neue Zeile. Abhängig von den Zeilenenden in der BICEP-Datei werden neue Zeilen als \r\n oder \ninterpretiert.

Das folgende Beispiel zeigt eine mehrzeilige Zeichenkette.

var stringVar = '''
this is multi-line
  string with formatting
  preserved.
'''

Das vorangegangene Beispiel entspricht folgendem JSON:

"variables": {
  "stringVar": "this is multi-line\r\n  string with formatting\r\n  preserved.\r\n"
}

Mehrzeilige Deklarationen

Sie können jetzt mehrere Zeilen in Funktions-, Array- und Objektdeklarationen verwenden. Diese Funktion erfordert Bicep CLI Version 0.7.X oder höher.

Im folgenden Beispiel ist die resourceGroup()-Definition in mehrere Zeilen unterteilt.

var foo = resourceGroup(
  mySubscription,
  myRgName)

Beispiele für mehrzeilige Deklarationen finden Sie unter Arrays und Objekte.

Bekannte Einschränkungen

  • Der Support ist nicht für das Konzept apiProfile verfügbar, das verwendet wird, um einen einzelnen apiProfile einer Menge apiVersion für jeden Ressourcentyp zuzuordnen.
  • Benutzerdefinierte Funktionen werden derzeit nicht unterstützt. Auf ein experimentelles Feature kann derzeit zugegriffen werden. Weitere Informationen finden Sie unter Benutzerdefinierte Funktionen in Bicep.
  • Einige Bicep-Features erfordern eine entsprechende Änderung an der Zwischensprache (JSON-Vorlagen von Azure Resource Manager). Wir kündigen diese Features als verfügbar an, nachdem alle erforderlichen Updates für globale Azure bereitgestellt wurden. Wenn Sie eine andere Umgebung wie Azure Stack verwenden, liegt möglicherweise eine Verzögerung bei der Verfügbarkeit des Features vor. Das Bicep-Feature ist nur verfügbar, nachdem die Zwischensprache in dieser Umgebung ebenfalls aktualisiert wurde.
  • Eine Einführung in BICEP finden Sie unter Was ist BICEP?.
  • Informationen zu Bicep-Datentypen finden Sie unter Datentypen.