Partilhar via


Descompilar um modelo JSON do Gestor de Recursos do Azure para Bicep

Este artigo descreve como descompilar modelos do Azure Resource Manager (modelos ARM) para arquivos Bicep. Você deve ter a CLI do Bicep instalada para executar os comandos de conversão.

Nota

No Visual Studio Code, você pode criar diretamente declarações de recursos importando de recursos existentes. Para obter mais informações, consulte Comandos do bíceps.

O Visual Studio Code permite colar JSON como Bicep. Ele executa automaticamente o decompile comando. Para mais informações, consulte Paste JSON as Bicep.

A descompilação de um template ARM ajuda a começar com o desenvolvimento em Bicep. Se você tiver uma biblioteca de modelos ARM e quiser usar o Bicep para desenvolvimento futuro, poderá descompilá-los para o Bicep. No entanto, talvez seja necessário revisar o arquivo Bicep para implementar as práticas recomendadas.

Este artigo mostra como executar o comando na CLI decompile do Azure. Se você não estiver usando a CLI do Azure, execute o comando sem az no início do comando. Por exemplo, az bicep decompile passa a bicep decompile.

Descompilar de JSON para Bicep

To decompile an ARM template JSON to Bicep, use:

az bicep decompile --file main.json

Este comando cria um arquivo chamado main.bicep no mesmo diretório que main.json. Se main.bicep existir no mesmo diretório, use o --force switch para substituir o arquivo Bicep existente.

You can also decompile ARM template JSON to Bicep from Visual Studio Code by using the Decompile into Bicep command in Visual Studio Code. For more information, see Decompile into Bicep.

Atenção

A descompilação tenta converter o arquivo, mas não há mapeamento garantido de modelos JSON ARM para Bicep. Talvez seja necessário corrigir avisos e erros no arquivo Bicep gerado. Caso contrário, a descompilação pode falhar se uma conversão precisa não for possível. Crie um problema para relatar quaisquer problemas ou conversões imprecisas.

Os comandos decompile e build produzem modelos que são funcionalmente equivalentes. No entanto, eles podem não ser exatamente os mesmos durante a implementação. Converter um modelo de JSON para Bicep e, em seguida, de volta para JSON pode produzir um modelo com sintaxe diferente do modelo original. Quando implantados, os modelos convertidos produzem os mesmos resultados.

Corrigir problemas de conversão

Suponha que você tenha o seguinte modelo 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')]"
    }
  }
}

Ao descompilá-lo, você obtém:

@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

O arquivo descompilado funciona, mas tem alguns nomes que você pode querer alterar. A variável var storageAccountName_var tem uma convenção de nomenclatura incomum. Você pode alterá-lo para:

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

Para mudar o nome no ficheiro, clique com o botão direito do rato no nome e, em seguida, selecione Mudar o nome do símbolo. Você também pode usar a tecla de atalho F2 .

O recurso tem um nome simbólico que você pode querer alterar. Em vez de usar o nome simbólico storageAccountName, use exampleStorage.

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

O ficheiro completo é:

@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

Exportar modelo e converter

Nota

Você pode usar o portal do Azure para exportar arquivos Bicep. Para mais informações, consulte Utilizar o portal Azure para exportar um ficheiro Bicep.

Você pode exportar o modelo para um grupo de recursos e, em seguida, passá-lo diretamente para o decompile comando. Os exemplos a seguir mostram como descompilar um modelo exportado:

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

Vista lado a lado

O Bicep Playground permite que você visualize modelos ARM equivalentes e arquivos Bicep lado a lado. Você pode selecionar Modelo de exemplo para ver ambas as versões ou selecionar Descompilar para carregar seu próprio modelo ARM e exibir o arquivo Bicep equivalente.

Próximos passos

Para saber mais sobre todos os comandos da CLI do Bicep, consulte Comandos da CLI do Bicep.