Compartir a través de


Descompilación de una plantilla de JSON de Azure Resource Manager en Bicep

En este artículo se describe cómo descompilar plantillas de Azure Resource Manager (plantillas de ARM) en archivos Bicep. Para ejecutar los comandos de conversión, debe tener instalada la CLI de Bicep.

Nota:

Desde Visual Studio Code, puede crear directamente declaraciones de recursos importando desde recursos existentes. Para más información, consulte Comandos de Bicep.

Visual Studio Code permite pegar JSON como Bicep. Ejecuta automáticamente el comando de decompile. Para más información, consulte Pegar JSON como Bicep.

La descompilación de una plantilla de ARM le ayuda a empezar a trabajar con el desarrollo en Bicep. Si tiene una biblioteca de plantillas de ARM y desea usar Bicep para futuros desarrollos, puede descompilarlas en Bicep. Sin embargo, es posible que el archivo Bicep necesite revisiones para implementar los procedimientos recomendados para Bicep.

En este artículo se muestra cómo ejecutar el comando decompile en la CLI de Azure. Si no usa la CLI de Azure, ejecute el comando sin az al principio del comando. Por ejemplo, az bicep decompile se convierte en bicep decompile.

Descompilación de JSON en Bicep

Para descompilar el código JSON de una plantilla de ARM en Bicep, utilice lo siguiente:

az bicep decompile --file main.json

Este comando crea un archivo llamado main.bicep en el mismo directorio que main.json. Si main.bicep existe en el mismo directorio, use el modificador --force para sobrescribir el archivo Bicep existente.

También puede descompilar el JSON de plantilla de ARM en Bicep desde Visual Studio Code mediante el comando Decompile into Bicepen Visual Studio Code. Para obtener más información, consulte Descompilar en Bicep.

Precaución

La descompilación intenta convertir el archivo, pero no hay ninguna asignación garantizada de plantillas de ARM de JSON a Bicep. Es posible que tenga que corregir advertencias y errores en el archivo Bicep generado. La descompilación también puede producir un error si no es posible realizar una conversión precisa. Cree una incidencia para notificar cualquier problema o conversiones inexactas.

Los comandos decompile y build generan plantillas que son funcionalmente equivalentes. Sin embargo, es posible que no sean exactamente iguales durante la implementación. Si se convierte una plantilla de JSON a Bicep y, después, se realiza el proceso inverso, es probable que se produzca una plantilla con una sintaxis diferente a la de la plantilla original. Cuando se implementan, las plantillas convertidas generan los mismos resultados.

Corrección de problemas de conversión

Supongamos que tiene la siguiente plantilla de 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')]"
    }
  }
}

Al descompilarla, obtiene lo siguiente:

@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

El archivo descompilado funciona, pero tiene algunos nombres que tal vez desee cambiar. La variable var storageAccountName_var tiene una convención de nomenclatura inusual. Se puede cambiarlo a:

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

Para cambiar el nombre del archivo, haga clic con el botón derecho en el nombre y, a continuación, seleccione Cambiar nombre del símbolo. También puede usar la tecla de acceso rápido F2.

El recurso tiene un nombre simbólico que tal vez desee cambiar. En lugar de storageAccountName como nombre simbólico, use exampleStorage.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {

El archivo completo es:

@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

Exportación de la plantilla y conversión

Puede exportar la plantilla para un grupo de recursos y, después, pasarla directamente al comando decompile. En los ejemplos siguientes se muestra cómo descompilar una plantilla exportada:

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

Vista en paralelo

Bicep Playground le permite ver plantillas de ARM y los archivos Bicep equivalentes en paralelo. Puede seleccionar plantilla de prueba para ver ambas versiones o seleccionar Descompilar para cargar su propia plantilla de ARM y ver el archivo Bicep equivalente.

Pasos siguientes

Para más información sobre todos los comandos de la CLI de Bicep en este momento, consulte Comandos de la CLI de Bicep.