Sdílet prostřednictvím


Dekompilování KÓDU JSON šablony ARM na 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é rozhraní příkazového řádku 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í příkaz dekompilu. Další informace najdete v tématu Vložení 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. Soubor Bicep ale může potřebovat revize k implementaci osvědčených postupů pro Bicep.

Tento článek ukazuje, jak spustit decompile příkaz v Azure CLI. Pokud nepoužíváte Azure CLI, spusťte příkaz bez az spuštění 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

Příkaz vytvoří soubor main.bicep ve stejném adresáři jako main.json. Pokud main.bicep existuje ve stejném adresáři, použijte přepínač --force k přepsání existujícího souboru Bicep.

Kód JSON šablony ARM můžete dekompilovat také do Bicep ze sady Visual Studio Code pomocí příkazu Decompile do bicep . Další informace najdete v editoru Visual Studio Code.

Upozornění

Dekompilace se pokusí převést soubor, ale neexistuje žádné zaručené mapování z JSON šablony ARM na Bicep. Možná budete muset opravit upozornění a chyby ve vygenerovaném souboru Bicep. Nebo dekompilace může selhat, pokud není možný přesný převod. Pokud chcete nahlásit problémy nebo nepřesné převody, vytvořte problém.

Příkazy dekompilu a sestavení vytvářejí šablony, které jsou funkčně ekvivalentní. V implementaci ale nemusí být úplně stejné. Převodem šablony z FORMÁTU JSON na Bicep a následným návratem do formátu JSON pravděpodobně vznikne šablona 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": "2023-04-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@2023-04-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í. Pojďme 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@2023-04-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@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Export šablony a převodu

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

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

Zobrazení vedle sebe

Dětské hřiště Bicep umožňuje zobrazit ekvivalentní šablonu ARM a soubory Bicep vedle sebe. Pokud chcete zobrazit obě verze, můžete vybrat ukázkovou šablonu . Nebo vyberte Možnost Decompile (Decompile ) a nahrajte vlastní šablonu ARM a zobrazte 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.