Dekompilieren des JSON-Codes einer Azure Resource Manager-Vorlage in Bicep

In diesem Artikel wird beschrieben, wie Sie ARM-Vorlagen (Azure Resource Manager) in Bicep-Dateien dekompilieren. Zum Ausführen der Konvertierungsbefehle muss die Bicep-CLI installiert sein.

Hinweis

Aus Visual Studio Code können Sie Ressourcendeklarationen direkt erstellen, indem Sie aus vorhandenen Ressourcen importieren. Weitere Informationen finden Sie unter Bicep-Befehle.

In Visual Studio Code können Sie JSON-Code als Bicep einfügen. Der decompile-Befehl wird automatisch ausgeführt. Weitere Informationen finden Sie unter Einfügen von JSON als Bicep.

Das Dekompilieren einer ARM-Vorlage erleichtert Ihnen den Einstieg in die Bicep-Entwicklung. Wenn Sie über eine Bibliothek mit ARM-Vorlagen verfügen und Bicep für die zukünftige Entwicklung verwenden möchten, können Sie sie in Bicep dekompilieren. Allerdings müssen Sie möglicherweise die Bicep-Datei überarbeiten, um Best Practices umzusetzen.

In diesem Artikel wird gezeigt, wie Sie den Befehl decompile in der Azure CLI ausführen. Wenn Sie nicht die Azure CLI verwenden, lassen Sie bei der Ausführung az am Anfang des Befehls weg. az bicep decompile wird beispielsweise zu bicep decompile.

Aus JSON in Bicep dekompilieren

Verwenden Sie folgenden Befehl, um JSON-Code aus ARM-Vorlagen in Bicep zu dekompilieren:

az bicep decompile --file main.json

Der Befehl erstellt im gleichen Verzeichnis, in dem sich auch main.json befindet, eine Datei namens main.bicep. Wenn main. bicep im selben Verzeichnis vorhanden ist, verwenden Sie den Schalter --force, um die vorhandene Bicep Datei zu überschreiben.

Auch in Visual Studio Code kann der JSON-Code aus ARM-Vorlagen in Bicep dekompiliert werden, und zwar mithilfe des Decompile into Bicep-Befehls. Weitere Informationen finden Sie unter Dekompilieren in Bicep.

Achtung

Die Dekompilierung versucht, die Datei zu konvertieren, aber es gibt keine garantierte Zuordnung von JSON ARM-Vorlagen zu Bicep. Möglicherweise müssen Sie Warnungen und Fehler in der generierten Bicep-Datei beheben. Andernfalls kann die Dekompilierung scheitern, wenn eine genaue Konvertierung nicht möglich ist. Erstellen Sie ein Issue, um Probleme oder ungenaue Konvertierungen zu melden.

Mit den Befehlen „decompile“ und build werden funktional gleichwertige Vorlagen erstellt. Allerdings sind sie bei der Implementierung möglicherweise nicht vollständig identisch. Die Konvertierung einer Vorlage von JSON in Bicep und dann zurück in JSON kann eine Vorlage mit einer anderen Syntax als die ursprüngliche Vorlage erzeugen. Nach der Bereitstellung führen die konvertierten Vorlagen zu denselben Ergebnissen.

Beheben von Konvertierungsproblemen

Hinweis

Bicep-Identifikatoren, einschließlich Parameternamen, dürfen nur Buchstaben, Ziffern und Unterstriche enthalten. Punkte werden in JSON-Parameternamen von ARM-Vorlagen unterstützt, in Bicep jedoch nicht. Wenn eine ARM-Vorlage Perioden in Parameternamen verwendet, ersetzt der Decompiler die Perioden durch Unterstriche. Zum Beispiel wird ein Parameter mit dem Namen Security.Authentication.AAD.Tenant zu Security_Authentication_AAD_Tenant. Überprüfen Sie dekompilierte Parameternamen und aktualisieren Sie alle Referenzen in Ihren Vorlagen und Parameterdateien.

Angenommen, Sie verwenden die folgende ARM-Vorlage:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    }
  },
  "variables": {
    "storageAccountName": "[concat('store', uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2025-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Beim Dekompilieren erhalten Sie Folgendes:

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
@description('Storage Account type')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

var storageAccountName = 'store${uniqueString(resourceGroup().id)}'

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

output storageAccountName string = storageAccountName

Die dekompilierte Datei funktioniert, enthält jedoch einige Namen, die Sie ggf. ändern möchten. Die Variable var storageAccountName_var verfügt über eine ungewöhnliche Namenskonvention. Sie können sie wie folgt ändern:

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

Um die Datei umzubenennen, klicken Sie mit der rechten Maustaste auf den Namen und wählen Sie dann Symbol umbenennen aus. Sie können auch den Hotkey F2 verwenden.

Die Ressource hat einen symbolischen Namen, den Sie möglicherweise ändern möchten. Verwenden Sie storageAccountName anstelle von exampleStorage für den symbolischen Namen.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2025-06-01' = {

Die vollständige Datei sieht wie folgt aus:

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_ZRS'
  'Premium_LRS'
])
@description('Storage Account type')
param storageAccountType string = 'Standard_LRS'

@description('Location for all resources.')
param location string = resourceGroup().location

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

resource exampleStorage 'Microsoft.Storage/storageAccounts@2025-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Exportieren der Vorlage und Konvertierung

Hinweis

Du kannst das Azure-Portal nutzen, um Bicep-Dateien zu exportieren. Weitere Informationen finden Sie unter Verwenden Sie das Azure Portal zum Exportieren einer Bicep-Datei.

Sie können die Vorlage für eine Ressourcengruppe exportieren und dann direkt an den decompile-Befehl übergeben. In den folgenden Beispielen wird gezeigt, wie Sie eine exportierte Vorlage dekompilieren.

az group export --name "your_resource_group_name" > main.json
az bicep decompile --file main.json

Parallele Ansicht

Mit Bicep Playground können Sie entsprechende ARM-Vorlagen und Bicep-Dateien nebeneinander anzeigen. Sie können Beispielvorlage auswählen, um beide Versionen anzuzeigen. Alternativ können Sie Dekompilieren auswählen, um Ihre eigene ARM-Vorlage hochzuladen und die entsprechende Bicep-Datei anzuzeigen.

Nächste Schritte

Um mehr über alle Bicep-CLI-Befehle zu erfahren, siehe Bicep CLI-Befehle.