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": "2023-04-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 = 'store${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-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. 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@2023-04-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@2023-04-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.