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