Udostępnij za pośrednictwem


Dekompilowanie pliku JSON szablonu usługi ARM na wartość 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. Aby uzyskać więcej informacji, zobacz Polecenia Bicep.

Program Visual Studio Code umożliwia wklejanie kodu JSON jako Bicep. Automatycznie uruchamia polecenie dekompiluj. Aby uzyskać więcej informacji, zobacz Wklej kod JSON jako 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 dekompilować do aplikacji Bicep. Jednak plik Bicep może wymagać poprawek w celu zaimplementowania 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 do 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żesz również dekompilować kod JSON szablonu usługi ARM do Bicep z poziomu programu Visual Studio Code, używając polecenia Decompile do Bicep . Aby uzyskać więcej informacji, zobacz Visual Studio Code.

Uwaga

Dekompilacja próbuje przekonwertować plik, ale nie ma gwarantowanego mapowania z pliku JSON szablonu usługi ARM na Bicep. Może być konieczne naprawienie ostrzeżeń i błędów w wygenerowanych plikach Bicep. Ewentualnie 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ą tworzą szablony, które są funkcjonalnie równoważne. Jednak mogą 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 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 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 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_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 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@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ę Dekompiluj , 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.