Arm-sjabloon-JSON decompileren naar Bicep

In dit artikel wordt beschreven hoe u Azure Resource Manager-sjablonen (ARM-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 te importeren uit bestaande resources. Zie Bicep-opdrachten voor meer informatie.

Met Visual Studio Code kunt u JSON plakken als Bicep. De opdracht decompileren 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 zonder az uit aan het begin van de opdracht. az bicep decompile wordt bijvoorbeeld bicep decompile.

Decompileren van JSON naar Bicep

Als u de ARM-sjabloon-JSON 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 schakeloptie --force 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 Decompileren in Bicep . Zie Visual Studio Code voor meer informatie.

Waarschuwing

Met decompilatie wordt geprobeerd het bestand te converteren, maar er is geen gegarandeerde toewijzing van de 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 onnauwkeurige conversies wilt melden, maakt u een probleem.

De opdrachten voor decompileren en bouwen produceren sjablonen die functioneel gelijkwaardig zijn. Ze zijn echter mogelijk niet precies hetzelfde in de implementatie. Als u een sjabloon converteert van JSON naar Bicep en vervolgens terug naar JSON, resulteert dit waarschijnlijk in een sjabloon met een andere syntaxis dan de oorspronkelijke sjabloon. Wanneer de geconverteerde sjablonen zijn geïmplementeerd, worden dezelfde resultaten geproduceerd.

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 heeft een aantal namen die u mogelijk wilt wijzigen. De variabele var storageAccountName_var heeft een ongebruikelijke naamconventie. Laten we deze wijzigen in:

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

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

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

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 equivalente ARM-sjabloon en Bicep-bestanden naast elkaar weergeven. U kunt Voorbeeldsjabloon selecteren om beide versies te zien. Of selecteer Decompileren 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.