التشغيل السريع: استكشاف أخطاء عمليات توزيع 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: إلى وجود خطأ. لمشاهدة خطأ التحقق من الصحة، مرر الماوس فوق الخطأ.

لقطة شاشة ل Visual Studio Code تبرز خطأ التحقق من صحة القالب باستخدام خط مموج أحمر ضمن

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

لقطة شاشة ل Visual Studio Code تعرض علامة التبويب المشاكل التي تسرد أخطاء مرجع المعلمات غير المعرفة لمقاطع

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

"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 حرفاً أو أقل وتحتوي على أحرف صغيرة أو أرقام فقط.

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

لقطة شاشة لصفحة نظرة عامة على مجموعة موارد Azure تعرض قسم محفوظات نشر فارغ بسبب خطأ الاختبار المبدئي.

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

لقطة شاشة لسجل نشاط مجموعة موارد Azure تعرض إدخال خطأ الاختبار المبدئي مع أيقونة علامة تعجب حمراء.

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

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

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

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

لقطة شاشة لصفحة نظرة عامة على مجموعة موارد Azure تعرض عملية توزيع فاشلة مع أيقونة علامة تعجب حمراء في قسم محفوظات التوزيع.

لإصلاح خطأ التوزيع، غيّر الدالة المرجعية لاستخدام مورد صالح. لمزيد من المعلومات، راجع حل أخطاء عدم العثور على المورد. للتشغيل السريع، احذف الفاصلة التي تسبق 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 وإصلاحها.