Decompile a JSON Azure Resource Manager template to Bicep
В этой статье описано, как декомпилировать шаблоны Azure Resource Manager (ARM) в файлы Bicep. Для выполнения команд преобразования необходимо установить интерфейс командной строки Bicep CLI.
Примечание.
В Visual Studio Code можно непосредственно создавать объявления ресурсов путем импорта из существующих ресурсов. Дополнительные сведения см. в разделе Команды Bicep.
Visual Studio Code позволяет вставить JSON в формате Bicep. Она автоматически выполняет decompile
команду. Дополнительные сведения см. в статье "Вставка JSON в качестве Bicep".
Декомпиляция шаблона ARM поможет вам приступить к разработке с помощью Bicep. Если у вас есть библиотека шаблонов ARM и вы хотите использовать Bicep для разработки в дальнейшем, вы можете декомпилировать шаблоны ARM в файлы Bicep. Однако для реализации рекомендаций Bicep может потребоваться изменить файлы Bicep.
В этой статье показано, как выполнить команду decompile
в Azure CLI. Если вы не используете Azure CLI, выполните команду без az
в начале. Например, az bicep decompile
преобразуется в bicep decompile
.
Декомпиляция из JSON в Bicep
Чтобы декомпилировать JSON шаблона ARM в Bicep, используйте:
az bicep decompile --file main.json
Эта команда создает файл с именем main.bicep в том же каталоге, что и main.json. Если main.bicep существует в том же каталоге, используйте --force , чтобы перезаписать существующий файл Bicep.
Вы также можете декомпилировать JSON шаблона ARM в Bicep из Visual Studio Code с помощью Decompile into Bicep
команды в Visual Studio Code. Дополнительные сведения см. в разделе Decompile в Bicep.
Внимание
Декомпиляция пытается преобразовать файл, но не существует гарантированного сопоставления из шаблонов ARM JSON в Bicep. Возможно, потребуется устранить предупреждения и ошибки в созданном Bicep-файле. Или может произойти сбой декомпиляции, если точное преобразование невозможно. Создайте проблему , чтобы сообщить о любых проблемах или неточных преобразованиях.
Команды декомпиляции и сборки создают полностью эквивалентные шаблоны. Однако они могут быть не совсем одинаковыми во время реализации. Преобразование шаблона из JSON в Bicep, а затем обратно в JSON может создать шаблон с другим синтаксисом, отличным от исходного шаблона. При развертывании преобразованные шаблоны обеспечивают одинаковые результаты.
Устранение проблем с преобразованием
Предположим, что у вас есть следующий шаблон 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": "2023-04-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[parameters('storageAccountType')]"
},
"kind": "StorageV2",
"properties": {}
}
],
"outputs": {
"storageAccountName": {
"type": "string",
"value": "[variables('storageAccountName')]"
}
}
}
При декомпиляции этого шаблона вы получаете следующее сообщение.
@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
Декомпилированный файл работает, но содержит некоторые имена, которые может потребоваться изменить. Переменная var storageAccountName_var
имеет необычное соглашение об именовании. Его можно изменить на:
var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'
Чтобы переименовать файл, щелкните правой кнопкой мыши имя и выберите " Переименовать символ". Вы также можете использовать горячий ключ F2 .
У ресурса есть символьное имя, которое может потребоваться изменить. Вместо символьного имени storageAccountName
используйте exampleStorage
.
resource exampleStorage 'Microsoft.Storage/storageAccounts@2023-04-01' = {
Полный файл выглядит следующим образом.
@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
Экспорт и преобразование шаблона
Вы можете экспортировать шаблон для группы ресурсов, а затем передать его непосредственно в decompile
команду. В следующих примерах показано, как декомпилировать экспортируемый шаблон:
az group export --name "your_resource_group_name" > main.json
az bicep decompile --file main.json
Параллельное представление
Bicep Playground позволяет просматривать эквивалентные шаблоны ARM и файлы Bicep параллельно. Вы можете выбрать пример шаблона, чтобы просмотреть обе версии или выбрать decompile, чтобы отправить собственный шаблон ARM и просмотреть эквивалентный Bicep-файл.
Следующие шаги
Чтобы узнать обо всех командах ИНТЕРФЕЙСА командной строки Bicep в настоящее время, см . команды ИНТЕРФЕЙСА командной строки Bicep.