توصيات لاستخدام البنية الأساسية كتعلم برمجي

ينطبق على توصية قائمة التحقق من التميز التشغيلي في Azure Well-Architected Framework:

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

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

التعريفات

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

استراتيجيات التصميم الرئيسية

كما تمت مناقشته في سلسلة التوريدوإرشادات توحيد الأدوات والعمليات ، يجب أن يكون لديك نهج صارم لنشر تغييرات البنية الأساسية (بما في ذلك تغييرات التكوين) فقط من خلال التعليمات البرمجية. يجب عليك توزيع IaC من خلال البنية الأساسية لبرنامج ربط العمليات التجارية للتكامل المستمر والتسليم المستمر (CI/CD). يفرض اعتماد هذه النهج الاتساق في العمليات لجميع عمليات توزيع IaC، ويقلل من مخاطر انحراف التكوين عبر بيئاتك، ويضمن تناسق البنية الأساسية عبر بيئاتك. بالإضافة إلى ذلك، يجب عليك توحيد أدوات وعمليات تطوير ونشر IaC في دليل النمط. تتضمن توصيات دليل الأنماط ما يلي:

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

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

ملاحظة

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

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

وبالمثل، قد يتطلب تطبيق تكوين الحالة المطلوب (DSC) على أنواع البنية الأساسية المختلفة أدوات مختلفة. على سبيل المثال، هناك أدوات محددة مثل Ansible لإدارة DSC للأجهزة الظاهرية، بينما Flux هو أداة جيدة لإدارة DSC على مجموعات Kubernetes. قد توفر خدمات النظام الأساسي كخدمة (PaaS) أدوات مختلفة لإدارة التكوين (مثل تكوين تطبيق Azure) التي يمكن معالجتها من خلال IaC. قد تكون خدمات البرامج كخدمة (SaaS) أكثر تقييدا لأنها تخضع لرقابة أكثر إحكاما من قبل النظام الأساسي.

فكر في جميع المهام وأنواع البنية الأساسية الموجودة في نطاق ممارسات IaC الخاصة بك وتوحيد الأدوات التي تقوم بالوظائف التي تحتاج إليها للقيام بها ويمكن دمجها في ممارسات التطوير والإدارة الخاصة بك.

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

ملاحظة

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

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

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

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

إستراتيجيات IaC الأخرى

ضع في اعتبارك التوصيات التالية التي تنطبق على استخدام IaC لحمل العمل الخاص بك:

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

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

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

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

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

اختبار الأنشطة الروتينية وغير الروتينية. اختبار عمليات التوزيع وتحديثات التكوين وعمليات الاسترداد، بما في ذلك عمليات التراجع عن التوزيع.

البنية الأساسية القابلة للتغيير مقابل غير القابلة للتغيير

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

الاعتبارات

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

زيادة جهود الصيانة: مطلوب صيانة قاعدة التعليمات البرمجية والأدوات للحفاظ على تنفيذ IaC الحالي والآمن. تعقب دينك التقني بشكل صحيح وتعزيز ثقافة حيث يتم مكافأة تخفيض الديون.

زيادة الوقت لتغييرات التكوين: لا يتطلب نشر البنية الأساسية باستخدام إرشادات سطر الأوامر أو مباشرة من مدخل ما وقت ترميز و/أو اختبار البيانات الاصطناعية. تقليل وقت النشر باتباع الممارسات الموصى بها مثل مراجعات التعليمات البرمجية وممارسات ضمان الجودة.

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

تسهيل Azure

قوالب Azure Resource Manager (قوالب ARM)وBicep هي أدوات أصلية في Azure لنشر البنية الأساسية باستخدام بناء الجملة التعريفي. تتم كتابة قوالب ARM بلغة JSON، في حين أن Bicep هي لغة خاصة بالمجال. يمكن دمج كليهما بسهولة في مسارات Azure أو مسارات GitHub Actions CI/CD.

Terraform هي أداة IaC تعريفية أخرى مدعومة بالكامل في Azure. يمكن استخدامه لتوزيع البنية الأساسية وإدارتها، ويمكن دمجها في البنية الأساسية لبرنامج ربط العمليات التجارية CI/CD.

يمكنك استخدام Microsoft Defender للسحابة لاكتشاف التكوينات الخاطئة في IaC.

مثال

راجع بنية مسرع منطقة Azure Virtual Desktop المنتقل إليهاوالتنفيذ المرجعي المرتبط للحصول على مثال لتنفيذ سطح المكتب الظاهري الذي يمكن توزيعه عبر ملفات Resource Manager أو Bicep أو Terraform المتوفرة.

قائمة التحقق من التميز التشغيلي

راجع المجموعة الكاملة من التوصيات.