Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本文介绍了如何将 Azure 资源管理器模板(ARM 模板)反向编译到 Bicep 文件。 必须已安装 Bicep CLI 才能运行转换命令。
注释
从 Visual Studio Code 中,可以通过从现有资源导入直接创建资源声明。 有关详细信息,请参阅 Bicep 命令。
Visual Studio Code 支持将 JSON 粘贴为 Bicep。 它会自动运行 decompile
命令。 有关详细信息,请参阅将 JSON 粘贴为 Bicep。
反向编译 ARM 模板可帮助你入门 Bicep 开发。 如果你有 ARM 模板库,并且想要使用 Bicep 进行未来的开发,可以将这些模板反向编译为 Bicep。 但是,可能需要修改 Bicep 文件以实现最佳做法。
本文演示如何在 Azure CLI 中运行 decompile
命令。 如果你不使用 Azure CLI,则无需在命令开始部分使用 az
来运行命令。 例如,az bicep decompile
将变为 bicep decompile
。
要将 ARM 模板 JSON 反向编译为 Bicep,请使用:
az bicep decompile --file main.json
此命令在与 main.json 相同的目录中创建名为 main.bicep 的文件。 如果 main.bicep 存在于同一目录中,请使用 --force
开关覆盖现有的 Bicep 文件。
还可以使用 Visual Studio Code 中的 Decompile into Bicep
命令从 Visual Studio Code 中将 ARM 模板 JSON 反向编译为 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”热键。
你可能会想更改资源的符号化名称。 对于符号名称,请使用 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
注释
可以使用 Azure 门户导出 Bicep 文件。 有关详细信息,请参阅 使用 Azure 门户导出 Bicep 文件。
可以导出资源组的模板,然后将其直接传递到 decompile
命令。 以下示例演示如何反向编译已导出的模板:
- Azure CLI
- Azure PowerShell
- Azure 门户
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 命令。