Sdílet prostřednictvím


Dekompilování šablony Azure Resource Manageru JSON do Bicep

Tento článek popisuje, jak dekompilovat šablony Azure Resource Manageru (šablony ARM) do souborů Bicep. Abyste mohli spouštět příkazy převodu, musíte mít nainstalované příkazové rozhraní Bicep.

Poznámka:

V editoru Visual Studio Code můžete přímo vytvořit deklarace prostředků importem z existujících prostředků. Další informace najdete v tématu Příkazy Bicep.

Visual Studio Code umožňuje vložit JSON jako Bicep. Automaticky spustí decompile příkaz. Další informace najdete v Vložit JSON jako Bicep.

Dekompilování šablony ARM vám pomůže začít s vývojem Bicep. Pokud máte knihovnu šablon ARM a chcete použít Bicep pro budoucí vývoj, můžete je dekompilovat do Bicep. Možná ale budete muset upravit soubor Bicep a implementovat osvědčené postupy.

Tento článek ukazuje, jak spustit decompile příkaz v Azure CLI. Pokud nepoužíváte Azure CLI, spusťte příkaz bez části az na začátku příkazu. Například z az bicep decompile se stane bicep decompile.

Dekompilování z JSON do Bicep

Pokud chcete dekompilovat JSON šablony ARM do Bicep, použijte:

az bicep decompile --file main.json

Tento příkaz vytvoří soubor main.bicep ve stejném adresáři jako main.json. Pokud soubor main.bicep existuje ve stejném adresáři, přepište existující soubor Bicep pomocí --force přepínače.

Kód JSON šablony ARM můžete dekompilovat do Bicep ve Visual Studio Code pomocí příkazu Decompile into Bicep ve Visual Studio Code. Další informace naleznete v tématu Decompile into Bicep.

Upozornění

Dekompilace se pokusí převést soubor, ale neexistuje žádné zaručené mapování ze šablon JSON ARM na Bicep. Možná budete muset opravit upozornění a chyby ve vygenerovaném souboru Bicep. V opačném případě může dekompilace selhat, pokud není možný přesný převod. Vytvořte problém , který nahlásí všechny problémy nebo nepřesné převody.

Příkazy dekompilu a sestavení vytvářejí šablony, které jsou funkčně ekvivalentní. Během implementace ale nemusí být úplně stejné. Převod šablony z JSON na Bicep a následný návrat do FORMÁTU JSON může vytvořit šablonu s jinou syntaxí než původní šablona. Při nasazení vytvoří převedené šablony stejné výsledky.

Řešení problémů s převodem

Předpokládejme, že máte následující šablonu 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')]"
    }
  }
}

Když ji dekompilujete, získáte:

@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

Dekompilovaný soubor funguje, ale má několik názvů, které můžete chtít změnit. Proměnná var storageAccountName_var má neobvyklou konvenci pojmenování. Můžete ho změnit na:

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

Pokud chcete soubor přejmenovat, klikněte pravým tlačítkem myši na název a pak vyberte Přejmenovat symbol. Můžete také použít klávesu F2 .

Prostředek má symbolický název, který můžete chtít změnit. storageAccountName Místo symbolického názvu použijte exampleStorage.

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

Úplný soubor je:

@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

Exportovat šablonu a konvertovat

Poznámka:

K exportu souborů Bicep můžete použít Azure Portal. Další informace najdete v tématu Použití webu Azure Portal k exportu souboru Bicep.

Šablonu pro skupinu prostředků můžete exportovat a předat ji přímo do decompile příkazu. Následující příklady ukazují, jak dekompilovat exportovanou šablonu:

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

Zobrazení vedle sebe

Bicep Playground umožňuje zobrazit ekvivalentní šablony ARM a soubory Bicep vedle sebe. Pokud chcete zobrazit obě verze, můžete vybrat ukázkovou šablonu, nebo zvolit Decompile, nahrát vlastní šablonu ARM a zobrazit ekvivalentní soubor Bicep.

Další kroky

Další informace o všech příkazech rozhraní příkazového řádku Bicep najdete v tématu Příkazy rozhraní příkazového řádku Bicep.