لطلاب المستقبل في دورة "البنية التحتية كرمز في Ansible" وجميع المهتمين ، قمنا بإعداد ترجمة لمواد مفيدة.
ندعوك أيضًا للاشتراك في درس مفتوح حول موضوع "إدارة Kubernetes مع Kubespray" .
مرحبا بعودتك! هذه مقالة فنية أخرى في سلسلة مقالات terraform و kubernetes حول البنية التحتية كرمز من Contino.
TL ؛
حجم أمر DR لا يهم. في كلتا الحالتين ، لا يجب أن يكون تنفيذ تحليل جيد لتكوين البنية التحتية للتضاريس واختبار سلامة العقل من طرف إلى طرف عملية طويلة ومعقدة.
لقد واجهت تحديًا مثيرًا: استكشاف وتطوير وتقديم إطار عمل اختبار مفتوح المصدر مناسب لقاعدة كود terraform كجزء من خط أنابيب إطلاق البنية التحتية. إن مبدأ "مراقبة الجودة في كل شيء" بعيد كل البعد عن الجديد. لكن تنفيذها يعتمد على نضج البنية التحتية للمؤسسة والمستوى المقبول للمخاطر - حتى مرحلة الوصول [بأي شكل من الأشكال] إلى منتج نهائي.
أتاح لي إلقاء نظرة جديدة على مجال اختبار كود البنية التحتية التعرف على أحدث أطر عمل الاختبار وتحديث معرفتي.
من المسلم به ، في بداية رحلتي ، أنني عانيت من التحيز القائل بأن إعداد وتنفيذ "مراقبة الجودة على مستوى المؤسسة" يمكن أن يتطلب عمالة مكثفة.
بعد كل شيء ، تمتلك Hashicorp Terraform وظائف كافية خارج الصندوق للتحقق والتحقق من صحة قاعدة التعليمات البرمجية الخاصة بك.
- مراقبة جودة الكود -
terraform fmt -check
وterraform validate
. - معاينة -
terraform plan
. - المبنى -
TFLOG=debug terraform apply
للتحقق الدقيق.
أدوات تحليل كود ثابت Terraform
كشف بحث Google عن قائمة واسعة جدًا من أدوات اختبار التضاريس التي يحتمل أن تكون مفيدة.
لكن أولاً ، دعنا ننتقل إلى قائمة متطلباتنا.
- إجراء اختبارات وحدة في تكوين موارد التضاريس والقدرة على توسيع أي قائمة عامة من أفضل الممارسات * يتحقق من موفر سحابة معين. بالإضافة إلى ذلك ، نحن مهتمون بأدوات سهلة الاستخدام يمكنك البدء بها على الفور.
* عدم وجود مثيلات ec2 المعرضة لـ 0.0.0.0/0 للعالم - وهكذا.
- — «» , . , , , EKS.
- , , — , , . , , .
- , . , , Go Python. , , , , . , , . , .
أضواء كاشفة: تحليل ومقارنة أدوات ومنصات اختبار Terraform
ونأمل أن تجعل القائمة التالية عملك على تحليل البنية التحتية الثابتة كرمز ومراقبة الجودة أسهل. لاحظ أن هذه قائمة كاملة بجميع أدوات اختبار التضاريس ذات الصلة التي وجدتها ، وهي مزيج من اختبار صلاحية التكوين ومراقبة جودة الكود وأفضل الممارسات التي تركز على عمليات SecOps مع اختبارات الوحدة. يتم عرض هذه القائمة أدناه.
- tflint - github.com/terraform-linters
- terrafirma - github.com/wayfair/terrafirma
- tfsec - github.com/liamg/tfsec
- terrascan — github.com/cesar-rodriguez/terrascan ( TF 0.13)
- checkov — github.com/bridgecrewio/checkov
- conftest — github.com/instrumenta/conftest
دعونا نلخص. حاولت العثور على اختبار وحدة معياري لمكونات موارد terraform ومجموعة أكثر تخصيصًا من الاختبارات التي تأخذ تكوين الموارد للتحقق من النتائج
terraform plan
.
بعد النظر في مزايا وعيوب كل منصة ، اخترت أداة
checkov
ومنصة ذات اسم مناسب للغاية
terraform-compliance
- وكلاهما مكتوب بلغة بيثون. لقد استوفوا جميع متطلباتي الموضحة أعلاه.
تبدو البنية التحتية كخط أنابيب لإصدار الكود مثل هذا بشكل عام.
بعد الخوض في هذه المنصات بدقة ، قمت حتماً بمراجعة تجربتي الخاصة وتوصلت إلى الاستنتاجات التالية ذات الصلة بالموضوع قيد المناقشة:
- .
- , , , .
- , , , - « » « ».
— Checkov BridgeCrew
www.checkov.io
Checkov هي أداة تحليل كود ثابتة للبنية التحتية كرمز.
يقوم بمسح البنية التحتية السحابية المزودة بقوالب Terraform أو Cloudformation أو Kubernetes أو Serverless أو ARM ويحدد التكوينات الخاطئة للأمان والامتثال.
هناك العديد من اختبارات الوحدة الافتراضية التي يتم إجراؤها عند فحص مستودع كود التضاريس التي تُظهر الانحرافات عن أفضل الممارسات - على سبيل المثال ، عندما يكون لديك ، وفقًا لتكوين الأمان الخاص بك ، جهازًا ظاهريًا على المنفذ 22 معرضًا للعالم (0.0.0.0/0).
يمكن العثور على جميع الاختبارات على رابط GitHub هذا.
من السهل جدًا بدء استخدام النظام الأساسي.
- قم بتثبيت الملف الثنائي.
- تهيئة دليل terraform مع تهيئة terraform.
- قم بتشغيل chechov على هذا الدليل.
يمكن سرد جميع اختبارات الوحدة التي يتم تشغيلها افتراضيًا في سطر الأوامر. بالإضافة إلى ذلك ، عند تشغيل checkov ، سيعيد النظام الأساسي افتراضيًا جميع اختبارات الوحدة التي تم اجتيازها وفشلها. مريحة للغاية وسهلة الاستخدام. تم اختبار طرق Terraform المتقدمة ، ولكن ليس كلها. هذا اختلاف جوهري.
سيقيم Chechov لحسن الحظ شفرتك فقط
terraform
. يمكن للمنصة العمل بعد ذلك مباشرة
terraform init
. إنها لا تهتم بأمرك
terraform plan
- بكل المزايا والعيوب. تقوم المنصة بما هو مذكور ، أي "تحليل الكود الثابت". كن على دراية بالعواقب المحتملة ، بالإضافة إلى أي اعتبارات منطقية ، لمواردك.
checkov .
إذا كنت مستعدًا لإجراء تطوير عميق لـ Python ، فيمكنك كتابة اختبارات وحدة إضافية. كانت لغة تطوير النظام الأساسي أحد متطلباتي ، لأنه في بعض الأحيان يتعين علي تحليل قاعدة التعليمات البرمجية للاختبارات لتقدير مدى صعوبة إنشاء مثل هذه الأساليب الإضافية [إذا لزم الأمر]. أصبحت هذه اللحظة ، إلى جانب مشكلات الخدمة للمجموعة ككل ، العامل الرئيسي في اختيار هذه المنصة على منصة بديلة تتيح لك الحصول على نفس النتيجة.
للتلخيص ، تعتبر منصة checkov رائعة في مجال تحليل الكود الثابت. على وجه التحديد ، إذا كنت بحاجة إلى إدراج شبكة IP الفرعية المحددة في البداية في القائمة البيضاء. لكن هذا الخيار غير مناسب لاختبارات e2e التي تحتاج إلى منصة اختبار منفصلة.
من ناحية أخرى ، كحل ، يمكنني تكرار اختبار الوحدة والترميز الثابت لإعدادات الشبكة الفرعية / IP الخاصة بي. ثم ماذا لو كان لدي العديد من الأمثلة والمشاريع - تخطي هذا الاختبار ، حتى لو كنت بحاجة إليه؟ يمكن. أو ربما لا.
هذا هو المكان الذي تدخل فيه منصة الاختبار الثانية -
terraform-compliance
.
التوافق مع Terraform
terraform-compliance.com
التوافق مع Terraform هو إطار اختبار خفيف الوزن مصمم لعمليات تدقيق الأمان والامتثال في terraform لضمان اختبار البنية التحتية الخاصة بك بشكل سلبي مثل التعليمات البرمجية.
خلفية
مرة أخرى ، تم استخدام التطوير الشامل لاختبار السلوك (BDD) مؤخرًا كإطار اختبار ، مما يبرز الحاجة إلى إطار اختبار عالمي. لكن هذه ليست الفائدة الوحيدة. بساطة.
في الواقع ، يبدو لي أن BDD لا تحظى بالاهتمام الكافي. ربما تكون قد سمعت عن التطوير المستند إلى الاختبار (TDD) ، والذي يأخذ جذورًا عميقة ، في المقام الأول في بيئة تطوير البرامج. ولكن هذا هو المكان الذي تسهل فيه الأنظمة الأساسية مثل BDD إنشاء منطق إضافي ، مما يوفر لمشرف البنية التحتية المتوسط طريقة أبسط وموجزة وقابلة للتكرار لتطوير اختبارات مخصصة من البداية إلى النهاية دون معرفة متعمقة بأي لغة برمجة متخصصة وجديدة.
وعلى الرغم من أن الكود يمكن أن يصف ، في الواقع ، كل شيء في العالم ، فإن كل شيء يعتمد في النهاية على قابلية الإدارة والقدرة على فهم تعقيد الكود (الذي قد يتطلب إعداد وثائق مكثفة) ، ناهيك عن الدعم والصيانة. اقرأ المزيد عن BDD هنا. يعد
Cucumber.io أكثر من مجرد لغة ، إنه نظام يجعل الاختبار أسهل من خلال اتباع نهج WYSIWYG لاختبار التصميم والفهم والصيانة. يتم تحديد هذه الأمثلة قبل التطوير وتستخدم كمعايير قبول.
هم جزء من التعريف.
الاختبار مع Terraform-Compliance
تتم مراجعة كل منصة لمعرفة مزاياها ، مع دراسة متعمقة للمكان الذي يمكن فيه الاستفادة من ميزاتها وفروقها الدقيقة. بالنظر إلى المستقبل ، يمكنني القول أنه يمكن استخدام كلا النظامين الأساسيين.
فيما يلي مثال على هذا الاختبار الذي تم تطويره باستخدام منصة
terraform-compliance
BDD. يسمح لك بإجراء اختبار شامل معقد إلى حد ما. تستخدم
المنصة
terraform-compliance
الإخراج
terraform plan
... ونتيجة لذلك ، فإنه يسمح بتشكيل "خطط" إطلاق كاملة واختبارها بدقة. على سبيل المثال ، تحكم في استخدام زوج مفاتيح التشفير الصحيح [لموفر السحابة الخاص بك] للحساب ، والبيئة ، وما إلى ذلك. لديك الكثير من الحرية الإبداعية ، والأهم من ذلك ، أن النظام الأساسي سهل الاستخدام للغاية.
فقط تحقق من الخطوات والأمثلة أدناه.
- الخطوة 1. تهيئة دليل terraform: # terraform init
- الخطوة الثانية: يمكنك إنشاء خطة terraform سريعًا باستخدام الأمر التالي: #terraform plan -out = plan.out
- الخطوة 3. اكتب بعض الاختبارات. إنها مسألة بسيطة - يوجد بالفعل مجلد به أمثلة. دعنا نتصفح أمثلة الاختبار الخاصة بي أدناه ، المكتوبة بناءً على مخرجات خطة التضاريس الخاصة بي.
هذا مقتطف من خطة
terraform
تكوين التضاريس التي تنشئ EKS مع مجموعة التشغيل المحددة. دعونا نتأكد من أن الكود الخاص بنا
terraform
لا يستخدم البنية التحتية
instancetype
، ولكنه يستخدم "المعتمد"
a1.xlarge
أو
a1.2xlarge
.
الآن سوف أقوم بتغييره عن قصد
t2.small
لمحاكاة إخفاقات الاختبار.
لنكتب اختبارًا للتأكد من التحقق من صحة هذا المطلب بنجاح.
- الخطوة 4. لنجعل
terraform-compliance
اللوحات تقيّم باستخدام سيناريوهات الاختبار:#terraform-compliance -p plan.out -f ./<test-cases-folder>
اختبارات التشغيل
مثال تمرير وفشل النتيجة
إذا لدينا كود إطار Terraform يستخدم واحدة صحيحة
instancetype
، ثم كل النتائج ستكون النجاح الأخضر.
إذا كان كود البنية التحتية Terraform الخاص بنا ينتهك المتطلبات لأنه غير صحيح
instancetype
، فستكون النتائج باللون الأحمر FAIL.
دعنا نكتب المزيد من الاختبارات.
بعض الاختبارات البسيطة المأخوذة من دليل الأمثلة:
إذا فشل أحدها ، سيرى المستخدم "القيم_القيمة" ، والتي يتم استردادها وعرضها لأغراض المساعدة وتصحيح الأخطاء.
نتائج الإختبار
بعد تشغيل جميع الاختبارات ، يتم عرض ملخص مناسب لجميع الاختبارات التي تم النجاح فيها والفشل ، والذي يتضمن أيضًا الاختبارات الفائتة. يعجبني لأنه يسمح لي بكتابة قائمة طويلة من الاختبارات الصارمة ، فضلاً عن تقديم معلومات واضحة في نهاية الاختبارات التي فشلت ومتى. بالإضافة إلى ذلك ، إذا فشلت ، يمكن تخطي بعض الاختبارات بعلامة
@warning
، كما هو موضح في المثال أدناه.
habrastorage.org/getpro/habr/upload_files/c22/910/cb9/c22910cb95fb4ccc7555d44”b5436b
النتيجة
بدون شك ، كانت هذه فرصة رائعة لإلقاء نظرة جديدة على بعض أطر عمل التحقق والاختبار الفائقة المتاحة للتعليمات البرمجية كأطر عمل Terraform.
لقد استمتعت بالنظر إلى كلا النظامين الأساسيين وفوجئت بشكل خاص من سهولة تكامل checkov ، بالإضافة إلى
e2e terraform plan
خيارات التحقق من الصحة والاختبار المخصصة التي يوفرها
terraform-compliance
.
يذكرني هذا الأخير بسلوك السلوك ، وهو إطار عمل اختبار BDD e2e kubernetes رائع آخر عملت معه في الماضي.
تعمل أطر الاختبار المكتوبة بالكامل بلغة Python على تسهيل مشاركة معرفة Python عبر الأنظمة الأساسية وتقليل مقدار القوة العقلية اللازمة للحفاظ على الاختبارات وتطويرها في المستقبل.
إذا كنت بحاجة إلى التحقق من التكوين الخاص بك مقابل أفضل الممارسات عندما لا تحتاج إلى خطة التضاريس ، فقد يكون checkov هو الخيار المناسب لك. خلافًا لذلك ، قد تكون الإجابة عبارة عن نظام أساسي
terraform-compliance
به مجموعة أكثر ثراءً من ميزات التحقق من الصحة
terraform plan
. أفضل ما في الأمر هو أن كونك منصة BDD
terraform-compliance
سهلة التعلم.
يأتي اختبار الوحدة أولاً. سهل مثل الفطيرة. تتيح منصة Checkov من Bridgecrewio التحقق من الامتثال لأفضل الممارسات.
لا يوجد حقًا سبب وجيه لتخطي أي من اختبارات مراقبة الجودة هذه ، بغض النظر عن حجم مجموعتك. خاصة بالنظر إلى تكاليف العمالة الصغيرة التي يجب تطبيقها لتنفيذها (انظر الأمثلة في المقال).
PS Contino لديها عدد لا بأس به من المشاريع الرائعة. إذا كنت ترغب في العمل في مشاريع بنية تحتية حديثة جدًا أو تبحث عن مهام جادة - اتصل بنا! نحن نوظف موظفين ونبحث عن عقول مشرقة على جميع المستويات. في Contino ، نفخر بأنفسنا لتطوير مشاريع تحويل سحابة متطورة للشركات متوسطة الحجم والمؤسسات الكبيرة على حد سواء.
«Infrastructure as a code in Ansible».
« Kubernetes Kubespray».