Freigeben über


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. 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 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 sich in diesem Verzeichnis bereits eine Datei namens main.bicep befindet, verwenden Sie die Option --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

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 einen Issue.

Mit den Befehlen „decompile“ und build werden funktional gleichwertige Vorlagen erstellt. Allerdings sind sie bei der Implementierung möglicherweise nicht vollständig 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": "2023-04-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@2023-04-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 exampleStorage anstelle von storageAccountName für den symbolischen Namen.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2023-04-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@2023-04-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 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

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