Descompilación del código JSON de plantilla de ARM 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 descompilación. 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

El 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 para descompilar en Bicep. Para obtener más información, vea Visual Studio Code.

Precaución

La descompilación intenta convertir el archivo, pero no hay ninguna asignación garantizada del código JSON de la plantilla de ARM 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. Para notificar cualquier problema o conversiones inexactas, abra una incidencia.

Los comandos decompile y build generan plantillas que son funcionalmente equivalentes. Sin embargo, es posible que no sean exactamente iguales en la implementación. Si se convierte una plantilla de JSON a Bicep y, después, se realiza el proceso inverso, es probable que se genere 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": "2019-06-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_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

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. La cambiaremos 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@2019-06-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@2019-06-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 el ejemplo siguiente 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 la plantilla de ARM y los archivos Bicep equivalentes en paralelo. Puede seleccionar una Plantilla de ejemplo para ver ambas versiones. O bien, seleccione 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, consulte Comandos de la CLI de Bicep.