إنشاء وحدات Bicep واستخدامها

مكتمل

الوحدات عبارة عن ملفات Bicep مستقلة. وهي عادةً ما تحتوي على مجموعات من الموارد التي تُوزَّع معاً. يمكن استهلاك الوحدات من أي قالب Bicep آخر.

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

ميزات الوحدات

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

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

تساعدك وحدات Bicep على مواجهة هذه التحديات عن طريق تقسيم تعليماتك البرمجية إلى ملفات أصغر وأكثر قابليةً للإدارة يمكن الرجوع إليها من قوالب متعددة. تمنحك الوحدات بعض الميزات الرئيسية.

قابلية إعادة الاستخدام

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

Diagram that shows a template referencing three modules: application, database, and networking. The networking module is then reused in another template.

يمكنك أيضاً مشاركة الوحدات داخل فريقك أو داخل مؤسستك أو مع مجتمع Azure. ستتعرف على المزيد عن مشاركة وحدات Bicep في وحدة Microsoft Learn المستقبلية.

التغليف

تساعدك الوحدات على الاحتفاظ بتعريفات الموارد ذات الصلة معاً. على سبيل المثال، عندما تعرِّف تطبيق Azure Functions، فإنك عادةً ما توزع التطبيق وخطة استضافة للتطبيق وحساب تخزين لبيانات تعريف التطبيق. يتم تعريف هذه المكونات الثلاثة على نحوٍ منفصلٍ، ولكنها تمثل مجموعة منطقية من الموارد، لذلك قد يكون من المنطقي تعريفها كوحدة.

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

قابلية التكوين

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

Diagram that shows a template referencing two modules and passing the output from one to the parameter of another.

تلميح

من المفيد التفكير في وحدات Bicep باعتبارها كتل بناء يمكن دمجها بطرقٍ مختلفةٍ لدعم عمليات التوزيع خاصتك.

الدالات

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

إنشاء وحدة نمطية

الوحدة هي ملف Bicep عادي. يمكنك إنشاؤه تماماً كما تفعل مع أي ملف Bicep آخر.

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

تقسيم قالب Bicep الموجود إلى وحدات

قد تبني قالب Bicep كبير ثم تقرر أنه يجب تقسيمه إلى وحدات. أحياناً يكون من الواضح كيف يجب تقسيم ملف Bicep كبير. قد يكون لديك مجموعة من الموارد التي تنتمي بوضوح معاً في إحدى الوحدات. في أحيان أخرى، لا يكون من السهل تحديد الموارد التي يجب تجميعها في إحدى الوحدات.

يمكن أن يساعدك مصور Bicep المرئي في وضع ملف Bicep بأكمله في إطاره الصحيح. يجري تضمين المصور المرئي في ملحق Bicep لتعليمة Visual Studio البرمجية.

لعرض المصور المرئي، افتح Visual Studio Code Explorer، وحدد مع الاستمرار (أو انقر بزر الماوس الأيمن) ملف Bicep، ثم حدد Open Bicep Visualizer. يُظهر المصور المرئي تمثيلاً رسومياً للموارد في ملف Bicep خاصتك. يتضمن خطوطاً بين الموارد لإظهار التبعيات التي يكتشفها Bicep.

يمكنك استخدام المصور المرئي لمساعدتك على تقسيم ملفاتك. ضع في اعتبارك ما إذا كان التصوير المرئي يوضح أي نظم مجموعات من الموارد. قد يكون من المنطقي نقل نُظم المجموعات هذه إلى إحدى الوحدات معاً.

على سبيل المثال، خذ بعين الاعتبار التصوير المرئي التالية لملف Bicep. تُحدد مجموعتان متميزتان من الموارد. قد يكون من المنطقي تجميعهما في قاعدة بيانات منفصلة ووحدات الشبكات.

وحدات التضمين

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

تلميح

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

بالنسبة لعمليات التوزيع المعقدة، يكون من المنطقي في بعض الأحيان استخدام المسارات لتوزيع قوالب متعددة بدلاً من إنشاء قالب واحد يفعل كل شيء باستخدام التضمين. ستتعرف على المزيد عن مسارات التوزيع في وحدة Microsoft Learn المستقبلية.

اختيار أسماء ملفات جيدة

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

استخدام الوحدة في قالب Bicep

يمكنك استخدام وحدة في قالب Bicep باستخدام الكلمة الأساسية module مثل هذا:

module appModule 'modules/app.bicep' = {
  name: 'myApp'
  params: {
    location: location
    appServiceAppName: appServiceAppName
    environmentType: environmentType
  }
}

يتضمن تعريف الوحدة المكونات التالية:

  • الكلمة الأساسية module.
  • اسم رمزي، مثل appModule. يُستخدم هذا الاسم داخل ملف Bicep عندما تريد الرجوع إلى الوحدة. لا يظهر الاسم الرمزي أبداً في Azure.
  • مسار الوحدة النمطية، مثل modules/app.bicep. هذا هو المسار إلى ملف Bicep على نظام ملفاتك المحلي. في وحدة Microsoft Learn المستقبلية، ستتعرف على كيفية مشاركة الوحدات باستخدام مواصفات السجلات والقوالب، التي لها تنسيقات مسار وحدتها.

    تلميح

    يمكنك أيضاً استخدام قالب JSON Azure Resource Manager (قالب ARM) باعتباره وحدة. يمكن أن تكون هذه القدرة مفيدة إذا كان لديك مجموعة من القوالب التي لم تُرَّحل بعد إلى Bicep.

  • الخاصية name التي تحدد اسم التوزيع. ستتعرف على المزيد عن عمليات التوزيع في القسم التالي.
  • الخاصية params حيث يمكنك تحديد قيم للمعلمات التي تتوقعها الوحدة. ستتعرف على المزيد عن معلمات الوحدة في الوحدة التالية.

كيفية عمل الوحدات

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

عمليات النشر

في Azure، يُعد التوزيع هو مورد خاص يمثل عملية التوزيع. عمليات التوزيع هي موارد Azure التي تحتوي على نوع المورد Microsoft.Resources/deployments. عندما ترسل توزيع Bicep، تباشر بإنشاء أو تحديث مورد التوزيع. وبالمثل، عندما تنشئ موارد في مدخل Azure، ينشئ المدخل مورد توزيع نيابةً عنك.

ومع ذلك، لا تُنشئ جميع التغييرات التي أُجريت على موارد Azure عمليات التوزيع أو تستخدمها. على سبيل المثال، عند استخدام مدخل Azure لتعديل مورد موجود، فإنه لا يُنشئ عموماً عملية توزيع لإجراء التغيير. عندما تستخدم أدوات خارجية مثل Terraform لتوزيع مواردك أو تكوينها، قد لا تُنشئ عمليات توزيع.

عندما توزع ملف Bicep باستخدام Azure CLI أو Azure PowerShell، يمكنك تحديد اسم التوزيع اختيارياً. إذا لم تحدد اسماً، ينشئ Azure CLI أو Azure PowerShell تلقائيا اسم توزيع لك من اسم ملف القالب. على سبيل المثال، إذا وزعت ملف اسمه main.bicep، يكون اسم التوزيع الافتراضي هو main.

عندما تستخدم الوحدات، تنشئ Bicep توزيع منفصل لكل وحدة. خاصية name التي تحددها للوحدة تصبح اسم التوزيع. عندما توزع ملف Bicep الذي يحتوي على وحدة، يجري إنشاء موارد توزيع متعددة: واحد للقالب الأصل وواحد لكل وحدة.

على سبيل المثال، افترض أنك تنشئ ملف Bicep يُسمى main.bicep. وهو يعرف وحدة تُسمى myApp. عندما توزع الملف main.bicep يجري إنشاء عمليتا توزيع. الأولى تُسمى mainوتنشئ توزيعاً آخر يُسمى myApp الذي يحتوي على موارد تطبيقك.

Diagram that shows two Bicep files, each of which has a separate deployment name.

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

قوالب JSON ARM التي جرى إنشاؤها

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

في المثال الذي نُوقِش في القسم السابق، تنشئ Bicep ملف JSON واحد على الرغم من وجود ملفي Bicep في الأصل.

Diagram that shows two Bicep files, which are transpiled into a single JSON file.