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.
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.
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.
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.
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:
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.
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:
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
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
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.
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.
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.
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": { }
"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:
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' } }
resource stgAcct 'Microsoft.Storage/storageAccounts@2021-02-01' = { name: 'stgacctbicepdemo' location: 'westus2' kind: 'StorageV2' sku: { name: 'Standard_LRS' tier: 'Standard' } }
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.
param name string param location string = 'westus2' var stgAcctName = concat(name, '2468')
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' } }
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.
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'
var stgAcctName = '${name}2468'
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
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' } }
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.
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'
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'
az deployment group create \ --resource-group bicep-rg \ --template-file storageAccount.bicep \ --parameters name='stgacctbicepazcli'
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
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.
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).
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.
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.