Декомпиляция шаблона ARM в формате JSON в файл Bicep
В этой статье описано, как декомпилировать шаблоны Azure Resource Manager (ARM) в файлы Bicep. Для выполнения команд преобразования необходимо установить интерфейс командной строки Bicep CLI.
Примечание.
В Visual Studio Code можно непосредственно создавать объявления ресурсов путем импорта из существующих ресурсов. Дополнительные сведения см. в разделе Команды Bicep.
Visual Studio Code позволяет вставить JSON в формате Bicep. Она автоматически выполняет команду декомпилировать. Дополнительные сведения см. в статье "Вставка JSON в качестве Bicep".
Декомпиляция шаблона ARM поможет вам приступить к разработке с помощью Bicep. Если у вас есть библиотека шаблонов ARM и вы хотите использовать Bicep для разработки в дальнейшем, вы можете декомпилировать шаблоны ARM в файлы Bicep. Однако для реализации рекомендаций Bicep может потребоваться изменить файлы Bicep.
В этой статье показано, как выполнить команду decompile
в Azure CLI. Если вы не используете Azure CLI, выполните команду без az
в начале. Например, az bicep decompile
преобразуется в bicep decompile
.
Декомпиляция из JSON в Bicep
Чтобы декомпилировать шаблон ARM в формате JSON в файл Bicep, выполните следующую команду.
az bicep decompile --file main.json
Команда создает файл с именем main.bicep в том же каталоге, что и main.json. Если main.bicep существует в том же каталоге, используйте --force , чтобы перезаписать существующий файл Bicep.
Вы также можете декомпилировать JSON шаблона ARM в Bicep из Visual Studio Code с помощью декомпилы в команду Bicep . Дополнительные сведения см. в Visual Studio Code.
Внимание
При декомпиляции выполняется попытка преобразовать файл, но действующее сопоставление между шаблонами 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 позволяет параллельно просматривать шаблон ARM и файл Bicep. Можно выбрать Sample Template (Пример шаблона), чтобы просмотреть обе версии. Или выберите Decompile (Декомпилировать), чтобы передать собственный шаблон ARM и просмотреть эквивалентный файл Bicep.
Следующие шаги
Дополнительные сведения о всех командах интерфейса командной строки Bicep см. в разделе Команды CLI Bicep.