Getty Images
Azure Bicep und ARM-Vorlagen im Vergleich
Azure Bicep kann die Bereitstellung von Azure-Ressourcen einfacher machen als ARM-Vorlagen. Erfahren Sie mehr, wie Bicep bei der Automatisierung hilft und sie vereinfacht.
Azure-Resource-Manager-Vorlagen (ARM) sind die offizielle, von Microsoft unterstützte Methode für die Bereitstellung von Ressourcen in Azure. Mit dieser nativen Option stellen IT-Teams eine Ressource über das Portal bereit und exportieren sie zur Wiederverwendung als ARM-Vorlage.
So bequem Microsoft die automatische Generierung von ARM-Vorlagen auch gemacht hat, kann die Arbeit mit diesen Vorlagen aufgrund ihrer Ausführlichkeit und Komplexität dennoch schwierig sein. Die Azure-Bicep-Sprache kann hier helfen.
Erfahren Sie, was Azure Bicep ist, wie es sich von ARM unterscheidet und welche Faktoren die Wahl des Tools beeinflussen.
Was ist Azure Bicep?
Azure Bicep ist eine domänenspezifische Sprache, die als Abstraktionsschicht über Azure Resource Manager und ARM-Vorlagen fungiert. Bicep ist eine vereinfachte Methode, um ARM-Vorlagen indirekt zu erstellen.
Um eine Bicep-Datei in Azure bereitzustellen, schreiben Sie zunächst eine Bicep-Datei. Verwenden Sie dann entweder die Azure CLI oder die Azure-PowerShell-Module, um die Bicep-Vorlage direkt in Azure bereitzustellen. Diese Tools konvertieren die main.bicep-Datei im Hintergrund in eine ARM-Vorlage, bevor sie an das Azure-Backend übermittelt werden. Dieser Konvertierungsprozess wird als Transpilierung bezeichnet.
Verwenden Sie den folgenden Bicep-CLI-Befehl, um eine Bicep-Datei in eine ARM-Vorlage zu konvertieren: bicep build main.bicep.
Dieser Befehl erzeugt das ARM-Template-Äquivalent zu den Ressourcen, die in der Datei main.bicep dargestellt sind. Die ARM-Vorlage ist deutlich länger und komplexer als die Bicep-Vorlage.
Vergleich von Bicep und ARM
Das folgende Szenario zeigt die Unterschiede in Bicep-Vorlagen, die in ARM konvertiert werden, wie Länge und Komplexität.
In diesem Beispiel wird eine Vorlage aus dem Repository Azure Quickstart Templates verwendet. Wie hier zu sehen ist, setzt die Quickstart-Vorlage ein Speicherkonto ein, unterstützt eine Reihe von Parametern und hat einige Ausgaben:
@description('Storage Account type')
@allowed([
'Premium_LRS'
'Premium_ZRS'
'Standard_GRS'
'Standard_GZRS'
'Standard_LRS'
'Standard_RAGRS'
'Standard_RAGZRS'
'Standard_ZRS'
])
param storageAccountType string = 'Standard_LRS'
@description('The storage account location.')
param location string = resourceGroup().location
@description('The name of the storage account')
param storageAccountName string =
'store${uniqueString(resourceGroup().id)}'
resource sa 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountName string = storageAccountName
output storageAccountId string = sa.id
Die Gesamtzahl der Zeilen beträgt 31. Speichern Sie die Datei unter dem Namen sa.bicep und führen Sie den folgenden Bicep-Build-Befehl im selben Verzeichnis aus: bicep build sa.bicep.
Die folgende Datei wird sa.json genannt:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.16.2.56959",
"templateHash": "1346177644236912037"
}
},
"parameters": {
"storageAccountType": {
"type": "string",
"defaultValue": "Standard_LRS",
"allowedValues": [
"Premium_LRS",
"Premium_ZRS",
"Standard_GRS",
"Standard_GZRS",
"Standard_LRS",
"Standard_RAGRS",
"Standard_RAGZRS",
"Standard_ZRS"
],
"metadata": {
"description": "Storage Account type"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The storage account location."
}
},
"storageAccountName": {
"type": "string",
"defaultValue": "[format('store{0}', uniqueString(resourceGroup().id))]",
"metadata": {
"description": "The name of the storage account"
}
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[parameters('storageAccountName')]"
},
"storageAccountId": {
"type": "string",
"value": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
}
}
}
Die Gesamtzahl der Zeilen beträgt nun 67. Sie können die Zeilen vier bis zehn außer Acht lassen, da es sich dabei um Metadaten aus der Transpilierung nach ARM handelt. Unabhängig davon hat diese Ausgabe deutlich mehr Zeilen als die Bicep-Vorlage, was ein überzeugendes Argument dafür ist, Bicep anstelle von ARM zu verwenden.
Nutzen Sie Microsofts Bicep Playground, um eine Bicep-Vorlage zu erstellen, die resultierenden ARM-Vorlage anzusehen und die beiden zu vergleichen. Hier ist ein Vergleich zwischen den beiden für das vorherige Beispiel.
Migrieren Sie von ARM zu Bicep
Microsoft empfiehlt offiziell die Verwendung von Bicep. Bicep hat den gleichen Funktionsumfang wie ARM und ist einfacher zu verwenden. Weitere Beispiele für den Syntaxvergleich finden Sie in Microsofts Sprachvergleich.
Bicep-Dateien werden nach wie vor in die ARM-Sprache konvertiert, bevor sie an Azure übermittelt werden, so dass ARM in absehbarer Zeit nicht verschwinden wird. Benutzer, die mit der ARM-Sprache vertraut sind, sollten sich sicher fühlen, dass sie weiterhin mit dieser Sprache schreiben können.
Diejenigen, die Bicep erlernen möchten, können mit dem Bicep CLI beginnen, um ARM-Vorlagen in Bicep zu dekompilieren. Microsoft warnt vor möglichen Fehlern und gibt den Benutzern einen Ausgangspunkt mit Vorlagen, mit denen sie bereits vertraut sind.
Hier ist ein Beispiel für die Dekompilierung. Speichern Sie die ARM-Vorlage unter Verwendung des vorherigen Beispiels für ein Speicherkonto in sa.json. Führen Sie den folgenden Bicep CLI-Befehl aus: bicep decompile sa.json.
Die Ausgabedatei ähnelt der ursprünglichen Datei main.bicep von Quickstart. Tatsächlich ist der einzige Unterschied der Ressourcenname.
Überprüfen Sie als nächstes die Variablennamen in der Bicep-Datei und versuchen Sie, die Datei wieder in ein ARM-Template zu bauen, um eventuelle Transpilierungsfehler zu erkennen. An dieser Stelle kann es knifflig werden, aber Fehlermeldungen weisen den Benutzern beim Erlernen der Sprache den richtigen Weg.
Das Wichtigste zum Schluss
Bicep ist zwar einfacher anzuwenden und zu verstehen, aber ARM wird nicht verschwinden. Mit dem Befehl decompile können Sie immer noch ARM-Vorlagen verwenden und sie in Bicep dekompilieren, um Bicep zu lernen. Wenn Sie es ganz genau wissen wollen, können Sie sogar eine Ressourcengruppe als ARM-Vorlage exportieren und diese dann direkt in Bicep dekompilieren. Das ist die Vorteil an der Verwendung von nativen Werkzeugen, wenn die nativen Werkzeuge unglaublich effektiv sind.