Dekompilowanie kodu JSON szablonu usługi ARM na wartość Bicep

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

Uwaga

Z poziomu Visual Studio Code można bezpośrednio tworzyć deklaracje zasobów, importując z istniejących zasobów. Aby uzyskać więcej informacji, zobacz Polecenia Bicep.

Visual Studio Code umożliwia wklejanie danych JSON jako Bicep. Automatycznie uruchamia polecenie dekompiluj. Aby uzyskać więcej informacji, zobacz Wklej kod JSON jako kod Bicep.

Dekompilowanie szablonu usługi ARM ułatwia rozpoczęcie opracowywania aplikacji Bicep. Jeśli masz bibliotekę szablonów usługi ARM i chcesz używać aplikacji Bicep do przyszłego programowania, możesz je zdekompilować do aplikacji Bicep. Jednak plik Bicep może wymagać poprawek w celu wdrożenia najlepszych rozwiązań dla Bicep.

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.

Dekompiluj z formatu JSON do Bicep

Aby dekompilować kod JSON szablonu usługi ARM na wartość Bicep, użyj:

az bicep decompile --file main.json

Polecenie tworzy plik o nazwie main.bicep w tym samym katalogu co main.json. Jeśli plik main.bicep istnieje w tym samym katalogu, użyj przełącznika --force , aby zastąpić istniejący plik Bicep.

Można również dekompilować kod JSON szablonu usługi ARM do Bicep z Visual Studio Code przy użyciu polecenia Decompile do Bicep. Aby uzyskać więcej informacji, zobacz Visual Studio Code.

Przestroga

Dekompilacja próbuje przekonwertować plik, ale nie ma gwarantowanego mapowania z pliku JSON szablonu usługi ARM na wartość Bicep. Może być konieczne naprawienie ostrzeżeń i błędów w wygenerowanych plikach Bicep. Lub dekompilacja może zakończyć się niepowodzeniem, jeśli dokładna konwersja nie jest możliwa. Aby zgłosić wszelkie problemy lub niedokładne konwersje, utwórz problem.

Polecenia dekompiluj i kompilują szablony, które są funkcjonalnie równoważne. Mogą one jednak nie być dokładnie takie same w implementacji. Konwertowanie szablonu z formatu JSON na Bicep, a następnie powrót do formatu JSON prawdopodobnie powoduje utworzenie szablonu o innej 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 usługi 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": "2019-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Podczas jego dekompiluj otrzymasz:

@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

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

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

Aby zmienić nazwę pliku, kliknij prawym przyciskiem myszy nazwę, a następnie wybierz pozycję 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@2019-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@2019-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Eksportowanie szablonu i konwertowanie

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

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

Widok równoległy

Plac zabaw Bicep umożliwia wyświetlanie równoważnego szablonu usługi ARM i plików Bicep obok siebie. Możesz wybrać pozycję Przykładowy szablon , aby wyświetlić obie wersje. Możesz też wybrać pozycję Decompile (Decompile ), aby przekazać własny szablon usługi ARM i wyświetlić równoważny plik Bicep.

Następne kroki

Aby dowiedzieć się więcej o wszystkich poleceniach interfejsu wiersza polecenia Bicep, zobacz Polecenia interfejsu wiersza polecenia Bicep.