Azure Bicep: Einstieg und Leitfaden

Datensicherheit

Illustration von Azure Bicep

Stellen Sie Ressourcen auf Azure bereit und versuchen Sie dabei, Vorlagen für den Azure Resource Manager (ARM) zu verwenden? Finden Sie die JSON-Syntax verwirrend? Microsoft hat die Kritik gehört und ein neues Infrastructure-as-Code-Projekt namens Azure Bicep eingeführt.

In diesem Beitrag erfahren Sie alles über Azure Bicep, Verbesserungen gegenüber ARM-Vorlagen und finden ein Tutorial zum Einstieg.

Was ist Azure Bicep?

Illustration mit einem Bizeps und Wolken

Azure Bicep ist eine neue deklarative Sprache für die Bereitstellung von Azure-Ressourcen. Bicep ist eine domänenspezifische Sprache, d. h. Microsoft hat die Sprache gezielt für die Verwendung in bestimmten Szenarien entwickelt. Mit Bicep lassen sich keine Nicht-Azure-Ressourcen bereitstellen und man kann nicht in anderen Cloud-Anbietern arbeiten, z. B. in Amazons AWS oder Googles GCP-Cloud. Bicep ist auch keine Standardprogrammiersprache zur Anwendungsentwicklung.

Möchten Sie eine neue Programmiersprache lernen? Werfen Sie einen Blick auf den Artikel 11 beliebte Programmiersprachen, die Türen öffnen von Rob Sober!

Das Ziel von Microsoft für Azure Bicep ist es, durch eine einfachere Syntax, eine bessere Wiederverwendung von Code und eine flexiblere Dateistruktur ein insgesamt besseres Erlebnis beim Schreiben von Code zu bieten. Azure Bicep bietet eine bessere Unterstützung für Modularität und die Möglichkeit, Code wiederzuverwenden.

Azure Bizeps und Azure-ARM-Vorlagen im Vergleich

ARM-Vorlagen sind Dateien, die Azure-Ressourcen darstellen. Diese werden in einem speziellen JSON-Format geschrieben, das kein gewöhnliches JSON ist. Die ARM-Vorlagensyntax enthält Funktionen und Methoden zur Durchführung komplexer Vorgänge.

Eine häufige Beschwerde bezüglich ARM JSON ist, dass es aufgrund der komplexen Syntax schwierig zu schreiben und zu interpretieren ist. In Bicep wurde aufgrund solcher Beschwerden ein einfacherer Ansatz für die Sprachsyntax gewählt. Wenn Sie eine ARM-Vorlage erstellen, müssen Sie komplizierte Ausdrücke verwenden, und die endgültige Ausgabe ist oftmals ziemlich ausführlich.

Lassen Sie uns nun die Syntax und den Code in ARM JSON und Bicep vergleichen, die für die Bereitstellung eines Azure Virtual Network erforderlich sind. Hier ist eine grundlegende ARM-Vorlage für die Bereitstellung dieser Ressourcen, die 27 Zeilen umfasst.

vnet json Beispiel

Hier ist die entsprechende Ressourcenbereitstellung mit einer Bicep-Vorlage unter Verwendung von nur 19 Zeilen. Machen Sie sich keine Sorgen darum, die Syntax zu verstehen. Sie werden später in diesem Tutorial mehr über die Bicep-Dateistruktur erfahren.

vnet bicep Beispiel

Vorteile von Azure Bicep

Illustration einer Papierakte

Microsoft hat Azure Bicep als Reaktion auf die steile Lernkurve von ARM-Vorlagen erstellt. Viele IT-Profis empfinden die Ausführlichkeit und Syntax von ARM-Vorlagen im Vergleich zu anderen Lösungen als umständlich.

Zu den Vorteilen von Azure Bicep gehören:

  • Optimierung der Syntax: Bicep hat eine einfachere Syntax zum Schreiben von Vorlagen. Wenn Sie mit der Syntax von Hashicorp Terraform vertraut sind, werden Sie Bicep schnell lernen, da die Syntax sehr ähnlich ist. Mit Bicep können Sie Parameter und Variablen referenzieren, ohne Funktionen zu verwenden. Bicep verwendet String-Interpolation anstelle der Verkettung von Strings. Außerdem können Sie Ressourceneigenschaften über ihre symbolischen Namen referenzieren, anstatt komplexe Referenzanweisungen zu verwenden. Diese Verbesserungen erleichtern das Erstellen und Lesen von Bicep-Vorlagen im Vergleich zur ARM-JSON-Syntax.
  • Module: Sie können komplexe Vorlagenbereitstellungen erstellen, indem Sie kleinere Moduldateien erstellen. Sie referenzieren diese Module dann in der Hauptvorlage. Beispielsweise können Sie ein Modul zum Erstellen einer virtuellen Maschine haben und dieses dann in der Hauptvorlage referenzieren.
  • Verwaltung von Ressourcenabhängigkeiten: In den meisten Fällen erkennt Bicep automatisch Ressourcenabhängigkeiten. Bei ARM-Vorlagen müssen Sie diese Abhängigkeiten selbst erstellen, wenn Sie eine Vorlage schreiben. Zum Beispiel benötigt eine virtuelle Maschine eine Netzwerkschnittstelle, die ein Virtual Network und ein Subnetz erfordert. Bicep erkennt solche Ressourcenabhängigkeiten automatisch und stellt sie in der erforderlichen Reihenfolge bereit.

Installation von Azure Bicep

Um Bicep-Dateien zu erstellen und bereitzustellen, müssen Sie einige Tools auf Ihrem lokalen System installieren. Microsoft bietet mehrere Optionen für die Installation dieser Tools unter Windows, Linux und macOS an.

Bizeps CLI

Azure Bicep verfügt über eine Befehlszeilenschnittstelle (Command-Line Interface, CLI) zum Kompilieren der Bicep-Dateien in ARM-JSON-Vorlagen. Sie können die Bicep-CLI auch zum Dekompilieren von ARM-JSON-Vorlagen in Bicep-Dateien verwenden, wenn Sie vorhandene Vorlagen haben, die Sie konvertieren möchten.

Microsoft bietet Installationsprogramme für Windows, Linux und macOS an. Sie finden das neueste Installationsprogramm hier auf der GitHub-Seite des Projekts. Wenn Sie die Bicep CLI manuell installieren, müssen Sie den Installationsort zu Ihrer PATH-Umgebungsvariablen hinzufügen, um die Befehle von einer Konsole aus zu verwenden.

Microsoft bietet auch mehrere Skripte zum Herunterladen, Installieren und Konfigurieren der PATH-Variable an:

Azure CLI

Die Azure-Befehlszeilenschnittstelle (Azure CLI) ist ein Satz von Befehlen, die zum Erstellen und Verwalten von Azure-Ressourcen verwendet werden. Azure CLI ist für Windows, macOS und Linux verfügbar und bietet eine Alternative zur Verwendung der Azure PowerShell. Erfahren Sie mehr darüber, wie Sie Azure CLI auf Ihrem System installieren können.

Ab Azure CLI Version 2.20.0 liefert Microsoft die Bicep-CLI-Binärdateien automatisch mit. Dank dieser Konfiguration müssen Sie Bicep nicht separat installieren, wenn Sie es mit Azure CLI verwenden möchten.

Azure CLI unterstützt nativ die Bereitstellung von Bicep-Dateien mithilfe von Bereitstellungsbefehlen. Anstatt beispielsweise eine Bicep-Datei für die Bereitstellung in eine ARM-JSON-Vorlage zu kompilieren, können Sie die Bicep-Datei direkt mit dem folgenden Befehl bereitstellen:

az deployment group create \


--template-file azuredeploy.bicep \


--resource-group myResourceGroup

Sie können viele Bicep-Befehle auch mit dem Befehl „az bicep“ ausführen:

az bicep

Verfügbare Befehle umfassen das Erstellen einer Bicep-Datei aus einer ARM-Vorlage oder das Aktualisieren der Bicep-CLI-Version. Hier sind die derzeit in Azure CLI mit Bicep Version 0.3.539 verfügbaren Befehle.

Azure CLI installiert eine separate Version von Bicep CLI, die nicht mit anderen Installationen im System in Konflikt steht. Azure CLI fügt Bicep CLI auch nicht zu Ihrer PATH-Umgebungsvariablen hinzu. Wenn Sie vorhaben, Bicep außerhalb von Azure CLI zu verwenden, müssen Sie die Installation anhand der Anweisungen aus dem vorherigen Abschnitt durchführen.

Azure PowerShell

Wie auch Azure CLI ist Azure PowerShell ein Satz von Modulen, die für die Bereitstellung und Verwaltung von Azure-Ressourcen mithilfe von PowerShell entwickelt wurden. Azure PowerShell funktioniert mit PowerShell 5.1 für Windows-Systeme und PowerShell 7 und höher auf allen Plattformen.

Im Gegensatz zur Azure CLI enthält Azure PowerShell nicht automatisch Bicep-CLI-Befehle. Um Bicep CLI verwenden zu können, müssen Sie Azure PowerShell Version 5.6.0 oder höher haben. Außerdem müssen Sie bereits Bicep CLI installiert und zu Ihrer PATH-Umgebungsvariablen hinzugefügt haben.

In Zukunft wird wahrscheinlich eine Version des Azure-PowerShell-Moduls mit nativer Unterstützung für Bicep-CLI-Befehle veröffentlicht werden.

Erstellen von Azure-Bicep-Dateien

Um mit dem Schreiben von Bicep-Vorlagen zu beginnen, bietet Microsoft eine Visual-Studio-Codeerweiterung für die Bicep-Sprache an. Die Erweiterung bietet Sprachunterstützung und Ressourcen-Autovervollständigung zur Unterstützung bei der Erstellung und Validierung von Bicep-Dateien.

Wählen Sie in Visual Studio Code das Symbol Erweiterungen in der linken Leiste, um den Marketplace anzuzeigen. Suchen Sie nach „bicep“ und installieren Sie die von Microsoft zur Verfügung gestellte Erweiterung.

Wenn Sie zum Beispiel eine virtuelle Maschine mit VS-Code definieren, bietet die Bicep-Erweiterung IntelliSense für die Eigenschaften der virtuellen Maschine. Sie können schnell die Eigenschaften der virtuellen Maschine finden, die in der Vorlage definiert werden sollen.

Um mit Ihrer ersten Bicep-Vorlage zu beginnen, erstellen Sie eine Datei namens storageAccount.bicep. Azure-Bicep-Dateien haben die Erweiterung .bicep, um sie von ARM-Vorlagen zu unterscheiden. Gehen wir nun auf die Bicep-Syntax ein, um mit der Erstellung dieses Speicherkontos zu beginnen.

Ressourcendeklaration

Der Hauptbestandteil einer Bicep-Vorlage ist die Ressourcendeklaration. Sie benötigen eine Möglichkeit, die Azure-Ressource zu definieren, die Sie bereitstellen möchten. Hier ist ein grundlegendes Framework zur Deklaration einer Ressource:

"name": “<resource name>”,
"type": "Microsoft.<resource provider>/<resource type>",
"apiVersion": "<api version>",
"tags": {
    "key": "value"
},
"location": "<location>",
"dependsOn": [ ],
"properties": { }

Im Folgenden werden die einzelnen Komponenten der Ressourcendeklaration näher erläutert:

  • Ressource: Dient zum Deklarieren einer Azure-Ressource für die Bereitstellung
  • Symbolischer Name: Der Bezeichner oder Referenzname zur Verwendung an anderen Stellen in der Bicep-Vorlage. Angenommen, Sie erstellen ein virtuelles Netzwerk und stellen eine virtuelle Maschine bereit. In diesem Fall müssen Sie auf das virtuelle Netzwerk verweisen, in dem die Netzwerkschnittstelle der virtuellen Maschine bereitgestellt werden soll. Beachten Sie, dass dies nicht der Name der bereitgestellten Azure-Ressource ist. Sie verwenden diesen Namen nur, um die Ressource später in der Vorlage zu referenzieren.
  • Typ: Der Typ der Ressource, die Sie bereitstellen. Der Typ setzt sich wie folgt zusammen: Ressourcenanbieter, z. B. Microsoft.Storage, gefolgt vom Ressourcentyp, z. B. storageAccounts.
  • API-Version: Die API-Version, die bei der Bereitstellung der Ressource verwendet werden soll. Die API-Version bestimmt, welche Eigenschaften bei der Bereitstellung der Ressource verfügbar sind. Das Deklarieren der API-Version funktioniert ähnlich wie bei einer ARM-Vorlage.
  • Eigenschaften: Jede Ressource benötigt einen Namen und einen Speicherort für die Bereitstellung. Der Name, den Sie hier angeben, wird der Name der Ressource sein, wenn sie in Azure bereitgestellt wird. Die Kombination aus Typ und API-Version bestimmt, welche Eigenschaften Sie verwenden können.

Hier ist der Anfang einer Bicep-Vorlage für die Bereitstellung eines Speicherkontos. Der symbolische Name ist stgAcct, aber der Name der bereitgestellten Ressource ist stgacctbicepdemo. Beachten Sie auch die Deklaration des Typs und der API-Version in der ersten Zeile. Anschließend definieren Sie die restlichen Speicherkontoeigenschaften wie Speicherort, Speicherkontotyp und SKU.

resource stgAcct 'Microsoft.Storage/storageAccounts@2021-02-01' = {


name: 'stgacctbicepdemo'


location: 'westus2'


kind: 'StorageV2'


sku: {


name: 'Standard_LRS'


tier: 'Standard'


}


}
Parameter und Variablen

Parameter und Variablen machen Ihre Bicep-Vorlagen dynamischer. Anstatt Ressourcenwerte fest einzuprogrammieren, können Sie Werte bei der Bereitstellung angeben. Wenn Sie Parameter deklarieren, müssen Sie bei der Erstellung der Bereitstellung einen Wert an die Bicep-Vorlage übergeben.

Parameter werden mit dem Schlüsselwort param deklariert und Variablen mit dem Schlüsselwort var. Hier sind einige Beispiele für Bicep-Parameter namens name und location sowie eine Variable namens stgAcctName. Beachten Sie, dass der Parameter location einen Standardwert von westus2 aufweist. Wenn Sie also keinen Wert angeben, verwendet die Bereitstellung die Region westus2 zum Bereitstellen.

  1. param name string
    
    
    param location string = 'westus2'
    
    
    var stgAcctName = concat(name, '2468')

Die Variable stgAcctName führt eine String-Verkettung des Parameters name und einiger Zahlen durch. Diese Aktion dient dazu, dem Speicherkonto einen eindeutigen Namen innerhalb von Azure zu geben. Die Variablendeklaration demonstriert auch, wie Sie die gleichen ARM-Vorlagenfunktionen innerhalb von Bicep-Vorlagen verwenden können.

Hier ist die aktualisierte Vorlage storageAccount.bicep unter Verwendung Ihrer deklarierten Parameter und Variablen. Beachten Sie, dass die Eigenschaftswerte des Speicherkontos name und location durch ihre entsprechenden Parameter- und Variablennamen ersetzt wurden.

param name string


param location string = 'westus2'


var stgAcctName = concat(name, '2468')








resource stgAcct 'Microsoft.Storage/storageAccounts@2021-02-01' = {


name: stgAcctName


location: location


kind: 'StorageV2'


sku: {


name: 'Standard_LRS'


tier: 'Standard'


}


}

Bicep-Vorlagen verwenden dieselben Parameterdateien, die in JSON für ARM-Vorlagen geschrieben werden. Das bedeutet, dass Sie Ihre vorhandenen ARM-Parameterdateien für die Bereitstellung von Azure-Bicep-Vorlagen verwenden können.

String-Interpolation

Eine der beliebtesten ARM-Vorlagenfunktionen ist concat(). Diese Funktion verbindet mehrere Strings zu einem einzigen String. Diese wurde im vorherigen Abschnitt verwendet, um den Parameter name und eine Zahl zu verketten und so den Variablenwert stgAcctName zu erstellen.

Anstelle der Verkettung kann in den Bicep-Vorlagen die String-Interpolation verwendet werden. Sie können Strings mit einem Parameter- oder Variablennamen definieren, und Bicep wertet den endgültigen String anhand der tatsächlichen Werte aus.

Anstatt beispielsweise die Funktion concat() in der Variablendeklaration zu verwenden, können Sie den Parameternamen mit ${ } einklammern, etwa so:

var stgAcctName = '${name}2468'
Bedingte Zuweisung

Bedingte Zuweisungen ermöglichen das Festlegen eines Wertes basierend auf verschiedenen Bedingungen. Nehmen wir zum Beispiel an, Ihre Speicherkonto-Bicep-Vorlage hat einen booleschen Parameter dafür, ob teurere SSD-Laufwerke für das Speicherkonto verwendet werden sollen oder nicht (standardmäßig false):

param useSSD bool = false

Innerhalb der Ressourcendeklaration können Sie einen ternären Operator verwenden, um die sku zu bestimmen. Ein ternärer Operator entspricht einer „if then else“-Anweisung. Wenn useSSD auf true gesetzt ist, dann verwendet das Speicherkonto die Premium_LRS-SKU; andernfalls verwendet das Speicherkonto die Standard_LRS-SKU.

param name string


param location string = 'westus2'


param useSSD bool = false








var stgAcctName = '${name}2468'








resource stgAcct 'Microsoft.Storage/storageAccounts@2021-02-01' = {


name: stgAcctName


location: location


kind: 'StorageV2'


sku: {


// wenn „true“, dann Premium-SSD verwenden, ansonsten Standard-HDD


name: useSSD ? 'Premium_LRS' : 'Standard_LRS'


}


}

Bereitstellen von Bicep-Vorlagen

Nun, da Sie eine Bicep-Vorlage erstellt haben, ist es an der Zeit, das Speicherkonto in Azure bereitzustellen! Sie haben zwei Optionen für die Bereitstellung von Bicep-Vorlagen. Sie können die Bicep-Vorlage für die Bereitstellung verwenden oder die Vorlage für die Bereitstellung in ARM JSON konvertieren.

Verwenden der Bizeps-Vorlagendatei

Der Azure Resource Manager arbeitet weiterhin mit den in JSON geschriebenen Vorlagen. Wenn Sie eine Bicep-Vorlage an Azure übermitteln, konvertiert das Bicep-Tooling die Vorlage in das JSON-Format. Dieser Vorgang wird als Transpilierung bezeichnet, wenn eine Programmiersprache in eine andere Sprache konvertiert wird.

Als Autor der Vorlage brauchen Sie sich um diese Konvertierung nicht zu kümmern. Sie definieren weiterhin Azure-Ressourcen in der Bicep-Vorlage, und Bicep führt die Konvertierung für Sie durch.

Um die Bicep-Vorlage mithilfe von Azure PowerShell bereitzustellen, verwenden Sie den Befehl New-AzResourceGroupDeployment unter Angabe der Ressourcengruppe für die Bereitstellung der Ressourcen. Das folgende Beispiel verwendet eine Ressourcengruppe namens bicep-rg.

Möchten Sie Azure Active Directory und andere Office 365-Dienste verwalten? Schauen Sie sich Verbinden von Office 365 PowerShell: Azure AD-Module an!

Da die Parameter location und useSSD Standardwerte haben, müssen Sie nur den Parameter name angeben. Da New-AzResourceGroupDeployment bereits einen Parameter -Name hat, geben Sie mit -nameFromTemplate den Parameter für die Bicep-Vorlage an.

New-AzResourceGroupDeployment `


-ResourceGroupName bicep-rg `


-TemplateFile storageAccount.bicep `


-nameFromTemplate 'stgacctbicepdemo'

Für die Bereitstellung über die Azure-Befehlszeilenschnittstelle verwenden Sie den Befehl az deployment group create unter Angabe des Ressourcengruppennamens und der Vorlagendatei. Verwenden Sie -parameter, um den Speicherkontonamen für die Vorlage anzugeben.

az deployment group create \


--resource-group bicep-rg \


--template-file storageAccount.bicep \


--parameters name='stgacctbicepazcli'
Konvertieren von Bicep- und ARM-Vorlagen

Um eine Bicep-Vorlage manuell in eine ARM-Vorlage zu konvertieren, verwenden Sie den Befehl bicep build und geben Sie dabei den Pfad zur Bicep-Vorlagendatei an.

Hier ist ein Beispiel für die Konvertierung der Bicep-Vorlage storageAccount.bicep in eine ARM-Vorlage.

bicep build storageAccount.bicep

Die konvertierte ARM-Vorlage können Sie mit dem Azure-PowerShell-Befehl New-AzResourceGroupDeployment oder dem Azure-CLI-Befehl az deployment bereitstellen.

Wenn Sie eine bestehende ARM-JSON-Vorlage haben, können Sie diese mit dem Befehl bicep decompile in eine Bicep-Vorlage konvertieren, etwa so:

2. bicep decompile storageAccount.json

Der Dekompilierungsprozess ist ein Best-Effort-Prozess. Microsoft garantiert keine direkte Zuordnung von ARM JSON zu Bicep. Sie müssen die Bicep-Vorlage überprüfen und Warnungen und Fehler beheben. Wenn ein Problem beim Dekompilieren auftritt, können Sie ein Problem oder eine Ungenauigkeit auf der Seite „Bicep GitHub Issues“ melden.

FAQ zu Azure Bicep

Was ist Azure Bicep?

Azure Bicep ist eine neue domänenspezifische Sprache für die Bereitstellung von Azure-Ressourcen. Azure Bicep ist eine ergänzende Bereitstellungstechnologie für Vorlagen im Azure Resource Manager (ARM).

Was ist Azure ARM?

Der Azure Resource Manager (ARM) ist der Bereitstellungs- und Verwaltungsdienst für Azure, der für das Erstellen, Aktualisieren und Löschen von Ressourcen zuständig ist. ARM-Vorlagen sind JSON-Dateien mit einer oder mehreren Azure-Ressourcen, die als Code definiert sind, für konsistente Bereitstellungen.

Nächste Schritte

Hoffentlich sind Sie jetzt davon überzeugt, dass Azure Bicep besser als ARM-Vorlagen für das Schreiben von Azure-Infrastruktur als Code ist. Microsoft verbessert das Bicep-Tooling schnell, um es zur ersten Wahl für Azure-Bereitstellungen zu machen.

Wenn Sie mehr über Azure Bicep erfahren möchten, sehen Sie sich die verfügbaren Microsoft-Learn-Module für den Einstieg an. Wenn Sie Bicep- und ARM-Vorlagen schnell vergleichen möchten, sehen Sie sich den Bicep Playground an. Sie können in jeder Vorlagensprache schreiben und den entsprechenden Code sofort sehen. Sie können auch Beispielvorlagen ansehen, um zu lernen, wie man Bicep-Vorlagen schreibt.

 

Jeff Brown

Jeff Brown

Jeff Brown is a cloud engineer specializing in Microsoft technologies such as Office 365, Teams, Azure, and PowerShell.

 

Möchten Sie Varonis in Aktion erleben?

Vereinbaren Sie eine Demo oder wenden Sie sich an unseren Vertrieb unter +49 89 3803 7990