تجميع الموارد ذات الصلة باستخدام الوحدات النمطية

مكتمل

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

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

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

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

إشعار

يتم عرض الأوامر في هذه الوحدة لتوضيح المفاهيم. لا تشغّل الأوامر الآن. ستتدرب على ما تتعلمه هنا قريبا.

الإخراجات

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

فيما يلي أمثلة على بعض السيناريوهات التي قد تحتاج فيها إلى الحصول على معلومات من عملية نشر القالب:

  • يمكنك إنشاء قالب Bicep الذي يقوم بتوزيع جهاز ظاهري، وتحتاج إلى الحصول على عنوان IP العام بحيث يمكنك استخدام بروتوكول النقل الآمن (SSH) في الجهاز.
  • يمكنك إنشاء قالب Bicep يقبل مجموعة من المعلمات، مثل اسم البيئة واسم التطبيق. يستخدم القالب تعبيرا لتسمية تطبيق Azure App Service الذي ينشره. تحتاج إلى إخراج اسم التطبيق الذي نشره القالب حتى تتمكن من استخدامه داخل مسار التوزيع لنشر ثنائيات التطبيق.

يمكنك استخدام المخرجات لهذه السيناريوهات. لتعريف أحد المخرجات في قالب Bicep، استخدم الكلمة الأساسية output مثل:

output appServiceAppName string = appServiceAppName

يتضمن تعريف الإخراج بعض الأجزاء الرئيسية:

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

تلميح

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

إليك مثالاً آخر على الإخراج. سيتم تعيين القيمة لهذا المثال إلى اسم المجال المؤهل بالكامل (FQDN) لمورد عنوان IP عام.

output ipFqdn string = publicIPAddress.properties.dnsSettings.fqdn

تلميح

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

تنبيه

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

تعريف الوحدة النمطية

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

تخيّل أن لديك قالب Bicep الذي يقوم بتوزيع التطبيق، وقاعدة البيانات، وموارد الشبكات لـ الحل أ. يمكنك تقسيم هذا القالب إلى ثلاث وحدات، إذ يركز كل منها على مجموعة الموارد الخاصة بها. كمكافأة، يمكنك الآن إعادة استخدام الوحدات النمطية في قوالب أخرى لحلول أخرى أيضا؛ لذلك عند تطوير قالب للحل B، والذي يحتوي على متطلبات شبكة مشابهة للحل A، يمكنك إعادة استخدام وحدة الشبكة.

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

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

module myModule 'modules/mymodule.bicep' = {
  name: 'MyModule'
  params: {
    location: location
  }
}

دعونا نتعرف أكثر على بعض الأجزاء الرئيسية من تعريف هذه الوحدة النمطية:

  • تقوم الكلمة الأساسية module بإخبار Bicep بأنك على وشك استخدام ملف Bicep آخر كوحدة.
  • تماما مثل الموارد، تحتاج الوحدات النمطية إلى اسم رمزي مثل myModule. يمكنك استخدام الاسم الرمزي عند الإشارة إلى مخرجات الوحدة في أجزاء أخرى من القالب.
  • modules/mymodule.bicep هو المسار إلى ملف الوحدة النمطية، المتعلق بملف القالب. تذكر أن ملف الوحدة النمطية هو مجرد ملف Bicep عادي.
  • تماما مثل الموارد، الخاصية name إلزامية. يستخدم Azure اسم الوحدة النمطية لأنه ينشئ توزيعا منفصلا لكل وحدة داخل ملف القالب. تحتوي عمليات التوزيع هذه على أسماء يمكنك استخدامها للتعرف عليها.
  • يمكنك تحديد أي معلمات للوحدة النمطية باستخدام الكلمة الأساسية params. عند تعيين قيم كل معلمة داخل القالب، يمكنك استخدام التعبيرات، ومعلمات القالب، والمتغيرات، وخصائص الموارد التي يتم نشرها داخل القالب، والمخرجات من الوحدات النمطية الأخرى. سوف يفهم Bicep تلقائياً التبعيات بين الموارد.

الوحدات والمخرجات

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

تصميم الوحدات النمطية الخاصة بك

تتبع وحدة Bicep الجيدة بعض المبادئ الرئيسية:

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

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

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

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

  • يجب ألا تقوم الوحدة النمطية إخراج البيانات السرية. تمامًا مثل القوالب، لا تقوم بإنشاء مخرجات الوحدة للقيم السرية، مثل سلاسل الاتصال أو المفاتيح.