Dekompilace JSON šablony ARM do Bicep

Tento článek popisuje, jak dekompilovat šablony Azure Resource Manager (šablony ARM) na soubory Bicep. Abyste mohli spouštět příkazy pro převod, musíte mít nainstalované rozhraní příkazového řádku Bicep .

Poznámka

V editoru Visual Studio Code můžete přímo vytvářet 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 pro dekompil. Další informace najdete v tématu Vložení JSON jako Bicep.

Dekompilace šablony ARM vám pomůže začít s vývojem pro Bicep. Pokud máte knihovnu šablon ARM a chcete použít Bicep pro budoucí vývoj, můžete je dekompilovat na Bicep. K implementaci osvědčených postupů pro Bicep ale soubor Bicep může vyžadovat revize.

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

Dekompilovat z FORMÁTU JSON na Bicep

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

az bicep decompile --file main.json

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

Pomocí příkazu Decompile into Bicep můžete také dekompilovat JSON šablony ARM na Bicep z nástroje Visual Studio Code. Další informace najdete v tématu Visual Studio Code.

Upozornění

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

Příkazy pro dekompilaci a sestavení vytvářejí šablony, které jsou funkčně ekvivalentní. V implementaci ale nemusí být úplně stejné. Převod šablony z FORMÁTU JSON na Bicep a potom zpět na JSON pravděpodobně způsobí šablonu s jinou syntaxí než původní šablona. Po nasazení mají 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": "2019-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

Při dekompilování 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_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

Dekompilovaný soubor funguje, ale má některé názvy, které můžete chtít změnit. Proměnná var storageAccountName_var má neobvyklou konvenci vytváření názvů. 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ávesovou zkratku 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@2019-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@2019-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Export šablony a převod

Šablonu pro skupinu prostředků můžete exportovat a pak ji předat 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

Bicep Playground umožňuje zobrazit ekvivalentní šablonu ARM a soubory Bicep vedle sebe. Výběrem možnosti Ukázková šablona zobrazíte obě verze. Nebo vyberte Decompile (Dekompilovat ) 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.