Share via


Decompiling ARM-sjabloon JSON naar Bicep

In dit artikel wordt beschreven hoe u ARM-sjablonen (Azure Resource Manager-sjablonen) kunt decompileren naar Bicep-bestanden. U moet de Bicep CLI hebben geïnstalleerd om de conversieopdrachten uit te voeren.

Notitie

Vanuit Visual Studio Code kunt u rechtstreeks resourcedeclaraties maken door deze te importeren uit bestaande resources. Zie Bicep-opdrachten voor meer informatie.

Met Visual Studio Code kunt u JSON plakken als Bicep. De opdracht decompile wordt automatisch uitgevoerd. Zie JSON plakken als Bicep voor meer informatie.

Door een ARM-sjabloon te decompileren, kunt u aan de slag met Bicep-ontwikkeling. Als u een bibliotheek met ARM-sjablonen hebt en Bicep wilt gebruiken voor toekomstige ontwikkeling, kunt u deze decompileren naar Bicep. Het Bicep-bestand heeft echter mogelijk revisies nodig om best practices voor Bicep te implementeren.

In dit artikel wordt beschreven hoe u de decompile opdracht uitvoert in Azure CLI. Als u azure CLI niet gebruikt, voert u de opdracht uit zonder az aan het begin van de opdracht. Zo wordt az bicep decompile gewijzigd in bicep decompile.

Decompileren van JSON naar Bicep

Als u de JSON van de ARM-sjabloon wilt decompileren naar Bicep, gebruikt u:

az bicep decompile --file main.json

Met de opdracht maakt u een bestand met de naam main.bicep in dezelfde map als main.json. Als main.bicep in dezelfde map bestaat, gebruikt u de --force-switch om het bestaande Bicep-bestand te overschrijven.

U kunt arm-sjabloon JSON ook decompileren naar Bicep vanuit Visual Studio Code met behulp van de opdracht Decompile in Bicep . Zie Visual Studio Code voor meer informatie.

Let op

Decompilatie probeert het bestand te converteren, maar er is geen gegarandeerde toewijzing van ARM-sjabloon-JSON naar Bicep. Mogelijk moet u waarschuwingen en fouten in het gegenereerde Bicep-bestand oplossen. Of decompilatie kan mislukken als een nauwkeurige conversie niet mogelijk is. Als u problemen of onjuiste conversies wilt melden, maakt u een probleem.

Met de opdrachten voor de decompilatie en build worden sjablonen geproduceerd die functioneel gelijkwaardig zijn. Het is echter mogelijk dat ze niet precies hetzelfde zijn in de implementatie. Het converteren van een sjabloon van JSON naar Bicep en vervolgens terug naar JSON resulteert waarschijnlijk in een sjabloon met een andere syntaxis dan de oorspronkelijke sjabloon. Wanneer deze worden geïmplementeerd, produceren de geconverteerde sjablonen dezelfde resultaten.

Conversieproblemen oplossen

Stel dat u de volgende ARM-sjabloon hebt:

{
  "$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')]"
    }
  }
}

Wanneer u deze decompileren, krijgt u het volgende:

@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

Het gedecompileerde bestand werkt, maar het bevat een aantal namen die u mogelijk wilt wijzigen. De variabele var storageAccountName_var heeft een ongebruikelijke naamconventie. Laten we dit wijzigen in:

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

Als u de naam van het bestand wilt wijzigen, klikt u met de rechtermuisknop op de naam en selecteert u het symbool Naam wijzigen. U kunt ook de sneltoets F2 gebruiken.

De resource heeft een symbolische naam die u mogelijk wilt wijzigen. Gebruik in plaats van storageAccountName voor de symbolische naam exampleStorage.

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

Het volledige bestand is:

@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

Sjabloon exporteren en converteren

U kunt de sjabloon voor een resourcegroep exporteren en deze vervolgens rechtstreeks doorgeven aan de decompile opdracht. In het volgende voorbeeld ziet u hoe u een geëxporteerde sjabloon kunt decompileren.

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

Weergave naast elkaar

Met Bicep Playground kunt u gelijkwaardige ARM-sjabloon en Bicep-bestanden naast elkaar weergeven. U kunt voorbeeldsjabloon selecteren om beide versies te zien. Of selecteer Decompile om uw eigen ARM-sjabloon te uploaden en het equivalente Bicep-bestand weer te geven.

Volgende stappen

Zie Bicep CLI-opdrachten voor meer informatie over alle Bicep CLI-opdrachten.