Terraform / اللغة والمزود والهوية المُدارة / الدرس 5
عناوين الموارد ورسم الاعتماد
عبر عن اعتماد القيم وميّز هوية الإعداد من جدولة التشغيل.
في هذه الصفحة
أهداف الدرس
- اشرح العناوين والاعتماد الضمني عبر المراجع.
- ميز الدورات وحدود depends_on الصريحة.
يعرف العنوان نسخة إعداد مُدارة
تحمل كتلة المورد نوعاً واسماً محلياً يشكلان عنواناً مثل terraform_data.catalog. تضيف مسارات الموديولات ومفاتيح النسخ أجزاء أخرى عند التكرار. لا يساوي العنوان معرّف الكائن عند المزود. وقد يجعل تغييره بلا استراتيجية ترحيل صريحة القديم والجديد هويتين مختلفتين في الحالة. اختر أسماء ومفاتيح من مفاهيم مجال مستقرة، لا ترتيب العرض أو قيماً تتغير كل تشغيل.
تحمل المراجع القيمة والاعتماد معاً
يسمح مرجع خاصية مورد آخر باستنتاج الاعتماد اللازم للتقييم أو الفعل. ينبغي أن يستخدم المستهلك المرجع لا نسخة قيمة تبدو مساوية. في المثبت يستخدم consumer.input المعرّف catalog.id الذي لا يعرف من المصدر عند إنشاء نسخة جديدة؛ لذلك يعتمد على الهوية المُدارة. هذه العلاقة أهم من تقديم الكتلة نصياً. عرض الإعداد لا ينشئ أي كائن.
terraform {
required_version = ">= 1.16.0, < 1.17.0"
}
resource "terraform_data" "catalog" {
input = "atlas-lab"
}
resource "terraform_data" "consumer" {
input = { catalog_id = terraform_data.catalog.id }
}
output "consumer_input" {
value = terraform_data.consumer.input
}
يشير المستهلك للهوية المُدارة. قد تنتشر قيمة مجهولة قبل الإنشاء؛ فلا تخمّن نصاً بديلاً. ويضم الرسم الحقيقي تفاصيل مزود وأفعال أكثر من الاسمين.
استخدم الاعتماد الصريح للعلاقات الخفية فقط
تصف depends_on علاقة ضرورية غير ممثلة بمرجع قيمة عادي، لكنها لا تصلح بنية خاطئة. قد تفرض الحواف الواسعة ترتيباً محافظاً وتبقي قيماً إضافية مجهولة أثناء الخطة. فضل أضيق علاقة تعبّر عن الحاجة الحقيقية. كذلك لا يعني اكتمال إنشاء المورد جاهزية التطبيق خلفه؛ فإكمال المزود وجاهزية الخدمة وإتاحة العمل عقود منفصلة لا تجمعها عبارة اعتماد واحدة.
افحص رسماً معلناً صغيراً دون اتصال
يرتب Python خريطة اعتماد ثابتة لا دورية؛ تنتظر كل عقدة سوابقها وتُفرز العقد الجاهزة لعرض حتمي. ليس هذا رسم Terraform الكامل أو ترتيب حذفه أو توازيه أو جدولة مزوده، بل يوضح عدم اختيار العقدة قبل إزالة سوابقها. يشير غياب عقدة جاهزة إلى دورة أو نموذج غير متسق يحتاج تحقيقاً، لا انتظاراً اعتباطياً أو إنشاء موارد يدوي.
pending = {'catalog': set(), 'consumer': {'catalog'}, 'output': {'consumer'}}
order = []
while pending:
ready = sorted(name for name, dependencies in pending.items() if not dependencies)
assert ready, 'cycle in synthetic graph'
order.extend(ready)
for name in ready:
del pending[name]
for dependencies in pending.values():
dependencies.difference_update(ready)
print(' -> '.join(order))
catalog -> consumer -> output
الترتيب catalog ثم consumer ثم output. تعالج الحلقة ثلاث عقد في الذاكرة دون مزود. عقدة المخرج وسيلة فهم لا تمثيل كامل للرسم الداخلي.
تكشف الدورة غالباً مشكلة واجهة
إذا احتاج موردان أو موديولان نتيجة بعضهما المكتملة لتحديد هويتهما أو معاملاتهما، فقد لا يوجد ترتيب أولي صالح. لا تزيل إضافة depends_on هذا الدور. حدد القيم التي يجب أن تعبر الحد فعلاً، وافصل المدخل الثابت عن الهوية المتولدة وفكر بملكية أنسب. اجعل إعادة التصميم قابلة للمراجعة واحفظ ارتباطات الحالة أثناء الترحيل، ولا ترتجل حذفها كإصلاح للرسم.
الأخطاء الشائعة وإصلاحها
Reference to undeclared resource.
- لماذا يحدث؟
- لا يحتوي النطاق النوع والاسم المشار إليهما.
- كيف تصلحه؟
- صحح العنوان أو الواجهة بعد فحص النطاق.
- كيف تتجنب تكراره؟
- راجع المراجع كواجهات لا نصوص منسوخة.
Cycle in dependencies.
- لماذا يحدث؟
- تحتاج قيم بعضها قبل بدء التقييم.
- كيف تصلحه؟
- أعد الحد وأزل الدور الحقيقي.
- كيف تتجنب تكراره؟
- اختبر الرسم وافصل المفاتيح عن الهويات المتولدة.
إضافة depends_on لكل كائن.
- لماذا يحدث؟
- استُخدم الترتيب بدلاً من فهم القيم.
- كيف تصلحه؟
- أبق المراجع والاعتماد الخفي المبرر فقط.
- كيف تتجنب تكراره؟
- راجع آثار الحواف الواسعة على المجهول والجدولة.
اختبر فهمك
1. هل يزيل نقل كتلة consumer أعلى catalog اعتمادها؟
اعرض الحل المشروح
لا؛ يبقى المرجع مهما كان الموضع. يستنتج Terraform العلاقة من المعنى لا الترتيب. ينبغي أن تحفظ إعادة التنظيم العلاقة مع ثبات القيم والعناوين.
2. لماذا لا تصلح depends_on مرجعاً دائرياً؟
اعرض الحل المشروح
تضيف شرطاً ولا تزيل الدور. حدد القيمة أو الملكية الخاطئة وأعدها؛ فقد يخفي الترتيب أو الإنشاء اليدوي أو حذف الحالة المشكلة ويضيف كائنات غير متسقة.
أهم ما تعلمته
- العناوين هويات والمراجع علاقات.
- لا يثبت الاعتماد الجاهزية ولا يعالج الدورة.