Decompiling ARM-sjabloon JSON naar Bicep
In dit artikel wordt beschreven hoe u ARM-sjablonen (Azure Resource Manager-sjablonen) kunt decompileren naar Bicep-bestanden. U moet de Bicep CLI hebben geïnstalleerd om de conversieopdrachten uit te voeren.
Notitie
Vanuit Visual Studio Code kunt u rechtstreeks resourcedeclaraties maken door deze te importeren uit bestaande resources. Zie Bicep-opdrachten voor meer informatie.
Met Visual Studio Code kunt u JSON plakken als Bicep. De opdracht decompile wordt automatisch uitgevoerd. Zie JSON plakken als Bicep voor meer informatie.
Door een ARM-sjabloon te decompileren, kunt u aan de slag met Bicep-ontwikkeling. Als u een bibliotheek met ARM-sjablonen hebt en Bicep wilt gebruiken voor toekomstige ontwikkeling, kunt u deze decompileren naar Bicep. Het Bicep-bestand heeft echter mogelijk revisies nodig om best practices voor Bicep te implementeren.
In dit artikel wordt beschreven hoe u de decompile
opdracht uitvoert in Azure CLI. Als u azure CLI niet gebruikt, voert u de opdracht uit zonder az
aan het begin van de opdracht. Zo wordt az bicep decompile
gewijzigd in bicep decompile
.
Decompileren van JSON naar Bicep
Als u de JSON van de ARM-sjabloon wilt decompileren naar Bicep, gebruikt u:
az bicep decompile --file main.json
Met de opdracht maakt u een bestand met de naam main.bicep in dezelfde map als main.json. Als main.bicep in dezelfde map bestaat, gebruikt u de --force-switch om het bestaande Bicep-bestand te overschrijven.
U kunt arm-sjabloon JSON ook decompileren naar Bicep vanuit Visual Studio Code met behulp van de opdracht Decompile in Bicep . Zie Visual Studio Code voor meer informatie.
Let op
Decompilatie probeert het bestand te converteren, maar er is geen gegarandeerde toewijzing van ARM-sjabloon-JSON naar Bicep. Mogelijk moet u waarschuwingen en fouten in het gegenereerde Bicep-bestand oplossen. Of decompilatie kan mislukken als een nauwkeurige conversie niet mogelijk is. Als u problemen of onjuiste conversies wilt melden, maakt u een probleem.
Met de opdrachten voor de decompilatie en build worden sjablonen geproduceerd die functioneel gelijkwaardig zijn. Het is echter mogelijk dat ze niet precies hetzelfde zijn in de implementatie. Het converteren van een sjabloon van JSON naar Bicep en vervolgens terug naar JSON resulteert waarschijnlijk in een sjabloon met een andere syntaxis dan de oorspronkelijke sjabloon. Wanneer deze worden geïmplementeerd, produceren de geconverteerde sjablonen dezelfde resultaten.
Conversieproblemen oplossen
Stel dat u de volgende ARM-sjabloon hebt:
{
"$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')]"
}
}
}
Wanneer u deze decompileren, krijgt u het volgende:
@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
Het gedecompileerde bestand werkt, maar het bevat een aantal namen die u mogelijk wilt wijzigen. De variabele var storageAccountName_var
heeft een ongebruikelijke naamconventie. Laten we dit wijzigen in:
var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'
Als u de naam van het bestand wilt wijzigen, klikt u met de rechtermuisknop op de naam en selecteert u het symbool Naam wijzigen. U kunt ook de sneltoets F2 gebruiken.
De resource heeft een symbolische naam die u mogelijk wilt wijzigen. Gebruik in plaats van storageAccountName
voor de symbolische naam exampleStorage
.
resource exampleStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
Het volledige bestand is:
@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
Sjabloon exporteren en converteren
U kunt de sjabloon voor een resourcegroep exporteren en deze vervolgens rechtstreeks doorgeven aan de decompile
opdracht. In het volgende voorbeeld ziet u hoe u een geëxporteerde sjabloon kunt decompileren.
az group export --name "your_resource_group_name" > main.json
az bicep decompile --file main.json
Weergave naast elkaar
Met Bicep Playground kunt u gelijkwaardige ARM-sjabloon en Bicep-bestanden naast elkaar weergeven. U kunt voorbeeldsjabloon selecteren om beide versies te zien. Of selecteer Decompile om uw eigen ARM-sjabloon te uploaden en het equivalente Bicep-bestand weer te geven.
Volgende stappen
Zie Bicep CLI-opdrachten voor meer informatie over alle Bicep CLI-opdrachten.