Декомпиляция шаблона 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 с помощью команды Decompile into 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": "2019-06-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_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

Декомпилированный файл работает, но содержит некоторые имена, которые может потребоваться изменить. Переменная var storageAccountName_var имеет необычное соглашение об именовании. Давайте изменим эту переменную на следующую.

var uniqueStorageName = 'store${uniqueString(resourceGroup().id)}'

Чтобы переименовать файл, щелкните имя правой кнопкой мыши и выберите команду Переименовать символ. Вы также можете использовать горячую клавишу F2 .

У ресурса есть символьное имя, которое может потребоваться изменить. Вместо символьного имени storageAccountName используйте exampleStorage.

resource exampleStorage 'Microsoft.Storage/storageAccounts@2019-06-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@2019-06-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.