Udostępnij przez


Dekompiluj szablon usługi Azure Resource Manager w formacie JSON do Bicep

W tym artykule opisano sposób dekompilowania szablonów usługi Azure Resource Manager (szablonów ARM) do plików Bicep. Aby uruchomić polecenia konwersji, musisz mieć zainstalowany interfejs wiersza polecenia Bicep.

Uwaga

W programie Visual Studio Code można bezpośrednio tworzyć deklaracje zasobów, importując je z istniejących zasobów. For more information, see Bicep commands.

Visual Studio Code enables you to paste JSON as Bicep. Spowoduje to automatyczne uruchomienie decompile polecenia. For more information, see Paste JSON as Bicep.

Dekompilowanie szablonu ARM ułatwia rozpoczęcie programowania w Bicep. Jeśli masz bibliotekę szablonów ARM i chcesz używać Bicep do przyszłego rozwoju, możesz je dekompilować do Bicep. However, you might need to revise the Bicep file to implement best practices.

W tym artykule pokazano, jak uruchomić decompile polecenie w interfejsie wiersza polecenia platformy Azure. Jeśli nie używasz interfejsu wiersza polecenia platformy Azure, uruchom polecenie bez az na początku polecenia. Na przykład, az bicep decompile staje się bicep decompile.

Decompile from JSON to Bicep

Aby dekompilować szablon JSON ARM do Bicep, użyj:

az bicep decompile --file main.json

To polecenie tworzy plik o nazwie main.bicep w tym samym katalogu co main.json. If main.bicep exists in the same directory, use the --force switch to overwrite the existing Bicep file.

Możesz również dekompilować kod JSON szablonu ARM do Bicep z poziomu programu Visual Studio Code, używając polecenia Decompile into Bicep. Aby uzyskać więcej informacji, zobacz Decompile into Bicep.

Uwaga

Decompilation attempts to convert the file, but there's no guaranteed mapping from JSON ARM templates to Bicep. Może być konieczne naprawienie ostrzeżeń i błędów w wygenerowanych plikach Bicep. W przeciwnym razie dekompilacja może zakończyć się niepowodzeniem, jeśli dokładna konwersja nie jest możliwa. Utwórz problem , aby zgłosić wszelkie problemy lub niedokładne konwersje.

Polecenia dekompiluj i buduj tworzą szablony, które są funkcjonalnie równoważne. Jednak mogą one nie być dokładnie takie same podczas implementacji. Konwertowanie szablonu z formatu JSON na Bicep, a następnie powrót do formatu JSON może utworzyć szablon z inną składnią niż oryginalny szablon. Po wdrożeniu przekonwertowane szablony generują te same wyniki.

Rozwiązywanie problemów z konwersją

Załóżmy, że masz następujący szablon ARM:

{
  "$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": "2025-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Kiedy go dekompilujesz, uzyskasz:

@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@2025-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = storageAccountName

Dekompilowany plik działa, ale ma kilka nazw, które można zmienić. Zmienna var storageAccountName_var ma nietypową konwencję nazewnictwa. Można go zmienić na:

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

Aby zmienić nazwę pliku, kliknij prawym przyciskiem myszy nazwę, a następnie wybierz polecenie Zmień nazwę symbolu. Możesz również użyć klawisza F2.

Zasób ma symboliczną nazwę, którą możesz zmienić. storageAccountName Zamiast nazwy symbolicznej użyj .exampleStorage

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

Kompletny plik to:

@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@2025-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Eksportowanie szablonu i konwertowanie

Uwaga

Aby wyeksportować pliki Bicep, możesz użyć witryny Azure Portal. Aby uzyskać więcej informacji, zobacz Eksportowanie pliku Bicep przy użyciu witryny Azure Portal.

Szablon dla grupy zasobów można wyeksportować, a następnie bezpośrednio przekazać do polecenia decompile. W poniższych przykładach pokazano, jak dekompilować wyeksportowany szablon:

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

Side-by-side view

Bicep Playground umożliwia wyświetlanie równoważnych szablonów ARM i plików Bicep obok siebie. Możesz wybrać pozycję Przykładowy szablon, aby wyświetlić obie wersje, lub wybrać pozycję Dekompiluj, aby przekazać własny szablon ARM i wyświetlić równoważny plik Bicep.

Następne kroki

To learn about all Bicep CLI commands, see Bicep CLI commands.