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

لماذا نحتاج إلى البنية التحتية ككود IaC؟
مع ازدياد عدد مزودي الخدمات السحابية مثل AWS وAzure وGCP، أصبح من الصعب إدارة الموارد بطريقة يدوية، خصوصاً عندما تكبر المشاريع وتتعدد البيئات بين التطوير والاختبار والإنتاج.
هنا يظهر دور IaC، والذي يعني تمثيل البنية التحتية على شكل شيفرة يمكن حفظها ومراجعتها وتشغيلها تلقائياً. على سبيل المثال، إذا أردت إنشاء خادم EC2 داخل AWS بالطريقة التقليدية، فغالباً ستسجل الدخول إلى لوحة التحكم، ثم تُدخل القيم المطلوبة، وتضغط زر التشغيل. هذه الطريقة مناسبة في الحالات البسيطة، لكنها ليست الأفضل عندما تحتاج إلى التكرار والدقة والتوثيق.
أما باستخدام Terraform، فيمكنك كتابة كل هذه الإعدادات داخل ملف تهيئة، ثم يقوم البرنامج بتحويلها إلى موارد فعلية عبر واجهات API الخاصة بمزود السحابة. وبذلك تصبح البنية التحتية قابلة للتتبع والإعادة والتعديل بنفس الأسلوب الذي تُدار به تطبيقات البرمجيات.
كيف يعمل Terraform؟
يعتمد Terraform على ملفات إعدادات مكتوبة بلغة HashiCorp Configuration Language أو HCL. في هذه الملفات، تصف الحالة المطلوبة للبنية التحتية، وليس الخطوات التفصيلية لتنفيذها. هذا ما يجعل أسلوبه Declarative، أي أنك تخبره بما تريد الوصول إليه، وهو يتكفل بتنفيذ الخطوات اللازمة داخلياً.
في المثال التالي، نعرّف مزود الخدمة السحابية وننشئ مثيلاً من نوع EC2 على AWS:
provider "aws" {
region = "us-west-1"
}
resource "aws_instance" "myec2" {
ami = "ami-12345qwert"
instance_type = "t2.micro"
}
يتضمن المثال كتلتين أساسيتين:
- الكتلة
provider: تُحدد مزود السحابة والمنطقة الجغرافية. - الكتلة
resource: تُعرّف المورد المطلوب إنشاؤه، مثل خادم أو شبكة أو قاعدة بيانات.
في هذا المثال، المورد من النوع aws_instance واسمُه المحلي داخل المشروع هو myec2. كما نحدد صورة النظام عبر ami ونوع الخادم عبر instance_type.
أهم مزايا Terraform
1. إدارة البنية التحتية كملفات قابلة للمراجعة
عندما تصبح البنية التحتية مكتوبة في ملفات، يسهل تتبع التعديلات باستخدام أنظمة إدارة الإصدارات مثل Git. وهذا يرفع جودة العمل الجماعي ويجعل مراجعة التغييرات أكثر دقة.
2. تقليل الوقت والجهد
بدلاً من إعادة الإعدادات يدوياً في كل مرة، يمكنك كتابة ملف واحد ثم تشغيله مراراً في دقائق قليلة. وهذا يسرّع مراحل التخطيط والتنفيذ ويقلل احتمالات الخطأ البشري.
3. تسهيل التعديلات المستقبلية
أي تغيير في البنية التحتية يصبح مشابهاً لتعديل الشيفرة البرمجية. يمكنك تحديث الملف، ثم مراجعة ما سيتغير قبل التنفيذ الفعلي.
4. دعم العمل الجماعي
يساعد Terraform الفرق التقنية على توحيد طريقة إنشاء الموارد، بدلاً من الاعتماد على خبرة كل شخص في لوحة التحكم.
الميزات الأساسية في Terraform
التنسيق Orchestration
عند نشر خدمات مترابطة، يمكن لـ Terraform أن يؤدي دوراً محورياً في تنسيق إنشاء الموارد المختلفة ضمن تسلسل منطقي ومدروس.
الحياد تجاه مزود السحابة Cloud Agnostic
يدعم Terraform عدداً كبيراً من مزودي الخدمات السحابية، مثل AWS وMicrosoft Azure وGoogle Cloud. هذا يقلل من مشكلة الارتباط الكامل بمزود واحد، ويجعل الانتقال أو التنويع أكثر مرونة.
الأسلوب التصريحي Declarative Syntax
لا تحتاج إلى كتابة الخطوات التنفيذية بالتفصيل. يكفي تحديد الحالة المطلوبة، مثل إنشاء خادم بمواصفات معينة، وسيتولى Terraform تحويل ذلك إلى عمليات فعلية.
الوحدات Modules
تتيح لك الوحدات إعادة استخدام الشيفرة في أكثر من مشروع. فإذا أنشأت وحدة خاصة بالخوادم أو الشبكات، يمكنك استدعاؤها بسهولة كلما احتجت إلى نفس النمط.
إدارة الحالة State Management
يحفظ Terraform حالة البنية التحتية داخل ملف حالة يُعرف باسم state. هذا الملف يربط بين ما هو مكتوب في الشيفرة وما تم إنشاؤه فعلياً على السحابة، وهو عنصر مهم لتجنب التعارضات بين أعضاء الفريق.
التجهيز الأولي Provisioning
رغم أن Terraform ليس أداة تهيئة متقدمة مثل بعض الأدوات الأخرى، فإنه يدعم تنفيذ أوامر ونصوص مضمّنة باستخدام local-exec وremote-exec، وهو ما يفيد في تثبيت بعض المكونات مباشرة بعد إنشاء المورد.
مفتوح المصدر Open Source
يتوفر Terraform بنسخة مفتوحة المصدر، إلى جانب إصدار مؤسسي مخصص للفرق والشركات ذات الاحتياجات الأوسع.
دورة العمل الأساسية في Terraform
يعتمد الاستخدام اليومي لـ Terraform على أربع مراحل أساسية: init ثم plan ثم apply وأخيراً destroy.
1. تهيئة المشروع باستخدام terraform init
عند إنشاء ملفات الإعداد لأول مرة، يجب تشغيل الأمر terraform init. هذا الأمر يجهز بيئة العمل ويقوم بتنزيل الإضافات المطلوبة الخاصة بمزود السحابة، مثل إضافة aws.
2. إنشاء خطة التنفيذ عبر terraform plan
يُستخدم الأمر terraform plan لتحليل الشيفرة والتحقق من صلاحيتها، ثم عرض التغييرات التي سيتم تنفيذها. في هذه المرحلة يمكن اكتشاف أخطاء الصياغة أو مشاكل المصادقة أو التعارض مع الحالة الحالية.
3. تطبيق التغييرات باستخدام terraform apply
بعد التأكد من الخطة، يأتي دور terraform apply لتنفيذ التغييرات وإنشاء الموارد أو تعديلها فعلياً.
4. حذف الموارد عبر terraform destroy
إذا لم تعد بحاجة إلى الموارد، يمكنك استخدام terraform destroy لحذف كل ما هو مرتبط بالإعداد الحالي. وهذه ميزة عملية جداً في بيئات الاختبار والتجارب المؤقتة.
تطبيق عملي: إنشاء خادم EC2 على AWS
لفهم الفكرة بشكل أوضح، لنفترض أنك تريد إنشاء خادم افتراضي على AWS باستخدام Terraform.
- أنشئ مجلداً جديداً على جهازك.
- أضف ملفاً باسم
main.tf. - الصق داخله إعدادات
Terraformالمناسبة. - تأكد من استخدام قيمة
AMIالصحيحة حسب المنطقة التي تعمل عليها.
بعد ذلك، افتح الطرفية وانتقل إلى المجلد، ثم شغّل أمر التهيئة:
terraform init
سيؤدي هذا إلى تنزيل إضافة aws المطلوبة. ويكون المخرَج عادة قريباً من الآتي:
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/aws from the dependency lock file
- Installing hashicorp/aws v3.22.0 ...
- Installed hashicorp/aws v3.22.0 (signed by HashiCorp)
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure.
All Terraform commands should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
فحص خطة التنفيذ
بعد نجاح التهيئة، شغّل الأمر التالي:
terraform plan
إذا كانت الإعدادات سليمة، سيعرض Terraform ملخصاً بالتغييرات التي يعتزم تنفيذها:
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.example will be created
+ resource "aws_instance" "myec2" {
+ ami = "ami-12345qwert"
+ arn = (known after apply)
+ associate_public_ip_address = (known after apply)
. . .
}
Plan: 1 to add, 0 to change, 0 to destroy.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform can't guarantee that exactly these actions will be performed if "terraform apply" is subsequently run.
يوضح هذا المخرَج أن الأداة ستضيف مورداً واحداً فقط، وهو مثيل EC2 باسم myec2. كما يشير إلى أن بعض الخصائص، مثل arn وassociate_public_ip_address، لن تُعرف إلا بعد التنفيذ الفعلي.
تنفيذ الإنشاء
لتنفيذ الخطة وإنشاء المورد، شغّل الأمر التالي:
terraform apply
بعد الموافقة بكتابة yes، يبدأ Terraform في إنشاء الخادم ويعرض التقدم بشكل دوري:
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_instance.myec2: Creating...
aws_instance.myec2: Still creating... [10s elapsed]
aws_instance.myec2: Still creating... [20s elapsed]
aws_instance.myec2: Still creating... [30s elapsed]
aws_instance.myec2: Still creating... [40s elapsed]
aws_instance.myec2: Still creating... [50s elapsed]
aws_instance.myec2: Creation complete after 51s [id=i-04ef3120a0006a153]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
بعد انتهاء العملية، يمكنك الدخول إلى لوحة AWS والتحقق من وجود المثيل الذي تم إنشاؤه باستخدام المعرّف الظاهر في النتيجة.
كيف يحذف Terraform الموارد؟
عندما تنتهي من استخدام المورد، يمكنك الاعتماد على نفس ملف الإعدادات لإزالته بشكل منظم. شغّل الأمر التالي:
terraform destroy
سيعرض البرنامج خطة الحذف أولاً، ثم يطلب التأكيد:
Terraform destroy
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
aws_instance.myec2: Destroying... [id=i-04ef3120a0006a153]
aws_instance.myec2: Still destroying... [id=i-04ef3120a0006a153, 10s elapsed]
aws_instance.myec2: Still destroying... [id=i-04ef3120a0006a153, 20s elapsed]
aws_instance.myec2: Still destroying... [id=i-04ef3120a0006a153, 30s elapsed]
aws_instance.myec2: Still destroying... [id=i-04ef3120a0006a153, 40s elapsed]
aws_instance.myec2: Still destroying... [id=i-04ef3120a0006a153, 50s elapsed]
aws_instance.myec2: Still destroying... [id=i-04ef3120a0006a153, 1m0s elapsed]
aws_instance.myec2: Destruction complete after 1m5s
Destroy complete! Resources: 1 destroyed.
هذه الطريقة تمنحك سيطرة دقيقة على دورة حياة الموارد، وهو أمر بالغ الأهمية في المشاريع التي تتطلب تقليل التكلفة ومنع بقاء موارد غير مستخدمة.
ملاحظات مهمة حول ملف الحالة State
من الضروري فهم أن Terraform لا يعتمد فقط على ملفات الإعداد، بل يحتفظ أيضاً بملف حالة يربط بين ما هو معلن في الشيفرة وما هو موجود فعلياً على أرض الواقع. إذا عدّلت الإعدادات بشكل غير منضبط، أو حاولت حذف الموارد بعد تغيير التكوين دون فهم أثر ذلك على الحالة، فقد تواجه أخطاء أو سلوكاً غير متوقع.
لهذا السبب، يُنصح بالتعامل مع ملف state بعناية، خصوصاً عند العمل ضمن فريق، ويفضل في البيئات الاحترافية استخدام حالة بعيدة remote state لضمان التزامن ومنع التعارض.
متى يكون Terraform الخيار المناسب؟
يكون Terraform مناسباً جداً في الحالات التالية:
- عندما تحتاج إلى إنشاء نفس البنية التحتية أكثر من مرة.
- عندما تعمل ضمن فريق يحتاج إلى توثيق واضح للتغييرات.
- عندما ترغب في إدارة موارد سحابية على أكثر من مزود.
- عندما تريد تقليل العمل اليدوي وتحسين الاعتمادية.
- عندما تبحث عن آلية قابلة للأتمتة والدمج مع خطوط
CI/CD.
أفضل الممارسات عند استخدام Terraform
- قسّم المشاريع الكبيرة إلى
modulesقابلة لإعادة الاستخدام. - شغّل
terraform planدائماً قبلterraform apply. - احفظ ملفات الشيفرة في مستودع
Git. - استخدم ملف حالة بعيداً عند العمل الجماعي.
- لا تضع البيانات الحساسة مباشرة داخل الملفات النصية إن أمكن، واعتمد على المتغيرات أو أدوات إدارة الأسرار.
الخلاصة التقنية
يقدم Terraform نموذجاً عملياً وفعالاً لإدارة البنية التحتية الحديثة عبر الشيفرة، وهو خيار ممتاز للفرق التي تريد السرعة، والوضوح، والقدرة على التوسع. قوته الحقيقية لا تكمن فقط في إنشاء الموارد، بل في جعل البنية التحتية قابلة للمراجعة والتكرار والأتمتة. وإذا تم استخدامه مع فهم جيد لمفاهيم مثل state وmodules وplan، فإنه يتحول من أداة تشغيل إلى عنصر أساسي في هندسة المنصات السحابية الحديثة.