تخطَّ إلى المحتوى

terraform apply

تطبيق تغييرات البنية التحتية terraform apply

terraform apply ينفّذ فعلياً التغييرات التي عرضها terraform plan على البنية التحتية الحقيقية، وهو الأمر الوحيد في دورة Terraform الذي ينشئ أو يعدّل أو يحذف موارد فعلية.

بعد معاينة الفروقات بـ terraform plan، terraform apply يطبّقها فعلياً: يستدعي واجهات مزوّد الخدمة السحابية لإنشاء الموارد الجديدة أو تعديل الموجودة أو حذف غير المرغوب فيها، ثم يحدّث ملف الحالة (terraform.tfstate) ليعكس الوضع الجديد. بدون خطة محفوظة مسبقاً (-out)، يحسب apply خطة جديدة في اللحظة ويطلب تأكيداً تفاعلياً قبل المتابعة؛ في CI يُستخدم -auto-approve لتخطي هذا التأكيد، أو تمرير ملف خطة محفوظ مسبقاً من مرحلة plan.

كل تطبيق ناجح يُحدِّث ملف الحالة، الذي يجب تخزينه بأمان ومشاركته بين أعضاء الفريق (عادة عبر backend بعيد مثل S3 مع قفل) لا محلياً — وإلا فقد تعمل تشغيلتان متزامنتان على نسختين مختلفتين من الحالة وتتعارضان.

الصياغة

terraform apply
terraform apply -auto-approve
terraform apply <ملف الخطة>

📄 مثال

# تطبيق خطة محفوظة مسبقاً من terraform plan -out=tfplan
terraform apply tfplan

# أو في CI بموافقة تلقائية بعد مراجعة plan في خطوة سابقة:
terraform apply -auto-approve

أهم النقاط

العنصرالوظيفة
-auto-approveيتخطى طلب التأكيد التفاعلي؛ ضروري لتشغيل CI غير التفاعلي
ملف خطة كمعاملتطبيق خطة محفوظة تماماً بدل حساب خطة جديدة في لحظة apply
terraform.tfstateملف الحالة الذي يُحدَّث تلقائياً بعد كل apply ناجح ليعكس البنية التحتية الفعلية
backend بعيدتخزين الحالة على خدمة مشتركة (S3، Terraform Cloud...) بدل القرص المحلي، لتفادي تعارض تشغيلتين متزامنتين

💡 نصائح عملية

  • طبّق دائماً ملف الخطة المحفوظ من plan في CI بدل حساب خطة جديدة وقت apply، لضمان تطابق ما تمت مراجعته مع ما يُنفَّذ فعلياً
  • استخدم قفل الحالة (state locking) في الـ backend البعيد لمنع تشغيلتين متزامنتين من تعديل نفس البنية التحتية في نفس اللحظة

⚠️ أخطاء شائعة

  • تشغيل apply بلا -auto-approve داخل CI غير تفاعلي، فتتجمد التشغيلة بانتظار تأكيد لن يأتي أبداً
  • تخزين ملف الحالة محلياً أو دون تشفير رغم احتوائه أحياناً على قيم حساسة ناتجة عن الموارد المُنشأة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DEVOPS الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs