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.