Decompilar o JSON do modelo do ARM para Bicep
Este artigo descreve como decompilar modelos do Azure Resource Manager (modelos arm) em ficheiros Bicep. Tem de ter a CLI do Bicep instalada para executar os comandos de conversão.
Nota
A partir do Visual Studio Code, pode criar diretamente declarações de recursos ao importar a partir de recursos existentes. Para obter mais informações, veja Comandos do Bicep.
O Visual Studio Code permite-lhe colar JSON como Bicep. Executa automaticamente o comando de decompilação. Para obter mais informações, veja Colar JSON como Bicep.
Decompilar um modelo do ARM ajuda-o a começar a desenvolver o Bicep. Se tiver uma biblioteca de modelos do ARM e quiser utilizar o Bicep para desenvolvimento futuro, pode decompilá-los com o Bicep. No entanto, o ficheiro Bicep poderá precisar de revisões para implementar as melhores práticas do Bicep.
Este artigo mostra como executar o comando na CLI do decompile
Azure. Se não estiver a utilizar a CLI do Azure, execute o comando sem az
no início do comando. Por exemplo, az bicep decompile
torna-se bicep decompile
.
Decompilar de JSON para Bicep
Para descompilar o JSON do modelo arm para Bicep, utilize:
az bicep decompile --file main.json
O comando cria um ficheiro com o nome main.bicep no mesmo diretório que main.json. Se o ficheiro main.bicep existir no mesmo diretório, utilize o comutador --force para substituir o ficheiro Bicep existente.
Também pode descompilar o modelo do ARM JSON para Bicep a partir do Visual Studio Code com o comando Decompilar em Bicep . Para obter mais informações, veja Visual Studio Code.
Atenção
A descompilação tenta converter o ficheiro, mas não há mapeamento garantido do modelo do ARM JSON para Bicep. Poderá ter de corrigir avisos e erros no ficheiro Bicep gerado. Em alternativa, a descompilação pode falhar se não for possível uma conversão precisa. Para comunicar quaisquer problemas ou conversões imprecisas, crie um problema.
Os comandos de decompilação e compilação produzem modelos funcionalmente equivalentes. No entanto, podem não ser exatamente os mesmos na implementação. Converter um modelo de JSON em Bicep e, em seguida, voltar a JSON provavelmente resulta num modelo com sintaxe diferente do modelo original. Quando implementados, os modelos convertidos produzem os mesmos resultados.
Corrigir problemas de conversão
Suponha que tem o seguinte modelo arm:
{
"$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')]"
}
}
}
Quando o decompila, obtém:
@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
O ficheiro decomposto funciona, mas tem alguns nomes que poderá querer alterar. A variável var storageAccountName_var
tem uma convenção de nomenclatura invulgar. Vamos alterá-lo para:
var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'
Para mudar o nome no ficheiro, clique com o botão direito do rato no nome e, em seguida, selecione Mudar o nome do símbolo. Também pode utilizar a tecla de atalho F2 .
O recurso tem um nome simbólico que poderá querer alterar. Em vez de storageAccountName
para o nome simbólico, utilize exampleStorage
.
resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-06-01' = {
O ficheiro 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@2019-06-01' = {
name: uniqueStorageName
location: location
sku: {
name: storageAccountType
}
kind: 'StorageV2'
properties: {}
}
output storageAccountName string = uniqueStorageName
Exportar modelo e converter
Pode exportar o modelo para um grupo de recursos e, em seguida, transmiti-lo diretamente para o decompile
comando . O exemplo seguinte mostra como decompilar um modelo exportado.
az group export --name "your_resource_group_name" > main.json
az bicep decompile --file main.json
Vista lado a lado
O Bicep Playground permite-lhe ver ficheiros bicep e modelo do ARM equivalentes lado a lado. Pode selecionar Modelo de Exemplo para ver ambas as versões. Em alternativa, selecione Decompilar para carregar o seu próprio modelo do ARM e ver o ficheiro Bicep equivalente.
Passos seguintes
Para saber mais sobre todos os comandos da CLI do Bicep, veja Comandos da CLI do Bicep.