Decompilazione del JSON del modello di ARM in Bicep

Questo articolo descrive come decompilare i modelli di Azure Resource Manager (modelli di ARM) in file Bicep. Per eseguire i comandi di conversione, è necessario che sia installata l'interfaccia della riga di comando di Bicep.

Nota

Da Visual Studio Code è possibile creare direttamente dichiarazioni di risorse importando da risorse esistenti. Per altre informazioni, vedere Comandi Bicep.

Visual Studio Code consente di incollare JSON come Bicep. Esegue automaticamente il comando di decompilazione. Per altre informazioni, vedere Incollare JSON come Bicep.

La decompilazione di un modello di ARM consente di iniziare a sviluppare Bicep. Se si dispone di una libreria di modelli ARM e si vuole usare Bicep per lo sviluppo futuro, è possibile decompilarli in Bicep. Tuttavia, il file Bicep potrebbe richiedere revisioni per implementare le procedure consigliate per Bicep.

Questo articolo illustra come eseguire i decompile comandi nell'interfaccia della riga di comando di Azure. Se non si usa l'interfaccia della riga di comando di Azure, eseguire il comando senza az all'avvio del comando. Ad esempio, az bicep decompile diventa bicep decompile.

Decompilare da JSON a Bicep

Per decompilare il JSON del modello di ARM in Bicep, usare:

az bicep decompile --file main.json

Il comando crea un file denominato main.bicep nella stessa directory di main.json. Se main.bicep esiste nella stessa directory, usare l'opzione --force per sovrascrivere il file Bicep esistente.

È anche possibile decompilare il codice JSON del modello ARM in Bicep da Visual Studio Code usando il comando Decompile in Bicep. Per altre informazioni, vedere Visual Studio Code.

Attenzione

La decompilazione tenta di convertire il file, ma non esiste alcun mapping garantito da JSON del modello ARM a Bicep. Potrebbe essere necessario correggere gli avvisi e gli errori nel file Bicep generato. In alternativa, la decompilazione può non riuscire se non è possibile eseguire una conversione accurata. Per segnalare eventuali problemi o conversioni non accurate, creare un problema.

I comandi di decompilazione e compilazione producono modelli equivalenti a livello funzionale. Tuttavia, potrebbero non essere esattamente gli stessi nell'implementazione. La conversione di un modello da JSON a Bicep e quindi in JSON probabilmente comporta un modello con sintassi diversa rispetto al modello originale. Quando vengono distribuiti, i modelli convertiti producono gli stessi risultati.

Risolvere i problemi di conversione

Si supponga di avere il modello ARM seguente:

{
  "$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')]"
    }
  }
}

Quando si decompila, si ottiene:

@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

Il file decompilato funziona, ma contiene alcuni nomi che è possibile modificare. La variabile var storageAccountName_var ha una convenzione di denominazione insolita. Modificarla in:

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

Per rinominare il file, fare clic con il pulsante destro del mouse sul nome e quindi scegliere Rinomina simbolo. È anche possibile usare il tasto di scelta rapida F2.

La risorsa ha un nome simbolico che potrebbe essere necessario modificare. Anziché storageAccountName per il nome simbolico, usare exampleStorage.

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

Il file 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@2023-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Esportare il modello e convertirlo

È possibile esportare il modello per un gruppo di risorse e quindi passarlo direttamente al comando decompile. Nell'esempio seguente viene illustrato come decompilare un modello esportato.

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

Visualizzazione affiancata

Il Playground Bicep consente di visualizzare il modello ARM equivalente e i file Bicep affiancati. È possibile selezionare modello di esempio per visualizzare entrambe le versioni. In alternativa, selezionare Decompile per caricare un modello ARM personalizzato e visualizzare il file Bicep equivalente.

Passaggi successivi

Per informazioni su tutti i comandi dell'interfaccia della riga di comando di Bicep, vedere Comandi dell'interfaccia della riga di comando di Bicep.