cloud-init هو المعيار الفعلي لتهيئة النسخ السحابية خلال إقلاعها الأول. فحين تُطلق نسخة وتمرّر إليها نصّ user-data، يكون cloud-init هو من يفسّره وينفّذه: ينشئ المستخدمين ويكتب الملفات ويثبّت الحزم ويركّب الأقراص ويشغّل الخدمات.
المزيج المثالي واضح: صورة golden AMI تحتوي ما لا يتغيّر —نظام التشغيل وبيئة التشغيل والتحصين— بينما يقدّم user-data ما يتغيّر بحسب البيئة أو النسخة: الإعداد والأسرار المحقونة والدور. هكذا تعيد استخدام صورة واحدة في سياقات كثيرة.
طريقتان لكتابة user-data
يقبل user-data صيغًا عدة؛ وأشهرها اثنتان: نصّ الصدفة وcloud-config.
- نصّ الصدفة: يبدأ بـ
#!/bin/bash. بسيط ومباشر للمهام السريعة. - cloud-config: يبدأ بـ
#cloud-configويستخدم YAML تصريحيًا. أنظف وأسهل قراءةً وأكثر حيادًا تكراريًا لتهيئة المستخدمين والحزم والملفات والأوامر.
مثال على cloud-config
يعلن ملف #cloud-config النموذجي أقسامًا مثل packages: (الحزم المطلوب تثبيتها)
وwrite_files: (ملفات الإعداد) وruncmd: (الأوامر الختامية) وusers: (الحسابات
والمفاتيح). ولأنه تصريحي، فمراجعته وصيانته أسهل من نصّ طويل.
ممارسات جيدة
- أبقِ user-data صغيرًا: إن كبر أكثر من اللازم فالأرجح أن مكانه داخل الصورة مخبوزًا.
- الحياد التكراري: صمّم الأوامر بحيث لا تُفسد شيئًا عند إعادة تنفيذها.
- لا تضع أسرارًا بنصّ صريح في user-data أبدًا: فهو مقروء من بيانات النسخة الوصفية. احقنها وقت التشغيل من Secrets Manager أو Parameter Store أو Vault.
- احمِ الوصول إلى البيانات الوصفية: استخدم IMDSv2 للحدّ من سرقة بيانات الاعتماد عبر SSRF.
- سجّل وصحّح: سجلات cloud-init (
/var/log/cloud-init-output.log) خير صديق لك حين يفشل شيء ما.
الخبز أم الإقلاع: أين يوضع كل شيء
| يوضع في الصورة (خبز) | يوضع في user-data (إقلاع) |
|---|---|
| نظام التشغيل والترقيعات | إعداد خاص بالبيئة |
| بيئة التشغيل والوكلاء والتحصين | متغيّرات ومعاملات لكل نسخة |
| برمجيات ثابتة وثقيلة | التسجيل في العنقود والاكتشاف |
| كل ما يطول تثبيته | حقن الأسرار وقت التشغيل |
القاعدة الذهبية: الثابت والبطيء يُخبَز؛ والمتغيّر والخفيف يوضع عند الإقلاع.
أخطاء شائعة تكلّف ساعات
- وضع ما ينبغي أن يكون في الصورة داخل user-data، فتصبح عمليات الإقلاع بطيئة وهشّة.
- كشف أسرار بنصّ صريح في البيانات الوصفية.
- افتراض أن user-data يُعاد تنفيذه عند كل إقلاع: افتراضيًا لا يعمل إلا في الأول.
- إهمال مراجعة سجلات cloud-init حين «لا تفعل النسخة ما ينبغي».
أسئلة شائعة
هل يُنفَّذ user-data عند كل إعادة تشغيل؟
افتراضيًا في الإقلاع الأول فقط. يمكن ضبط cloud-init لتنفيذ أجزاء بعينها عند كل إقلاع، لكن يُستحسن فعل ذلك بوعي وبحياد تكراري.
هل تمرير كلمات المرور في user-data آمن؟
لا. فـ user-data مقروء من بيانات النسخة الوصفية. استخدم مدير أسرار واحقنها وقت التشغيل، واحمِ البيانات الوصفية بـ IMDSv2.
هل يعمل cloud-init في AWS فقط؟
لا. cloud-init متعدّد المنصّات ويعمل في AWS وAzure وGCP وغيرها، ما يجعله مثاليًا لأتمتة الإقلاع بصورة قابلة للنقل.
في imaxe.cloud نصمّم صورًا مهيّأة للاندماج مع cloud-init، بحيث تخدمك صورة واحدة في سيناريوهات كثيرة.



