الدفتر فاكر المعرّفات
بعد apply، terraform.tfstate فيه نسخة Terraform (هنا 1.16.6) وقائمة الموارد والمعرّف اللي الـ provider رجّعه. من غيره، التشغيل الجاي مش هيعرف إن hello.txt هو نفسه local_file.note، فهيعرض إنه يخلّق واحد جديد.
متعدّلوش بإيدك. فيه أوامر terraform state للحالات النادرة، وراجع الدوكس قبلها. غلطة في الملف ده تخلي apply يمس المورد الغلط.
السر بيتعمله نسخة
القيمة اللي معلّمة sensitive بتظهر في الطرفية كـ (sensitive value)، والمخرج يتطبع بكلمة sensitive بين قوسين زاوية. جوه terraform.tfstate القيمة نفسها اتكتبت نص عادي، ومعاها علامة إن الواجهة تخبيها.
إيه في git وإيه لأ
.terraform/*.tfstate*.tfstate.*crash.log*.tfvars!example.tfvars.terraform.lock.hcl يتحط. هو مش الدفتر. هو نسخة الـ provider.
*.tfvars غالبًا فيها قيم البيئة والأسرار. لو عندك مثال فاضي من الأسرار، استثنِه بـ !example.tfvars.
شخصين يعملوا apply
من غير قفل، الاتنين يقروا نفس الدفتر ويكتبوا نسخته. آخر كتابة تكسب، والدفتر يضيع عليه مورد. القفل يعني عملية واحدة تكتب.
على جهازك لوحدك الدفتر المحلي يكفي. أول ما الملف يبقى مع فريق أو مع CI، انقل الدفتر لـ backend بعيد.
الدفتر على S3
من Terraform 1.10 تقدر تقفل الدفتر بملف على S3 نفسه. use_lockfile افتراضه false، يعني لازم تطلبه. ملف القفل اسمه نفس مفتاح الدفتر بامتداد .tflock.
terraform { backend "s3" { bucket = "my-tf-state" key = "app/terraform.tfstate" region = "eu-central-1" encrypt = true use_lockfile = true }}البلوك ده شكل الإعداد، ومحتاج باكت موجود قبل init. فعّل versioning على الباكت عشان ترجع نسخة لو الدفتر اتمسح. الصلاحيات على المفتاح وعلى ملف .tflock: قراءة وكتابة، والحذف عشان القفل يتشال بعد ما العملية تخلّص. متكتبش مفتاح الوصول جوه الملف. حطه في البيئة أو في ~/.aws/credentials، لأن القيم اللي جوه إعداد الـ backend بتتسجل في .terraform وفي ملفات الخطة.
بعد ما تغيّر الـ backend شغّل terraform init تاني. الأداة ممكن تنقل الدفتر المحلي للبعيد لو طلبت منها.
الانحراف
في المعمل، مسح hello.txt بإيد والدفتر لسه شايفه خلّى plan يقول create. نفس الفكرة لو حد مسح سيرفر من الكونسول: الخطة هتعرض ترجّعه، لأن الرسمة لسه طالبه.
لو غيّرت حاجة من الكونسول وعايز الرسمة تلحق الواقع، ده قرار: يا تعدّل الملف، يا تخلي apply يرجع الواقع للرسمة. متسابش الاتنين مختلفين.
الـ workspace اسم دفتر
terraform workspace يبدّل ملف state تاني في نفس الفولدر. ده مش بيئة كاملة: نفس الكود، دفتر مختلف. فصل الإنتاج عن التجربة بفولدر أو بحساب، ومش بس باسم workspace، أحوط. الاسم لوحده سهل يتتنسي وقت apply.