عندما لا يعود تشغيل Terraform من حاسوبك المحمول كافياً
لقد كنت تدير البنية التحتية باستخدام Terraform من خلال الطرفية. يعمل هذا بشكل جيد عندما تكون الشخص الوحيد الذي يُجري التغييرات. تقوم بتشغيل terraform plan، وتفحص المخرجات، ثم تشغيل terraform apply، وتنتقل إلى ما يلي. ملف الحالة موجود على جهازك، وأنت تعرف بالضبط ما غيّرته ومتى.
ثم ينضم زميل إلى المشروع. يستنسخ المستودع، ويشغّل terraform init، ويحصل على خطة مختلفة عما رأيته بالأمس. ملف الحالة على حاسوبه المحمول قديم. يقوم شخص ما بتطبيق تغيير دون إبلاغ أي شخص. بعد أسبوع، لا يتذكر أحد من عدّل قواعد مجموعة الأمان أو لماذا.
هذه هي اللحظة التي ينهار فيها سير العمل القائم على الحاسوب المحمول. المشاكل ليست في Terraform نفسه. إنها تتعلق بالتنسيق والرؤية والمساءلة. عندما تكون البنية التحتية مشتركة، فإن تشغيل الأوامر من أجهزة فردية يُحدث ارتباكاً ومخاطر وانحرافاً صامتاً.
نقل سير العمل إلى خط أنابيب
بدلاً من تشغيل terraform plan و terraform apply من حاسوب كل شخص، يمكنك نقل سير العمل هذا إلى خط أنابيب CI/CD. عندها، يمر كل تغيير في البنية التحتية عبر نفس المسار، ويتم تسجيله، ويمكن مراجعته من قبل الفريق قبل أن يصبح ساري المفعول.
يحوّل نهج خط الأنابيب تغييرات البنية التحتية إلى شيء مشابه لتغييرات كود التطبيق. تكتب التكوين، وتفتح طلب سحب، وتحصل على ملاحظات، وفقط بعد الموافقة يتم تطبيق التغيير. الفرق هو أن Terraform يُضيف خطوة تخطيط تُظهر بالضبط ما سيحدث لمواردك السحابية قبل تشغيل أي شيء.
المثال التالي يُظهر تكوين خط أنابيب CI عام يُنفذ سير عمل الكتابة-التخطيط-التطبيق:
stages:
- validate
- plan
- apply
validate:
stage: validate
script:
- terraform fmt -check
- terraform validate
only:
- merge_requests
plan:
stage: plan
script:
- terraform plan -out=plan.tfplan
artifacts:
paths:
- plan.tfplan
only:
- merge_requests
apply:
stage: apply
script:
- terraform apply plan.tfplan
when: manual
only:
- main
المراحل الثلاث: كتابة، تخطيط، تطبيق
الطريقة الأكثر شيوعاً لدمج Terraform في خط أنابيب هي تقسيم سير العمل إلى ثلاث مراحل تتطابق مع التدفق الطبيعي لإجراء تغيير.
مخطط التسلسل التالي يُوضح كيف تتفاعل المراحل الثلاث:
الكتابة: اكتشاف المشاكل قبل المراجعة
تبدأ مرحلة الكتابة عندما يقوم شخص ما بتعديل ملفات تكوين Terraform وفتح طلب سحب. في هذه المرحلة، يمكن لخط الأنابيب تشغيل فحوصات أساسية تلقائياً. يتحقق terraform fmt من أن الكود يتبع التنسيق القياسي. يتحقق terraform validate من أن التكوين صحيح نحوياً وأن جميع الوسائط المطلوبة موجودة.
هذه الفحوصات هي المكافئ للبنية التحتية لتشغيل مدقق نحوي على كود التطبيق. إنها تلتقط الأخطاء البسيطة مبكراً، قبل أن يقضي المراجع البشري وقتاً في النظر إلى طلب السحب. إذا كان التنسيق خاطئاً أو كان حقل مطلوب مفقوداً، يفشل خط الأنابيب فوراً، ويقوم المؤلف بإصلاحه قبل أن يشارك أي شخص آخر.
التخطيط: إظهار ما سيتغير
بعد فتح طلب السحب، يقوم خط الأنابيب بتشغيل terraform plan تلقائياً. يتم بعد ذلك نشر مخرجات الخطة كتعليق على طلب السحب. هنا تصبح المراجعة ذات معنى.
يُظهر مخرج الخطة بالضبط ما سيفعله Terraform: أي الموارد سيتم إنشاؤها، وأيها سيتم تعديلها، وأيها سيتم تدميرها. يمكن للمراجع أن يرى أن طلب السحب يغير نوع مثيل الخادم من صغير إلى متوسط، أو يُضيف قاعدة جدار حماية جديدة، أو يحذف مجموعة شبكة فرعية قديمة لقاعدة البيانات. إذا بدا شيء ما خاطئاً، يرفض المراجع طلب السحب قبل أن يصل أي تغيير إلى الإنتاج.
هذه المرحلة حاسمة لأنها تنقل مراجعة البنية التحتية من "ثق بي، لقد شغّلت الخطة" إلى "ها هي الخطة، تحقق منها بنفسك." تصبح الخطة جزءاً من محادثة طلب السحب، ويستند قرار الموافقة أو الرفض إلى مخرجات ملموسة، وليس على الإيمان.
التطبيق: التنفيذ فقط بعد الموافقة
تعمل مرحلة التطبيق فقط بعد الموافقة على طلب السحب ودمجه في الفرع الرئيسي. يقوم خط الأنابيب على الفرع الرئيسي بعد ذلك بتنفيذ terraform apply باستخدام الخطة التي تمت مراجعتها بالفعل.
الطريقة الأكثر أماناً للقيام بذلك هي حفظ مخرج الخطة من المرحلة السابقة كملف وتمرير هذا الملف إلى terraform apply. تُسمى هذه التقنية بالخطة المحفوظة. إنها تضمن أن التطبيق يُنفذ نفس التغييرات التي تمت مراجعتها بالضبط، وليس خطة جديدة قد تختلف لأن شخصاً ما دفع commit آخر بين المراجعة والتطبيق.
بدون خطة محفوظة، كان خط الأنابيب سيشغّل terraform plan مرة أخرى أثناء مرحلة التطبيق. إذا تغير التكوين في هذه الأثناء، قد تكون الخطة الجديدة مختلفة عما تمت مراجعته. هذا يُفقد الغرض من وجود مراجعة في المقام الأول.
إدارة الحالة في خط أنابيب
تصبح إدارة الحالة مباشرة عندما يعمل Terraform في خط أنابيب. يجب تخزين ملف الحالة في موقع مشترك، مثل مخزن تخزين سحابي أو خلفية Terraform يقوم الفريق بتكوينها مرة واحدة. في كل مرة يشغّل فيها خط الأنابيب التخطيط أو التطبيق، فإنه يجلب الحالة من ذلك الموقع المشترك، وليس من نسخة محلية قد تكون قديمة.
يجب على خط الأنابيب أيضاً تمكين قفل الحالة. يمكن لـ Terraform قفل ملف الحالة أثناء تشغيل التخطيط أو التطبيق، مما يمنع عمليتين من تعديل الحالة في نفس الوقت. بدون قفل، يمكن لخطي أنابيب تشغيل التطبيق في وقت واحد، مما يسبب تلفاً أو نتائج غير متوقعة.
ما يمنحك إياه سير العمل هذا
بمجرد أن يعمل سير عمل الكتابة-التخطيط-التطبيق في خط أنابيب، تتبع تغييرات البنية التحتية نفس الانضباط مثل تغييرات كود التطبيق. كل تغيير يمر عبر طلب سحب، ويتم مراجعته من قبل أعضاء الفريق، ويتم اختباره بخطة آلية، ويتم تشغيله فقط بعد الموافقة. يتم تسجيل التاريخ الكامل للتغييرات في Git وسجلات خط الأنابيب.
لم تعد تتساءل من غيّر خادماً أو متى حدث ذلك. لم تعد تقلق بشأن ملفات الحالة القديمة على حاسوب شخص ما. لم تعد تسمع "كان يعمل على جهازي" فيما يتعلق بالبنية التحتية.
قائمة تحقق عملية للإعداد
- قم بتكوين خلفية بعيدة لتخزين الحالة قبل إعداد خط الأنابيب. يجب أن تكون الخلفية قابلة للوصول من مشغل خط الأنابيب.
- قم بإعداد قفل الحالة. معظم الخلفيات مثل S3 مع DynamoDB أو GCS مع التحكم في الإصدار تدعم هذا أصلاً.
- أضف
terraform fmtوterraform validateكفحوصات مبكرة في خط أنابيب طلب السحب. - قم بتشغيل
terraform planعلى كل طلب سحب وانشر المخرجات كتعليق. - استخدم الخطط المحفوظة. قم بتخزين ملف الخطة كأثر لخط الأنابيب ومرره إلى مرحلة التطبيق.
- قصر
terraform applyعلى التشغيل فقط على الفرع الرئيسي بعد الدمج. - تأكد من أن مشغل خط الأنابيب لديه الحد الأدنى من الأذونات المطلوبة لتنفيذ التخطيط والتطبيق. لا تستخدم بيانات اعتماد المسؤول.
ما التالي
بعد أن يتولى خط الأنابيب سير عمل الكتابة-التخطيط-التطبيق تلقائياً، السؤال التالي هو كيفية إدارة البيئات المختلفة. نادراً ما تستخدم بيئتا التدريج والإنتاج نفس قيم التكوين. يحتاج خط الأنابيب إلى التعامل مع المتغيرات الخاصة بالبيئة، وملفات الحالة، وبوابات الموافقة دون تكرار سير العمل بأكمله لكل بيئة.
لكن هذه مشكلة لوقت لاحق. الآن، الخطوة المهمة هي التوقف عن تشغيل Terraform من أجهزة الكمبيوتر المحمولة والبدء في معاملة تغييرات البنية التحتية مثل تغييرات الكود. يمنحك خط الأنابيب مصدراً واحداً للحقيقة حول ما تغير، ومن وافق عليه، ومتى تم تطبيقه. هذا وحده يزيل معظم الارتباك الذي يأتي مع البنية التحتية المشتركة.