MAISON CODE .
/ DevOps · Terraform · AWS · IaC

البنية التحتية كرمز: Terraform vs Pulumi

يعد النقر على الأزرار في وحدة تحكم AWS بمثابة دين فني. كيفية إدارة البنية التحتية بدون رأس باستخدام التعليمات البرمجية وملفات الحالة وGit.

AB
Alex B.
البنية التحتية كرمز: Terraform vs Pulumi

قمت بإعداد مجموعة AWS S3 الخاصة بك يدويًا. لقد قمت بتمكين CORS يدويًا. بعد 6 أشهر، تحتاج إلى إطلاق بيئة التدريج. هل يمكنك أن تتذكر بالضبط المربعات التي حددتها؟ لا. ** البنية التحتية كرمز (IaC) ** تحل هذه المشكلة. نقوم بتعريف خوادمنا وقواعد بياناتنا وسجلات DNS في ملفات نصية. نحن نلزمهم بـ Git. نحن نطبقها بشكل حتمي.

لماذا تتحدث Maison Code عن هذا

في Maison Code Paris، نعمل كضمير معمari لعملائنا. غالبًا ما نرث حزمًا “حديثة” تم بناؤها دون فهم أساسي للحجم.

نناقش هذا الموضوع لأنه يمثل نقطة تحول حاسمة في النضج الهندسي. التنفيذ الصحيح يميز MVP الهش عن منصة مؤسسية مرنة يمكنها التعامل مع حركة مرور الجمعة السوداء.

النموذج التعريفي (Terraform)

Terraform هو معيار الصناعة. يستخدم HCL (لغة تكوين HashiCorp). أنت تصف الحالة النهائية. يكتشف Terraform كيفية الوصول إلى هناك.

# main.tf
مزود "أوس" {
  المنطقة = "شرق الولايات المتحدة-1"
}

المورد "aws_s3_bucket" "الأصول" {
  دلو = "maison-code-assets-prod"
  ACL = "القراءة العامة"

  كورس_القاعدة {
    مسموح_الرؤوس = ["*"]
    المسموح_الطرق = ["الحصول على"]
    allow_origins = ["https://maisoncode.paris"]
  }
}

يؤدي تشغيل terraform Apply إلى إنشاء المجموعة. إذا قمت بتغيير allowed_methods إلى ["GET"، "HEAD"] وقمت بتشغيل التطبيق مرة أخرى، فسيقوم Terraform بتحديث واجهة برمجة تطبيقات الحاوية. فهو يمكّن CI/CD من البنية التحتية.

النموذج الحتمي (بولومي)

Terraform رائعة، لكن HCL هي لغة مخصصة. Pulumi يتيح لك كتابة البنية التحتية في TypeScript. يمنحك هذا حلقات ووظائف ومنطقًا مميزًا.

//index.ts
استيراد * كـ aws من "@pulumi/aws";

دلو ثابت = جديد aws.s3.Bucket("assets"، {
    ACL: "القراءة العامة"،
    قواعد كورس: [{
        الرؤوس المسموح بها: ["*"]،
        الطرق المسموح بها: ["الحصول على"]،
        المسموح به: ["https://maisoncode.paris"]،
    }]،
});

تصدير const BucketName = Bucket.id;

إدارة الدولة

تقوم أدوات IaC بتخزين “حالة” العالم في ملف (terraform.tfstate). يقوم هذا الملف بتعيين التعليمات البرمجية الخاصة بك إلى العالم الحقيقي (معرف موارد AWS). خطر: لا تقم أبدًا بتخزين الحالة محليًا. إذا تعطل جهاز الكمبيوتر المحمول الخاص بك، فستفقد إمكانية الوصول إلى الأشعة تحت الحمراء. قم بتخزين الحالة في واجهة خلفية بعيدة (S3 Bucket with Locking أو Terraform Cloud).

كشف الانجراف

يحدث “الانجراف” عندما يقوم مطور مبتدئ بتسجيل الدخول إلى وحدة تحكم AWS ويحذف يدويًا قاعدة جدار الحماية “لإصلاح الخلل”. يقول الكود أن جدار الحماية قيد التشغيل. الواقع يقول أن جدار الحماية معطل. نحن ندير مهمة كرون “خطة terraform” يومية. إذا اكتشف تغييرات (Drift)، فإنه ينبهنا على Slack. “تحذير: تم اكتشاف انجراف البنية التحتية في مجموعة الأمان sg-123.”

البنية التحتية غير القابلة للتغيير

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

استراتيجية السحابة المتعددة

Shopify موجود على Google Cloud. صورك موجودة على AWS S3. وظائف Edge الخاصة بك موجودة على Cloudflare. يقوم IaC بإدارة كل هذه الملفات في ملف واحد. يمكنك تمرير إخراج واحد (AWS CloudFront URL) كمدخل إلى آخر (Cloudflare DNS Record).

9. الإدارة السرية: لا توجد كلمات مرور في Git

تحتاج إلى تمرير كلمة مرور قاعدة البيانات إلى وظيفة Lambda. أبدًا اكتبه في “main.tf”. أبدًا الالتزام بـ .env. الحل: AWS Secrets Manager + مصادر بيانات Terraform.

  1. أنشئ سرًا في وحدة تحكم AWS (أو عبر واجهة سطر الأوامر).
  2. يشير Terraform إليه: data.aws_secretsmanager_secret_version.db_pass.secret_string.
  3. يقوم Terraform بإدخاله كمتغير بيئة في Lambda في وقت النشر. السر موجود فقط في ذاكرة الوصول العشوائي (RAM) أثناء النشر. لا يلمس القرص أبدًا.

10. السياسة كرمز (Sentinel / OPA)

كيف يمكنك منع أحد المطورين المبتدئين من الحصول على مثيل GPU بقيمة 5000 دولار شهريًا؟ السياسة كرمز. نحن نستخدم Open Policy Agent (OPA) لفحص خطة Terraform قبل تطبيقها. رفض إذا لم يكن نوع المثيل موجودًا في ["t3.micro"، "t3.small"]. إذا كان الكود ينتهك السياسة، فسيفشل مسار CI. هذا هو “الدرابزين، وليس حراس البوابة”.

11. البنية التحتية للنشر باللونين الأزرق والأخضر

يسمح لنا IaC بتدوير بيئة مكررة.

  1. الحياة “أخضر” (الآية ١).
  2. يدور Terraform باللون “الأزرق” (الإصدار 2).
  3. نقوم بإجراء اختبارات E2E على اللون الأزرق.
  4. يقوم Terraform بتحديث Load Balancer (ALB) للإشارة إلى اللون الأزرق.
  5. في حالة إطلاق التنبيهات، يقوم Terraform بإعادة ALB إلى اللون الأخضر على الفور.
  6. بمجرد استقراره، يقوم Terraform بتدمير اللون الأخضر. وهذا يوفر السلامة التي لا يمكن أن توفرها عمليات النشر اليدوية أبدًا.

12. تدوير بيانات اعتماد قاعدة البيانات

يقول الامتثال “قم بتدوير كلمات المرور كل 30 يومًا”. البشر يكرهون هذا. Terraform يحب ذلك. نقوم بتكوين “aws_secretsmanager_secret_rotation”. إنها تدور حول لامدا التي:

  1. قم بتسجيل الدخول إلى RDS.
  2. إنشاء مستخدم ب.
  3. التحديث السري.
  4. تحديث التطبيق.
  5. احذف المستخدم أ. صفر التوقف. صفر مشاركة بشرية.

14. التعافي من الكوارث (DR) كرمز

ماذا لو انخفض “us-east-1”؟ (يحدث). مع IaC، DR هو برنامج نصي. تطبيق Terraform -var = "region=us-west-2". في غضون 15 دقيقة، يتم نسخ البنية التحتية بالكامل (موازنات التحميل، EC2، قواعد البيانات) على الجانب الآخر من البلاد. نحن نتحقق من ذلك بشكل ربع سنوي عن طريق تشغيل “Game Days”. نتحقق من أنه يمكننا تدوير المكدس من البداية في حساب AWS فارغ. إذا قمت بالنقر فوق الأزرار الموجودة في وحدة التحكم، فإن DR أمر مستحيل. سوف تكون أسفل لعدة أيام. مع IaC، أنت معطل لمدة دقائق.

15. لماذا ميزون كود؟

في Maison Code، نؤمن بأن البنية التحتية هي المنتج. نحن لا نوظف “مسؤولي النظام”. نقوم بتوظيف ** مهندسي DevOps **. نحن نبني بنية تحتية ذاتية الإصلاح وقابلة للتوسع وغير قابلة للتغيير. نحن نسلمك المفاتيح (Git Repo)، وليس الصندوق الأسود. نحن نمكن فريقك من النشر 10 مرات يوميًا دون خوف من كسر الشبكة. لأن السرعة تتطلب السلامة.

16. الاستنتاج

البنية التحتية كرمز هي الفرق بين “مشروع الهواية” و”منصة المؤسسة”. إنه يحول “Ops” إلى هندسة البرمجيات. يمنحك إمكانية التدقيق والسرعة والأمان. توقف عن النقر على الأزرار القياسية. البدء في كتابة التعليمات البرمجية.


هل سئمت من الإعداد اليدوي للخادم؟

نقوم بترحيل البنية التحتية اليدوية إلى خطوط أنابيب Terraform/Pulumi القوية والقابلة للتدقيق.

[أتمتة السحابة الخاصة بي](/جهة اتصال). قم بتوظيف مهندسينا.