Decompilazione del modello ARM JSON in Bicep

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

Nota

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

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

La decompilazione di un modello di Resource Manager consente di iniziare a usare lo sviluppo bicep. Se si dispone di una libreria di modelli di Resource Manager 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 il comando nell'interfaccia della decompile riga di comando di Azure. Se non si usa l'interfaccia della riga di comando di Azure, eseguire il comando senza az all'inizio del comando. Ad esempio az bicep decompile diventa bicep decompile.

Decompilare da JSON a Bicep

Per decompilare il modello DI Arm JSON 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 il commutatore --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 nel comando 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 avvisi ed 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 corrette, creare un problema.

I comandi di decompile 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 nuovamente in JSON comporta probabilmente un modello con sintassi diversa rispetto al modello originale. Quando sono stati 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": "2019-06-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_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

Il file decompilato funziona, ma contiene alcuni nomi che è possibile modificare. La variabile ha una convenzione di denominazione var storageAccountName_var insolita. Cambiamolo 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. storageAccountName Anziché per il nome simbolico, usare exampleStorage.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-06-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@2019-06-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageAccountType
  }
  kind: 'StorageV2'
  properties: {}
}

output storageAccountName string = uniqueStorageName

Esportare il modello e convertire

È possibile esportare il modello per un gruppo di risorse e quindi passarlo direttamente al decompile comando. 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 side-by-side

Bicep Playground 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 il 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 bicep.