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

Para descompilar um modelo JSON do ARM para 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.

Também pode descompilar o modelo JSON do ARM para Bicep no Visual Studio Code, utilizando o comando Decompile into Bicep. Para mais informações, veja Descompilar em 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

Nota

Os identificadores Bicep, incluindo nomes de parâmetros, só podem conter letras, dígitos e sublinhados. Os pontos são suportados nos nomes dos parâmetros JSON do modelo ARM, mas não no Bicep. Se um template ARM usar pontos nos nomes dos parâmetros, o descompilador substitui os pontos por sublinhares. Por exemplo, um parâmetro chamado Security.Authentication.AAD.Tenant torna-se Security_Authentication_AAD_Tenant. Revise os nomes dos parâmetros descompilados e atualize quaisquer referências nos seus templates e ficheiros de parâmetros.

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.