將 JSON Azure Resource Manager 範本分解為 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 的最佳做法。
本文說明如何在 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
Visual Studio Code 中的 命令,將 ARM 範本 JSON 從 Visual Studio Code 反編譯為 Bicep。 如需詳細資訊,請參閱 將編譯譯成 Bicep。
警告
反編譯嘗試轉換檔案,但無法保證從 JSON ARM 範本對應到 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": "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 快速鍵。
您可能會希望變更資源所具有的符號名稱。 符號名稱請使用 exampleStorage
,而不是 storageAccountName
。
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 檔案。 您可以選取 [範例範本 ] 來查看這兩個版本,或選取 [反編譯] 來上傳您自己的 ARM 範本,並檢視對等的 Bicep 檔案。
下一步
若要瞭解目前的所有 Bicep CLI 命令,請參閱 Bicep CLI 命令。