Bicep への ARM テンプレート JSON の逆コンパイル
この記事では、Azure Resource Manager テンプレート (ARM テンプレート) を Bicep ファイルに逆コンパイルする方法について説明します。 変換コマンドを実行するには、Bicep CLI がインストールされている必要があります。
注意
Visual Studio Code で、既存のリソースからインポートすることにより、リソースの宣言を直接作成できます。 詳しくは、「Bicep コマンド」をご覧ください。
Visual Studio Code を使用すると、JSON を Bicep として貼り付けることができます。 逆コンパイル コマンドが自動的に実行されます。 詳細については、JSON を Bicep として貼り付けるに関するページを参照してください。
ARM テンプレートの逆コンパイルは、Bicep の開発を開始するうえで役立ちます。 ARM テンプレートのライブラリがあり、今後の開発に Bicep を使用する場合は、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 ファイルを上書きします。
また、Visual Studio Code から Bicep に ARM テンプレート JSON を逆コンパイルするには、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": "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 Playground を使うと、同等の ARM テンプレートと Bicep ファイルを横に並べて表示できます。 [サンプル テンプレート] を選ぶと、両方のバージョンを表示できます。 または、[逆コンパイル] を選んで、独自の ARM テンプレートをアップロードし、同等の Bicep ファイルを表示します。
次のステップ
すべての Bicep CLI コマンドの詳細については、「BICEP CLI コマンド」を参照してください。