إلغاء التحويل البرمجي لقالب 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 للتطوير المستقبلي، فيمكنك إلغاء تحويل برمجية تجميعها إلى 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 switch للكتابة فوق ملف Bicep الموجود.

يمكنك أيضا إلغاء التحويل البرمجي لقالب ARM JSON إلى Bicep من Visual Studio Code باستخدام الأمر Decompile في 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 .

المورد له اسم رمزي قد ترغب في تغييره. بدلاً من 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 جنباً إلى جنب. يمكنك تحديد نموذج القالب لرؤية كلا الإصدارين. أو حدد إلغاء التحويل البرمجي لتحميل قالب ARM وعرض ملف Bicep المكافئ.

الخطوات التالية

للتعرف على جميع أوامر Bicep CLI، راجع أوامر Bicep CLI.