Terraform: البنية التحتية كرمز فعلي
ClickOps أمر خطير. CloudFormation مطول. Terraform هو المعيار الصناعي لتحديد البنية الأساسية القابلة للتكرار والتي يتم التحكم في إصدارها.
لماذا تتحدث Maison Code عن هذا
في Maison Code Paris، نعمل كضمير معمari لعملائنا. غالبًا ما نرث حزمًا “حديثة” تم بناؤها دون فهم أساسي للحجم.
نناقش هذا الموضوع لأنه يمثل نقطة تحول حاسمة في النضج الهندسي. التنفيذ الصحيح يميز MVP الهش عن منصة مؤسسية مرنة يمكنها التعامل مع حركة مرور الجمعة السوداء.
خادم “Snowflake” وكارثة ClickOps
في الأيام القديمة لثقافة SysAdmin، كان الخادم حيوانًا أليفًا. لقد سميته “غاندالف” أو “زيوس”.
يقوم المطور بإدخال SSH إلى الخادم، وتشغيل apt-get install nginx، وتحرير ملف التكوين باستخدام vi، وإعادة تشغيل الخدمة، وربما تعديل معلمة kernel (sysctl.conf) لتحسين إنتاجية الشبكة.
سيفعلون هذا لمدة 5 سنوات.
أصبح الخادم ندفة ثلج. فريد. جميل. قابل للكسر.
إذا مات “غاندالف” (فشل في الأجهزة)، ينشأ الذعر.
“كيف نعيد بنائه؟”
“لا أعلم، لقد أنشأها بوب في عام 2018 ثم ترك الشركة.”
“ما هو التكوين؟”
“لقد كان على القرص الصلب الذي احترق للتو.”
هذا هو ClickOps (التكوين عبر وحدة التحكم/واجهة المستخدم الرسومية) والإدارة اليدوية. إنها كارثة تنتظر الحدوث.
في عصر السحابة، الخوادم هي الماشية، وليست الحيوانات الأليفة. يمكنك تسميتها “web-worker-01”، و”web-worker-02”. إذا مرض أحدهم، تطلق عليه النار وتنتج واحدًا جديدًا.
البنية الأساسية كرمز (IaC) هي المنهجية التي تتيح ذلك.
يمكنك تحديد البنية الأساسية الخاصة بك في ملفات نصية (.tf). أنت تلزمهم بـ Git. تقوم بمراجعتها. يمكنك تطبيقها باستخدام CLI.
الجهاز يبني الخادم. من الناحية المثالية، لن يقوم أي إنسان بإدخال SSH في الآلة مرة أخرى.
لماذا تناقش Maison Code Terraform
في Maison Code، نقوم بإدارة البنية التحتية للعديد من العملاء ذوي النمو المرتفع.
يتولى عميل واحد التعامل مع مبيعات الفلاش (ارتفاع حركة المرور بمقدار 100 مرة). آخر يتعامل مع البيانات الطبية (الامتثال لقانون HIPAA، والتشفير الصارم).
لا يمكننا الاعتماد على الذاكرة البشرية للتأكد من صحة هذه البيئات.
“هل قمت بتمكين التشفير في مجموعة S3 هذه؟”
إذا كنت تعتمد على الذاكرة، فالإجابة هي “ربما”.
نستخدم Terraform للتأكد من أن الإجابة هي “نعم، إنه موجود في السطر 42 من storage.tf”.
نحن نبني وحدات قابلة لإعادة الاستخدام. لدينا وحدة “Maison Code Safe Bucket” القياسية التي تفرض التشفير والتسجيل وإصدار الإصدارات. نحن نستخدم هذا لكل عميل.
وهذا يضمن التوحيد والأمان على نطاق واسع. نحن لا نحل نفس المشكلة مرتين. لقد قمنا بحلها مرة واحدة في Terraform، وقمنا بنشرها في كل مكان.
الأداة: HashiCorp Terraform
Terraform هو المعيار الذهبي لأنه لا أدري عن السحابة. يمكنك استخدامه لإدارة AWS، وGoogle Cloud، وAzure، وCloudflare، وGitHub، وحتى طلب Domino’s Pizza الخاص بك (نعم، يوجد مزود). قارن ذلك بـ CloudFormation (AWS فقط) أو ARM Templates (Azure فقط). يمنحك تعلم Terraform قوة خارقة في الصناعة بأكملها. يستخدم HCL (لغة تكوين HashiCorp). إنه تصريحي. أنت تصف الوجهة، وليس الرحلة. “أريد 5 خوادم.” (يكتشف Terraform كيفية الانتقال من 2 إلى 5). بدلاً من “إنشاء 3 خوادم”. (إلزامي).
مثال: إنشاء حاوية S3
مزود "أوس" {
المنطقة = "شرق الولايات المتحدة-1"
}
المورد "aws_s3_bucket" "الأصول" {
دلو = "maison-code-assets-prod"
العلامات = {
البيئة = "الإنتاج"
المشروع = "المنزل"
ManagedBy = "Terraform"
}
}
المورد "aws_s3_bucket_public_access_block" "block" {
دلو = aws_s3_bucket.assets.id
block_public_acls = صحيح
block_public_policy = صحيح
تجاهل_public_acls = صحيح
تقييد_public_buckets = صحيح
}
المورد "aws_s3_bucket_versioning" "إصدار" {
دلو = aws_s3_bucket.assets.id
تكوين_الإصدار {
الحالة = "ممكّن"
}
}
هذا الرمز هو الوثائق. أي شخص يقرأه يعرف: “لدينا مجموعة. إنها خاصة بشكل واضح. تم تمكين تعيين الإصدار (حتى نتمكن من استعادة الملفات المحذوفة).” وهذا أفضل من مستند Word مكون من 50 صفحة يصف إعداد الخادم (والذي يكون دائمًا قديمًا).
ملف الدولة: عقل Terraform
يتتبع Terraform ما قام بإنشائه في ملف يسمى “terraform.tfstate”.
هذا ملف JSON يقوم بتعيين موارد التعليمات البرمجية الخاصة بك (المورد "aws_instance" "app") إلى المعرفات الواقعية (i-0a1b2c3d4e5f).
الحالة الحالية مقابل الحالة المرغوبة.
عند تشغيل “خطة Terraform”، فإن Terraform:
- يقرأ الكود الخاص بك (الحالة المرغوبة).
- يقرأ ملف الحالة (آخر حالة معروفة).
- تحديث الحالة (التحقق من واجهات برمجة تطبيقات AWS لمعرفة ما إذا كانت الأمور قد تغيرت).
- يحسب “دلتا” (فرق). ثم يخبرك: “أخطط لإضافة مورد واحد وتغيير موردين وتدمير 0 مورد.” خطر: يحتوي ملف الحالة على أسرار (كلمات المرور والمفاتيح الخاصة) بنص عادي. أفضل الممارسات: لا تقم أبدًا بإلزام terraform.tfstate بـ Git. استخدم الواجهة الخلفية البعيدة. قم بتخزين الحالة في حاوية S3 مع تمكين التشفير من جانب الخادم. استخدم جدول DynamoDB لـ State Locking. يؤدي هذا إلى منع مطورين اثنين من تشغيل “terraform application” في نفس الوقت وإفساد الحالة.
الوحدات: مبدأ لا تكرر نفسك (الجاف).
إذا قمت بنسخ ولصق كتلة aws_instance 10 مرات لـ 10 خوادم، فأنت تقوم بذلك بشكل خاطئ.
إنشاء وحدة.
تعريف الوحدة (modules/web-server/main.tf):
متغير "الحجم" {
اكتب = سلسلة
الافتراضي = "t2.micro"
}
المتغير "الاسم" { النوع = سلسلة }
المورد "aws_instance" "التطبيق" {
عامي = "عامي-12345678"
مثيل_نوع = var.size
العلامات = {
الاسم = فار.اسم
}
}
** الاستخدام ** (main.tf):
وحدة "الواجهة الأمامية" {
المصدر = "./modules/web-server"
الحجم = "t3.small"
الاسم = "الواجهة الأمامية-01"
}
وحدة "الخلفية" {
المصدر = "./modules/web-server"
الحجم = "m5.large"
الاسم = "واجهة برمجة التطبيقات الخلفية"
}
إذا قررت تغيير معرف AMI (ترقية إصدار Ubuntu)، يمكنك تغييره في مكان واحد (الوحدة)، ويقوم بتحديث جميع الخوادم.
كشف الانجراف: التحقق من الواقع
ماذا لو قام مطور محتال بتسجيل الدخول إلى وحدة تحكم AWS وقام بتغيير مجموعة الأمان يدويًا لفتح المنفذ 22 (SSH) للعالم؟ هذا هو ** الانجراف التكوين **. الواقع لم يعد يطابق القانون. في المرة القادمة التي تقوم فيها بتشغيل “خطة Terraform”، سوف ترى Terraform ذلك. “الإخراج: تم تغيير قاعدة دخول مجموعة الأمان من المنفذ 22 (0.0.0.0/0) إلى NULL.” سيقترح إصلاح البيئة مرة أخرى إلى الحالة المحددة في الكود. وهذا يفرض الانضباط. تعتبر تغييرات “ClickOps” مؤقتة وسيتم محوها بحلول عملية النشر التالية.
مساحات عمل Terraform: بيئات متعددة
أنت بحاجة إلى التطوير والتدريج والإنتاج.
لا تقم بنسخ بنيات المجلدات (/dev، /prod).
استخدم مساحات العمل.
“مساحة عمل Terraform التدريج الجديد”.
“مساحة عمل Terraform منتج جديد”.
يمكنك استخدام نفس ملفات .tf، ولكن ملفات حالة مختلفة (terraform.tfstate.d/staging، terraform.tfstate.d/prod).
في التعليمات البرمجية الخاصة بك، يمكنك استخدام المنطق:
count = terraform.workspace == "همز"؟ 5 : 1.
يحصل Prod على 5 خوادم. ديف يحصل على 1.
السياسة كرمز (Sentinel / OPA)
في المؤسسات الكبيرة، تريد منع المطورين من ارتكاب الأخطاء.
“لا يمكن لأحد إنشاء حاوية S3 عامة.”
“لا يمكن لأحد توفير مثيل أكبر من كبير (مكلف للغاية).”
يمكنك استخدام Open Policy Agent (OPA) أو HashiCorp Sentinel.
يتم تشغيله قبل “تطبيق التضاريس”. إذا كانت الخطة تنتهك السياسة، فإنها تمنع النشر.
هذا هو الحوكمة الآلية.
وجهة نظر المتشككين
“إنها صيغة نمطية أكثر من اللازم. يمكنني فقط النقر فوق الزر بشكل أسرع.”
نقطة مضادة:
النقر أسرع مرة واحدة.
ولكن عليك أن تحافظ عليه ** للأبد **.
إذا كنت بحاجة إلى نسخ البيئة في منطقة أخرى (التعافي من الكوارث)، فإن النقر يستغرق أيامًا ويكون عرضة للأخطاء. يستغرق Terraform دقائق (المنطقة = "eu-west-1").
كما لا يمكن مراجعة التعليمات البرمجية لـ “ClickOps”. لا يمكنك فتح طلب سحب بنقرة واحدة بالماوس. لا يمكنك التراجع عن النقر بالماوس (بسهولة).
الكود هو قابلية التدقيق. الكود هو التعقل.
التعليمات
س: Terraform مقابل Ansible؟ ج: البنية التحتية لأحكام Terraform (الأجهزة: VPC، EC2، RDS). Ansible يقوم بتكوين البرنامج (البرنامج: Apache، MySQL Config، Users). في عالم “البنية التحتية غير القابلة للتغيير” الحديث (Docker)، أصبحت الحاجة إلى Ansible أقل. نحن نخبز البرنامج في صورة Docker. تقوم Terraform بنشر خدمة الحاوية (ECS/EKS). استخدم Terraform للسحابة. استخدم Ansible لنظام التشغيل (إذا كنت لا تستخدم الحاويات).
س: ما هو main.tf، variables.tf، outputs.tf؟
ج: إنها اتفاقية. يقرأ Terraform جميع ملفات .tf الموجودة في الدليل.
main.tf: الموارد.variables.tf: وسائط الإدخال.outputs.tf: ما سيتم طباعته في النهاية (على سبيل المثال، عنوان URL لموازنة التحميل).
س: Terraform Cloud مقابل Jenkins / GitHub Actions؟ ج: توفر Terraform Cloud ميزات رائعة:
- إدارة الحالة عن بعد (مدمجة).
- تسجيل الوحدة الخاصة.
- تقدير التكلفة (“سيؤدي هذا التغيير إلى زيادة فاتورتك بمقدار 50 دولارًا”). ومع ذلك، يمكنك تشغيل Terraform CLI داخل GitHub Actions باستخدام S3 Backend مجانًا. يتم الدفع لـ Terraform Cloud (لكل مستخدم). نبدأ عادةً بإجراءات GitHub ونقوم بالترقية إذا لزم الأمر.
الخلاصة
البنية التحتية كرمز تحول “Ops” إلى “Dev”. إنه يجلب تخصص هندسة البرمجيات (التحكم في الإصدار، مراجعة التعليمات البرمجية، الاختبار، CI/CD) إلى عالم الأجهزة. إذا لم يكن موجودًا في git، فهو غير موجود. التوقف عن بناء رقاقات الثلج. البدء في بناء ليغو.
النقر على الأزرار يدويا؟
إذا كانت بنيتك التحتية عبارة عن ندفة ثلج دقيقة تخشى لمسها، فيمكن لـ Maison Code إصلاحها. نحن نقوم بإجراء هندسة عكسية لإعداد “ClickOps” الحالي الخاص بك ونقوم بتدوينه في وحدات Terraform قوية وقابلة لإعادة الاستخدام. نحن نطبق عمليات سير عمل قفل الحالة واكتشاف الانجراف والتعافي من الكوارث.