Condividi tramite


Decompilare un modello json di Azure Resource Manager 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 decompile comando . 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 un modello DI Resource Manager JSON in Bicep, usare:

az bicep decompile --file main.json

Questo 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 Decompile into Bicep comando in Visual Studio Code. Per altre informazioni, vedere Decompile in Bicep.

Attenzione

La decompilazione tenta di convertire il file, ma non esiste alcun mapping garantito dai modelli arm JSON 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. Creare un problema per segnalare eventuali problemi o conversioni imprecise.

I comandi di decompilazione e compilazione producono modelli equivalenti a livello funzionale. Tuttavia, potrebbero non essere esattamente uguali durante l'implementazione. La conversione di un modello da JSON a Bicep e quindi in JSON potrebbe produrre 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. È possibile modificarlo 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 decompile comando . Gli esempi seguenti illustrano come decompilare un modello esportato:

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

Visualizzazione affiancata

Bicep Playground consente di visualizzare i modelli arm equivalenti e i file Bicep affiancati. È possibile selezionare Modello di esempio per visualizzare entrambe le versioni oppure selezionare Decompile per caricare il proprio modello arm e visualizzare il file Bicep equivalente.

Passaggi successivi

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