تبعيات الموارد في Bicep

عند توزيع الموارد، قد تحتاج إلى التأكد من توزيع بعض الموارد قبل الموارد الأخرى. على سبيل المثال، أنت بحاجة إلى خادم SQL منطقي قبل توزيع قاعدة بيانات. يمكنك إنشاء هذه العلاقة عن طريق وضع علامة على أحد الموارد باعتباره معتمداً على المورد الآخر. يمكن تحديد طلب توزيع الموارد بطريقتين: التبعية الضمنية ووالتبعية الصريحة

يقوم Azure Resource Manager بتقييم التبعيات بين الموارد وتوزيعها بترتيبها التابع. عندما لا تكون الموارد تابعة لأحدها الآخر، يقوم Resource Manager بنشرها بالتوازي. تحتاج فقط إلى تحديد تبعيات الموارد التي يتم توزيعها في نفس الملف Bicep.

التبعية الضمنية

يتم إنشاء تبعية ضمنية عندما يشير إعلان مورد إلى مورد آخر في نفس عملية التوزيع. في المثال التالي، يحصل otherResource على خاصية من exampleDnsZone. يعتمد المورد المسمى otherResource ضمنيًا على exampleDnsZone.

resource exampleDnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'myZone'
  location: 'global'
}

resource otherResource 'Microsoft.Example/examples@2023-05-01' = {
  name: 'exampleResource'
  properties: {
    // get read-only DNS zone property
    nameServers: exampleDnsZone.properties.nameServers
  }
}

تخضع الموارد المتداخلة أيضًا لتبعية ضمنية على المورد الذي يحتويها.

resource myParent 'My.Rp/parentType@2023-05-01' = {
  name: 'myParent'
  location: 'West US'

  // implicit dependency on 'myParent'
  resource myChild 'childType' = {
    name: 'myChild'
  }
}

المورد الذي يتضمن الخاصية الأصل له تبعية ضمنية على المورد الأصل. يعتمد على المورد الأصل، وليس أي من موارده التابعة الأخرى.

يوضح المثال التالي حساب تخزين وخدمة ملفات. تحتوي خدمة الملفات على تبعية ضمنية على حساب التخزين.

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
  name: 'examplestorage'
  location: resourceGroup().location
  kind: 'StorageV2'
  sku: {
    name: 'Standard_LRS'
  }
}

resource service 'Microsoft.Storage/storageAccounts/fileServices@2022-09-01' = {
  name: 'default'
  parent: storage
}

في حالة وجود تبعية ضمنية،تجنب إضافة تبعية صريحة

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

التبعية الصريحة

تُعلن التبعية الصريحة مع خاصية dependsOn. تقبل هذه الخاصية صفيف معرفات الموارد، بحيث يمكنك تحديد أكثر من تبعية. يمكنك تحديد تبعية مورد متداخلة باستخدام :: عامل التشغيل .

يعرض المثال التالي منطقة نظام أسماء النطاقات المعروفة باسمotherZone والتي تعتمد على منطقة نظام أسماء النطاقات المسماة dnsZone

resource dnsZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'demoeZone1'
  location: 'global'
}

resource otherZone 'Microsoft.Network/dnszones@2018-05-01' = {
  name: 'demoZone2'
  location: 'global'
  dependsOn: [
    dnsZone
  ]
}

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

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

عناصر التحكم في التبعيات

توفر التعليمات البرمجية في Visual Studio أداة عنصر التحكم في التبعيات. افتح ملف Bicep في Visual Studio Code، ثم حدد زر المصور المرئي في الزاوية اليمنى العلوية. تُظهر لقطة الشاشة التالية تبعيات الجهاز الافتراضي.

لقطة شاشة لمصور موارد Visual Studio Code Bicep

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

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