Dela via


Dekompilera ARM-mallens JSON till Bicep

Den här artikeln beskriver hur du dekompilera Azure Resource Manager-mallar (ARM-mallar) till Bicep-filer. Du måste ha Bicep CLI installerat för att köra konverteringskommandona.

Kommentar

Från Visual Studio Code kan du skapa resursdeklarationer direkt genom att importera från befintliga resurser. Mer information finns i Bicep-kommandon.

Med Visual Studio Code kan du klistra in JSON som Bicep. Kommandot decompile körs automatiskt. Mer information finns i Klistra in JSON som Bicep.

Genom att dela upp en ARM-mall kan du komma igång med Bicep-utveckling. Om du har ett bibliotek med ARM-mallar och vill använda Bicep för framtida utveckling kan du dela upp dem till Bicep. Bicep-filen kan dock behöva revisioner för att implementera metodtips för Bicep.

Den här artikeln visar hur du kör decompile kommandot i Azure CLI. Om du inte använder Azure CLI kör du kommandot utan az i början av kommandot. Till exempel kommer az bicep decompile att bli bicep decompile.

Dekompilera från JSON till Bicep

Om du vill dela upp ARM-mallens JSON till Bicep använder du:

az bicep decompile --file main.json

Kommandot skapar en fil med namnet main.bicep i samma katalog som main.json. Om main.bicep finns i samma katalog använder du växeln --force för att skriva över den befintliga Bicep-filen.

Du kan också dekompilera ARM-mallen JSON till Bicep från Visual Studio Code med hjälp av dekompilera till Bicep-kommandot . Mer information finns i Visual Studio Code.

Varning

Dekompilering försöker konvertera filen, men det finns ingen garanterad mappning från ARM-mallenS JSON till Bicep. Du kan behöva åtgärda varningar och fel i den genererade Bicep-filen. Eller så kan dekompileringen misslyckas om en korrekt konvertering inte är möjlig. Om du vill rapportera eventuella problem eller felaktiga konverteringar skapar du ett problem.

Kommandona decompile och build skapar mallar som är funktionellt likvärdiga. De kanske dock inte är exakt samma i implementeringen. Att konvertera en mall från JSON till Bicep och sedan tillbaka till JSON resulterar förmodligen i en mall med annan syntax än den ursprungliga mallen. När de konverterade mallarna distribueras ger de samma resultat.

Åtgärda konverteringsproblem

Anta att du har följande ARM-mall:

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

När du dekompilera den får du:

@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

Den dekompilerade filen fungerar, men den har några namn som du kanske vill ändra. Variabeln var storageAccountName_var har en ovanlig namngivningskonvention. Nu ska vi ändra till:

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

Om du vill byta namn på filen högerklickar du på namnet och väljer sedan Byt namn på symbolen. Du kan också använda snabbtangenten F2 .

Resursen har ett symboliskt namn som du kanske vill ändra. I stället storageAccountName för för det symboliska namnet använder du exampleStorage.

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

Den fullständiga filen är:

@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

Exportera mall och konvertera

Du kan exportera mallen för en resursgrupp och sedan skicka den direkt till decompile kommandot. I följande exempel visas hur du dekompilera en exporterad mall.

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

Sida vid sida-vy

Med Bicep Playground kan du visa motsvarande ARM-mall och Bicep-filer sida vid sida. Du kan välja Exempelmall för att se båda versionerna. Eller välj Dekompilera för att ladda upp din egen ARM-mall och visa motsvarande Bicep-fil.

Nästa steg

Mer information om alla Bicep CLI-kommandon finns i Bicep CLI-kommandon.