Dekompilera ARM-mallens JSON till Bicep
Den här artikeln beskriver hur du dekompilera Azure Resource Manager-mallar (ARM-mallar) till Bicep-filer. Du måste ha Bicep CLI installerat för att köra konverteringskommandona.
Kommentar
Från Visual Studio Code kan du skapa resursdeklarationer direkt genom att importera från befintliga resurser. Mer information finns i Bicep-kommandon.
Med Visual Studio Code kan du klistra in JSON som Bicep. Kommandot decompile körs automatiskt. Mer information finns i Klistra in JSON som Bicep.
Genom att dela upp en ARM-mall kan du komma igång med Bicep-utveckling. Om du har ett bibliotek med ARM-mallar och vill använda Bicep för framtida utveckling kan du dela upp dem till Bicep. Bicep-filen kan dock behöva revisioner för att implementera metodtips för Bicep.
Den här artikeln visar hur du kör decompile
kommandot i Azure CLI. Om du inte använder Azure CLI kör du kommandot utan az
i början av kommandot. Till exempel kommer az bicep decompile
att bli bicep decompile
.
Dekompilera från JSON till Bicep
Om du vill dela upp ARM-mallens JSON till Bicep använder du:
az bicep decompile --file main.json
Kommandot skapar en fil med namnet main.bicep i samma katalog som main.json. Om main.bicep finns i samma katalog använder du växeln --force för att skriva över den befintliga Bicep-filen.
Du kan också dekompilera ARM-mallen JSON till Bicep från Visual Studio Code med hjälp av dekompilera till Bicep-kommandot . Mer information finns i Visual Studio Code.
Varning
Dekompilering försöker konvertera filen, men det finns ingen garanterad mappning från ARM-mallenS JSON till Bicep. Du kan behöva åtgärda varningar och fel i den genererade Bicep-filen. Eller så kan dekompileringen misslyckas om en korrekt konvertering inte är möjlig. Om du vill rapportera eventuella problem eller felaktiga konverteringar skapar du ett problem.
Kommandona decompile och build skapar mallar som är funktionellt likvärdiga. De kanske dock inte är exakt samma i implementeringen. Att konvertera en mall från JSON till Bicep och sedan tillbaka till JSON resulterar förmodligen i en mall med annan syntax än den ursprungliga mallen. När de konverterade mallarna distribueras ger de samma resultat.
Åtgärda konverteringsproblem
Anta att du har följande ARM-mall:
{
"$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')]"
}
}
}
När du dekompilera den får du:
@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
Den dekompilerade filen fungerar, men den har några namn som du kanske vill ändra. Variabeln var storageAccountName_var
har en ovanlig namngivningskonvention. Nu ska vi ändra till:
var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'
Om du vill byta namn på filen högerklickar du på namnet och väljer sedan Byt namn på symbolen. Du kan också använda snabbtangenten F2 .
Resursen har ett symboliskt namn som du kanske vill ändra. I stället storageAccountName
för för det symboliska namnet använder du exampleStorage
.
resource exampleStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
Den fullständiga filen är:
@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
Exportera mall och konvertera
Du kan exportera mallen för en resursgrupp och sedan skicka den direkt till decompile
kommandot. I följande exempel visas hur du dekompilera en exporterad mall.
az group export --name "your_resource_group_name" > main.json
az bicep decompile --file main.json
Sida vid sida-vy
Med Bicep Playground kan du visa motsvarande ARM-mall och Bicep-filer sida vid sida. Du kan välja Exempelmall för att se båda versionerna. Eller välj Dekompilera för att ladda upp din egen ARM-mall och visa motsvarande Bicep-fil.
Nästa steg
Mer information om alla Bicep CLI-kommandon finns i Bicep CLI-kommandon.