Arm-sjabloon-JSON decompileren naar Bicep
In dit artikel wordt beschreven hoe u Azure Resource Manager-sjablonen (ARM-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 te importeren uit bestaande resources. Zie Bicep-opdrachten voor meer informatie.
Met Visual Studio Code kunt u JSON plakken als Bicep. De opdracht decompileren 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 zonder az
uit aan het begin van de opdracht. az bicep decompile
wordt bijvoorbeeld bicep decompile
.
Decompileren van JSON naar Bicep
Als u de ARM-sjabloon-JSON 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 schakeloptie --force 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 Decompileren in Bicep . Zie Visual Studio Code voor meer informatie.
Waarschuwing
Met decompilatie wordt geprobeerd het bestand te converteren, maar er is geen gegarandeerde toewijzing van de 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 onnauwkeurige conversies wilt melden, maakt u een probleem.
De opdrachten voor decompileren en bouwen produceren sjablonen die functioneel gelijkwaardig zijn. Ze zijn echter mogelijk niet precies hetzelfde in de implementatie. Als u een sjabloon converteert van JSON naar Bicep en vervolgens terug naar JSON, resulteert dit waarschijnlijk in een sjabloon met een andere syntaxis dan de oorspronkelijke sjabloon. Wanneer de geconverteerde sjablonen zijn geïmplementeerd, worden dezelfde resultaten geproduceerd.
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": "2019-06-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_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
Het gedecompileerde bestand werkt, maar het heeft een aantal namen die u mogelijk wilt wijzigen. De variabele var storageAccountName_var
heeft een ongebruikelijke naamconventie. Laten we deze wijzigen in:
var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'
Als u de naam van het hele bestand wilt wijzigen, klikt u met de rechtermuisknop op de naam en selecteert u Naam van symbool wijzigen. U kunt ook de sneltoets F2 gebruiken.
De resource heeft een symbolische naam die u mogelijk wilt wijzigen. Gebruik exampleStorage
in plaats van storageAccountName
voor de symbolische naam .
resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-06-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@2019-06-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 equivalente ARM-sjabloon en Bicep-bestanden naast elkaar weergeven. U kunt Voorbeeldsjabloon selecteren om beide versies te zien. Of selecteer Decompileren 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.