حل الأخطاء للموارد الأصل

توضح هذه المقالة خطأ ParentResourceNotFound الذي قد يحدث عند نشر مورد يعتمد على مورد أصل. يحدث الخطأ عند نشر الموارد باستخدام ملف Bicep ونموذج Azure Resource Manager (نموذج ARM).

عَرَض

عند نشر مورد تابع لمورد آخر، قد تتلقى الخطأ التالي:

Code=ParentResourceNotFound,
Message=Can not perform requested operation on nested resource. Parent resource 'exampleserver' not found."

السبب

عندما يكون مورد واحد تابعًا لمورد آخر، يجب أن يتواجد المورد الأصل قبل إنشاء المورد التابع. يعرف اسم المورد التابع الاتصال مع المورد الأصل. اسم المورد التابع بالتنسيق <parent-resource-name>/<child-resource-name>. على سبيل المثال، قد يتم تعريف قاعدة بيانات SQL على النحو:

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  name: '${sqlServerName}/${databaseName}'
  ...
}

للمزيد من المعلومات حول موارد Bicep الأصل والتابعة، راجع تعيين اسم ونوع الموارد التابعة في Bicep.

إذا قمت بنشر الخادم وقاعدة البيانات في القالب نفسه، ولكن لم تحدّد التبعية على الخادم، قد يبدأ نشر قاعدة البيانات قبل نشر الخادم. يؤدي ذلك إلى فشل نشر قاعدة البيانات بظهور خطأ ParentResourceNotFound.

إذا كان المورد الأصل موجودًا بالفعل ولم يتم نشره في القالب نفسه، ستحصل على خطأ ParentResourceNotFound عندما لا يمكن لإدارة الموارد إقران المورد التابع مع الأصل. قد يحدث هذا الخطأ عندما لا يكون المورد التابع بالتنسيق الصحيح. أو إذا تم نشر المورد التابع إلى مجموعة موارد مختلفة عن مجموعة الموارد للمورد الأصل.

الحل 1: نشر في القالب نفسه

لحل هذا الخطأ عند نشر الموارد الأصل والتابعة في القالب نفسه، استخدم تبعية.

يستخدم هذا المثال مورد تابع متداخل ضمن المورد الأصل وإنشاء التبعية. يحصل التابع على نوع المورد وإصدار API من المورد الأصل.

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' = {
  name: sqlServerName
  properties: {
    ...
  }
  resource sqlDatabase 'databases' = {
    name: databaseName
    ...
  }
}

لمزيد من المعلومات حول التبعيات، راجع إعلان المورد في Bicep.

الحل 2: نشر في قوالب مختلفة

لحل هذا الخطأ عند نشر المورد الأصل مسبقًا في قالب مختلف، لا تقم بتعيين تبعية. بدلًا من ذلك، انشر التابع إلى نفس مجموعة الموارد ووفر اسم المورد الأصل.

يستخدم هذا المثال الكلمة الأساسية الموجودة للإشارة إلى أصل تم نشره في ملف منفصل. يستخدم المورد التابع عنصر parent واسم المورد الأصل الرمزي.

param location string = resourceGroup().location
param sqlServerName string
param databaseName string

resource sqlServer 'Microsoft.Sql/servers@2022-02-01-preview' existing = {
  name: sqlServerName
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2022-02-01-preview' = {
  parent: sqlServer
  name: databaseName
  location: location
}