التشغيل السريع: استكشاف أخطاء عمليات توزيع JSON لقالب ARM وإصلاحها

يوضح هذا التشغيل السريع كيفية استكشاف أخطاء توزيع JSON لقالب Azure Resource Manager (قالب ARM) وإصلاحها. ستقوم بإعداد قالب يحتوي على أخطاء، وستتعرف على كيفية إصلاح الأخطاء.

قالب Azure Resource Manager هو ملف JavaScript Object Notation (JSON) الذي يحدد البنية الأساسية والتكوين لمشروعك. يستخدم القالب عبارات توضيحية. يمكنك وصف النشر المقصود دون كتابة تسلسل أوامر البرمجة لإنشاء النشر.

هناك ثلاثة أنواع من الأخطاء المرتبطة بالنشر:

  • تُحدث أخطاء التحقق من صحة البيانات قبل بدء عملية التوزيع، وهي ناتجة عن أخطاء بناء الجملة في الملف. يمكن لمحرر التعليمات البرمجية مثل Visual Studio Code تحديد هذه الأخطاء.
  • تحدث أخطاء التحقق من صحة الاختبار المبدئي عند تشغيل أمر التوزيع دون توزيع الموارد. يتم العثور على هذه الأخطاء قبل بدء النشر. على سبيل المثال، إذا كانت قيمة معلمة غير صحيحة، يستطيع الاختبار المبدئي العثور على الخطأ.
  • أخطاء التوزيع تظهر أثناء عملية التوزيع ولا يمكن العثور عليها إلا بتقييم سير عملية التوزيع في بيئة Azure.

ومع كل خطا يظهر رمز خطأ مميز يستخدم لاستكشاف أخطاء النشر وإصلاحها. تظهر أخطاء التحقق من الصحة وأخطاء الاختبار المبدئي في سجل النشاط ولكن لا تظهر في محفوظات التوزيع.

المتطلبات الأساسية

لاستكمال هذا التشغيل السريع، ستحتاج إلى العناصر التالية:

إنشاء قالب به أخطاء

انسخ القالب التالي واحفظه محلياً. ستستخدم هذا الملف لاستكشاف أخطاء التحقق من صحة البيانات أخطاء الاختبار المبدئي وخطأ النشر. يفترض هذا التشغيل السريع أنك قمت بتسمية الملف troubleshoot.json ولكن يمكنك استخدام أي اسم.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameterss": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    },
    "vnetResult": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
    }
  }
}

إصلاح خطأ التحقق من الصحة

افتح الملف في Visual Studio Code. يشير الخط المتموج تحت parameterss: إلى وجود خطأ. لمشاهدة خطأ التحقق من الصحة، مرر الماوس فوق الخطأ.

Screenshot of Visual Studio Code highlighting a template validation error with a red wavy line under the misspelled 'parameterss:' in the code.

ستلاحظ أن variables وresources بهما أخطاء في مرجع معلمة غير محدد. لعرض أخطاء التحقق من صحة القالب، حدد View>Problems.

Screenshot of Visual Studio Code showing the Problems tab listing undefined parameter reference errors for 'variables' and 'resources' sections.

تنتج جميع الأخطاء عن خطأ إملائي في اسم عنصر.

"parameterss": {

تنص رسالة الخطأ على فشل التحقق من صحة القالب: تعذر العثور على "معلمات" العضو في عنصر من النوع "قالب". "معلمات" المسار، السطر 4، الموضع 16.

يوضح بناء جملة قالب ARM لـ المعلمات أن parameters هو اسم العنصر الصحيح.

لإصلاح خطأ التحقق من الصحة وأخطاء مرجع معلمة غير محدد، قم بتصحيح الخطأ الإملائي وحفظ الملف.

"parameters": {

إصلاح خطأ في الاختبار المبدئي

لإنشاء خطأ التحقق من صحة الاختبار المبدئي، ستستخدم قيمة غير صحيحة للمعلمة prefixName.

يستخدم هذا التشغيل السريع troubleshootRG لاسم مجموعة الموارد، ولكن يمكنك استخدام أي اسم.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=long!!StoragePrefix

يفشل القالب في التحقق من صحة الاختبار المبدئي ولا يتم تشغيل التوزيع. يتكون prefixName من أكثر من 11 حرفاً ويحتوي على أحرف خاصة وأحرف كبيرة.

يجب أن تكون أسماء التخزين بين 3 و24 حرفاً وأن تستخدم الأحرف الصغيرة والأرقام فقط. أنشأت قيمة البادئة اسم تخزين غير صالح. لمزيد من المعلومات، راجع حل الأخطاء لأسماء حسابات التخزين. لإصلاح خطأ الاختبار المبدئي، استخدم بادئة تحتوي على 11 حرفاً أو أقل وتحتوي على أحرف صغيرة أو أرقام فقط.

لا توجد محفوظات توزيع نظراً لعدم تشغيل التوزيع.

Screenshot of Azure resource group overview page displaying an empty deployment history section due to a preflight error.

يُظهر سجل النشاط خطأ الاختبار المبدئي. حدد السجل للاطلاع على تفاصيل الخطأ.

Screenshot of Azure resource group activity log showing a preflight error entry with a red exclamation mark icon.

إصلاح خطأ النشر

تشغيل التوزيع بقيمة بادئة صالحة، مثل storage.

az group create --name troubleshootRG --location westus
az deployment group create \
  --resource-group troubleshootRG \
  --template-file troubleshoot.json \
  --parameters prefixName=storage

يبدأ التوزيع ويظهر في محفوظات التوزيع. يفشل التوزيع لأن outputs يشير إلى شبكة ظاهرية غير موجودة في مجموعة الموارد. ومع ذلك، لم تكن هناك أخطاء لحساب التخزين، لذلك تم توزيع المورد. تُظهر محفوظات التوزيع عملية توزيع فاشلة.

Screenshot of Azure resource group overview page showing a failed deployment with a red exclamation mark icon in the deployment history section.

لإصلاح خطأ التوزيع، غيّر الدالة المرجعية لاستخدام مورد صالح. لمزيد من المعلومات، راجع حل أخطاء عدم العثور على المورد. للتشغيل السريع، احذف الفاصلة التي تسبق vnetResult وكل vnetResult. احفظ الملف وأعد تشغيل التوزيع.

"vnetResult": {
  "type": "object",
  "value": "[reference(resourceId('Microsoft.Network/virtualNetworks', 'doesnotexist'), '2021-03-01', 'Full')]"
}

بعد إصلاح أخطاء التحقق من الصحة والاختبار المبدئي والتوزيع، يقوم القالب التالي بتوزيع حساب التخزين. تُظهر محفوظات التوزيع وسجل النشاط عملية توزيع ناجحة.

{
  "$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"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "prefixName": {
      "type": "string"
    }
  },
  "variables": {
    "storageAccountName": "[concat(parameters('prefixName'), uniquestring(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-04-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageAccountName": {
      "type": "string",
      "value": "[variables('storageAccountName')]"
    }
  }
}

تنظيف الموارد

عندما لا يكون هناك حاجة لموارد Azure، احذف مجموعة الموارد.

az group delete --name troubleshootRG

لحذف مجموعة الموارد من المدخل، اتبع الخطوات التالية:

  1. في مربع البحث أعلى Azure portal أدخل Resource group.
  2. ادخل اسم مجموعتك في حقلالتصفية حسب الاسم.
  3. حدد اسم مجموعة الموارد.
  4. حدد Delete resource group.
  5. لتأكيد الحذف، أدخل اسم مجموعة الموارد وحدد حذف.

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

في هذا التشغيل السريع، تعلمت كيفية استكشاف أخطاء توزيع قوالب ARM وإصلاحها.