Dekompilieren von ARM-Vorlagen-JSON-Code 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 Dekompilierungsbefehl 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. Die Bicep-Datei muss jedoch möglicherweise überarbeitet werden, um bewährte Methoden für Bicep zu implementieren.

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.

Dekompilieren von JSON in Bicep

Verwenden Sie zum Dekompilieren von ARM-Vorlagen-JSON in Bicep Folgendes:

az bicep decompile --file main.json

Der Befehl erstellt eine Datei mit dem Namen main.bicep in dem Verzeichnis, in dem sich auch main.json befindet. Wenn sich in diesem Verzeichnis bereits eine Datei namens main.bicep befindet, verwenden Sie die Option --force, um die vorhandene Bicep-Datei zu überschreiben.

Sie können auch in Visual Studio Code den JSON-Code der ARM-Vorlage in Bicep dekompilieren, indem Sie den Befehl In Bicep dekompilieren verwenden. Weitere Informationen finden Sie unter Visual Studio Code.

Achtung

Bei der Dekompilierung wird versucht, die Datei zu konvertieren. Es gibt jedoch keine garantierte Zuordnung von ARM-Vorlagen-JSON-Code zu Bicep. Möglicherweise müssen Sie Warnungen und Fehler in der generierten Bicep-Datei beheben. Oder bei der Dekompilierung kann ein Fehler auftreten, wenn keine genaue Konvertierung möglich ist. Um Probleme oder ungenaue Konvertierungen zu melden, erstellen Sie ein Problem.

Mit den Befehlen „decompile“ und build werden funktional gleichwertige Vorlagen erstellt. Allerdings ist die Implementierung möglicherweise nicht identisch. Wenn eine Vorlage aus JSON in Bicep und zurück in JSON konvertiert wird, weist die resultierende Vorlage wahrscheinlich eine andere Syntax als die ursprüngliche Vorlage auf. Nach der Bereitstellung führen die konvertierten Vorlagen zu denselben Ergebnissen.

Beheben von Konvertierungsproblemen

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": "2019-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_var = 'store${uniqueString(resourceGroup().id)}'

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

output storageAccountName string = storageAccountName_var

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. Ändern Sie sie wie folgt:

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 exampleStorage anstelle von storageAccountName für den symbolischen Namen.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-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@2019-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Exportieren der Vorlage und Konvertierung

Sie können die Vorlage für eine Ressourcengruppe exportieren und dann direkt an den Befehl decompile übergeben. Im folgenden Beispiel 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 dem Bicep Playground können Sie entsprechende ARM-Vorlagen- und Bicep-Dateien nebeneinander anzeigen. Sie können eine Beispielvorlage auswählen, um beide Versionen anzuzeigen. Oder Sie wählen Dekompilierenaus, um Ihre eigene ARM-Vorlage hochzuladen und die entsprechende Bicep-Datei anzuzeigen.

Nächste Schritte

Informationen zu allen Befehlen der Bicep-Befehlszeilenschnittstelle finden Sie unter Befehle der Bicep-Befehlszeilenschnittstelle.