將 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 的最佳做法。

本文說明如何在 Azure CLI 中執行 decompile 命令。 如果您並非使用 Azure CLI,請在命令開頭不加上 az 的前提下執行命令。 例如,az bicep decompile 會成為 bicep decompile

從 JSON 反向組譯為 Bicep

若要將 ARM 範本 JSON 反向組譯為 Bicep,請使用:

az bicep decompile --file main.json

此命令會在與 main.json 相同的目錄中建立名稱為 main.bicep 的檔案。 如果相同的目錄中已存在 main.bicep,請使用 --force 參數覆寫現有的 Bicep 檔案。

您也可以使用 [Decompile into Bicep] \(反向組譯為 Bicep\) 命令,將 ARM 範本 JSON 從 Visual Studio Code 反向組譯為 Bicep。 如需詳細資訊,請參閱 Visual Studio Code

警告

反向組譯會嘗試轉換檔案,但不保證從 ARM 範本 JSON 到 Bicep 的對應。 您可能需要修正所產生 Bicep 檔案中的警告和錯誤。 否則當無法準確轉換,反向組譯可能會失敗。 如要回報問題或轉換不準確,請建立問題

decompile 和 build 命令會產生功能相同的範本。 但這兩項命令實作時可能不會完全相同。 將範本從 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 快速鍵。

您可能會希望變更資源所具有的符號名稱。 符號名稱請使用 exampleStorage,而不是 storageAccountName

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 Playground 可讓您並排檢視對等的 ARM 範本與 Bicep 檔案。 您可選取 [範例範本] 查看兩種版本。 或是選取 [反向組譯] 上傳自己的 ARM 範本,並檢視對等的 Bicep 檔案。

下一步

若要了解所有 Bicep CLI 命令,請參閱 Bicep CLI 命令