الجزء 3 من سلسلة تعلّم AWS من الصفر

EC2: أول سيرفر لك

وش هو EC2، وكيف تختار نوع السيرفر، وكيف تحميه بمجموعات الأمان، وتشغّل سيرفر ويب حقيقي يجهّز نفسه أول ما يقلع، مع دور IAM بدل المفاتيح.

في هذا المقال
  1. وش تختار لما تشغّل سيرفر؟
  2. أنواع السيرفرات
  3. مجموعات الأمان: جدار السيرفر الناري
  4. User Data: سيرفر يجهّز نفسه
  5. عملي: شغّل سيرفر ويب
  6. عملي: أعطِ السيرفر دور IAM
  7. الإيقاف أو الحذف؟
  8. الخلاصة
  9. اختبر نفسك

بعد ما أمّنا الحساب في الجزء الثاني، جا وقت أشهر خدمة في AWS. EC2 (اختصار Elastic Compute Cloud) تعطيك سيرفرات افتراضية تشغّلها خلال دقائق، تدفع عليها وهي شغالة، وتحذفها لما تخلص.

في هذا الجزء بنفهم القرارات اللي تاخذها لما تشغّل سيرفر، وبنشغّل سيرفر ويب يجهّز نفسه تلقائياً، ونوصله بخدمات AWS بدور IAM بدل المفاتيح.

وش تختار لما تشغّل سيرفر؟

كل سيرفر (يسمونه Instance) يتكوّن من قرارات محددة:

القرار وش يعني مثال
AMI صورة النظام اللي يقلع منها السيرفر Amazon Linux أو Ubuntu أو Windows
نوع السيرفر المعالج والذاكرة وسرعة الشبكة t3.micro
زوج المفاتيح طريقة الدخول الآمن عبر SSH ملف .pem عندك
الشبكة وين يعيش، وهل له عنوان عام شبكة افتراضية ومنطقة توفر
مجموعة الأمان جدار ناري يحدد مين يوصل له السماح بالمنفذ 80
التخزين القرص الموصول فيه قرص EBS بحجم 8 جيجا
User Data سكربت يتنفذ أول ما يقلع تثبيت خادم ويب

أنواع السيرفرات

اسم النوع يوصف السيرفر بالكامل. خذ مثلاً m7g.2xlarge:

  • m: العائلة، وتحدد الغرض من السيرفر.
  • 7: الجيل. الأجيال الأحدث عادة أسرع وأرخص لنفس الأداء.
  • g: ميزة إضافية، وهنا معناها معالج AWS Graviton (بنية ARM).
  • 2xlarge: الحجم داخل العائلة.

والعائلات الأساسية:

العائلة تناسب أمثلة
عامة (t, m) مواقع الويب وأغلب التطبيقات، توازن بين كل شي t3, m7i
محسّنة للمعالجة (c) المهام الحسابية، ترميز الفيديو، خوادم الألعاب c7i
محسّنة للذاكرة (r, x) قواعد البيانات والكاش في الذاكرة r7i
محسّنة للتخزين (i, d) قراءة وكتابة سريعة جداً على قرص محلي i4i
مسرّعة (p, g) الذكاء الاصطناعي والرسوميات بمعالجات GPU g5

ابدأ صغير دايماً، وكبّر لما تشوف أرقام تقول إنك تحتاج. وعائلة t فيها نظام "رصيد" للمعالج: تشتغل بأداء أساسي وتقدر تتجاوزه لفترات قصيرة، وهذا ممتاز للمشاريع الصغيرة ومو مناسب لحمل ثقيل ومستمر.

وأغلب الأنواع الحالية تشتغل على AWS Nitro System، وهو Hypervisor خفيف معه عتاد مخصص، فيعطي السيرفر الافتراضي أداء قريب من الجهاز الفعلي. ولو تحتاج الجهاز نفسه، مثل برنامج ما يشتغل على جهاز افتراضي، دور على أحجام .metal.

مجموعات الأمان: جدار السيرفر الناري

مجموعة الأمان (Security Group) جدار ناري افتراضي يحيط بالسيرفر، وأهم شي تعرفه عنها:

  • القواعد فيها سماح فقط. ما تكتب "امنع"، أي شي ما سمحت له ممنوع.
  • افتراضياً: كل الداخل ممنوع، وكل الخارج مسموح.
  • تتذكر الاتصال (Stateful): لو سمحت لطلب يدخل، رده يطلع تلقائياً بدون قاعدة خروج.
  • تقدر تسمح لعنوان IP، أو لمجموعة أمان ثانية. مثلاً: قاعدة البيانات تقبل فقط من مجموعة أمان سيرفرات التطبيق، حتى لو تغيّرت عناوينها.
زوار الموقع :80 أنت من عنوانك :22 أي أحد ثاني :22 مجموعة الأمان سيرفر EC2 t3.micro
مجموعة الأمان تسمح بما حددته فقط: زوار الموقع على المنفذ 80 وأنت على المنفذ 22، وأي طلب ثاني يقف عندها.

المنافذ اللي بتقابلها كثير:

المنفذ الخدمة
22 SSH: الدخول على سيرفر لينكس
80 HTTP: مواقع بدون تشفير
443 HTTPS: مواقع مشفّرة
3389 RDP: الدخول على سيرفر ويندوز

User Data: سيرفر يجهّز نفسه

User Data سكربت تعطيه للسيرفر وقت التشغيل، ويتنفذ مرة وحدة أول ما يقلع وبصلاحيات الجذر. بدل ما تدخل وتثبّت كل شي بيدك، السيرفر يقوم جاهز. وهذا أساس التوسّع التلقائي اللي بنوصله لاحقاً.

عملي: شغّل سيرفر ويب

الحين بنشغّل سيرفر Amazon Linux يقوم وخادم الويب شغّال عليه.

  1. افتح خدمة EC2 واضغط Launch instance، وسمّه web-1.

  2. اختر صورة Amazon Linux 2023 ونوع t3.micro (أو النوع المتاح في الاستخدام المجاني عندك).

  3. أنشئ زوج مفاتيح ونزّله، إلا إذا بتدخل من المتصفح بـ EC2 Instance Connect.

  4. في Network settings اسمح بـ HTTP من أي مكان، وSSH من عنوانك فقط (My IP).

  5. في Advanced details، الصق هذا في خانة User data:

    Bash
    #!/bin/bash
    dnf install -y nginx
    echo "<h1>Hello from $(hostname)</h1>" > /usr/share/nginx/html/index.html
    systemctl enable --now nginx
  6. اضغط Launch instance، وانتظر لين تصير الحالة Running.

بعد دقيقة أو دقيقتين، انسخ Public IPv4 address وافتحه في المتصفح بـ http:// (مو https). لازم تشوف الصفحة واسم السيرفر. ولو حبيت تدخل عليه:

Bash
# صلاحيات الملف لازم تكون مقيدة، وإلا يرفض SSH المفتاح
chmod 400 ~/keys/my-key.pem

# المستخدم الافتراضي في Amazon Linux هو ec2-user
ssh -i ~/keys/my-key.pem ec2-user@عنوان_السيرفر

وإذا تبي شرح تفصيلي لخطوات الواجهة بالصور، راجع كيف تنشئ سيرفر على AWS.

عملي: أعطِ السيرفر دور IAM

في الجزء الثاني قلنا: للخدمات داخل AWS، استخدم دور مو مفاتيح. نطبّقها الحين.

  1. من IAM افتح Roles ثم Create role. اختر AWS service ثم EC2.
  2. اربط السياسة الجاهزة AmazonS3ReadOnlyAccess، وسمّ الدور web-s3-read.
  3. ارجع لـ EC2، اختر السيرفر، ثم Actions ثم Security ثم Modify IAM role، واختر الدور.

الحين داخل السيرفر، بدون ما تسوي aws configure وبدون أي مفتاح:

Bash
# يعرض هوية مؤقتة من نوع assumed-role، مو مستخدم
aws sts get-caller-identity

# يشتغل لأن الدور يسمح بقراءة S3
aws s3 ls

# يُرفض لأن الدور ما يسمح بهذا: أقل صلاحية على أرض الواقع
aws ec2 describe-instances --region eu-central-1

الأمر الأخير يرجع لك خطأ UnauthorizedOperation، وهذا هو المطلوب بالضبط: السيرفر يقدر يسوي اللي عطيته فقط.

الإيقاف أو الحذف؟

الحالة السيرفر القرص تدفع على
Running شغّال موجود المعالجة والتخزين
Stopped موقف موجود وبياناتك فيه التخزين فقط
Terminated محذوف نهائياً يُحذف قرص النظام افتراضياً لا شي

ولاحظ إن عنوان IP العام يتغيّر كل ما توقف السيرفر وتشغّله. بنشوف الحل في الجزء الجاي.

الخلاصة

  • السيرفر مكوّن من: صورة نظام (AMI)، ونوع، ومفاتيح، وشبكة، ومجموعة أمان، وتخزين، وUser Data.
  • اسم النوع يقول كل شي: العائلة والجيل والحجم. ابدأ صغير وكبّر حسب الأرقام.
  • مجموعات الأمان سماح فقط، وتتذكر الاتصال، وتقدر تشير لمجموعات ثانية.
  • Timeout يعني مجموعة الأمان غالباً، وConnection refused يعني التطبيق.
  • User Data يجهّز السيرفر تلقائياً، والدور يعطيه صلاحيات بدون مفاتيح.

اختبر نفسك

قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.

السؤال 1 من 5

شركة ناشئة تحوّل فيديوهات على سيرفر t3.large. الشغل يخلي المعالج قريب من 100% لساعات مع استخدام قليل للذاكرة، والفاتورة الشهرية فيها رسوم إضافية على CPU Credits. أي تغيير يناسب هذا الشغل أكثر؟

اعرض الجواب

الجواب الصحيح: C

عائلة t تشتغل على مستوى أساسي وتصرف رصيد عشان تتجاوزه، وهذا يناسب القمم العابرة، مو ساعات من الحمل الكامل. وتحويل الفيديو يحتاج معالج مستمر، وهذا غرض عائلة c.

  • A: t3 الأكبر لسا يعتمد على الرصيد، فيبقى غير مناسب.
  • B: الشغل يستخدم ذاكرة قليلة، فبتدفع على شي ما يحتاجه.
  • D: هذي العائلة للأقراص المحلية السريعة، والمشكلة هنا في المعالج.

للمراجعة: أنواع السيرفرات في هذا الجزء، وKey concepts for burstable instances في وثائق AWS.

السؤال 2 من 5

سيرفرات تطبيق تشتغل وتوقف طول اليوم، فعناوين IP حقها تتغير باستمرار. وسيرفر قاعدة بيانات لازم يقبل المنفذ 3306 من هذي السيرفرات فقط. أي إعداد يحتاج أقل شغل مستمر؟

اعرض الجواب

الجواب الصحيح: D

القاعدة تقدر تحدد Security Group كمصدر، وبعدها تشمل كل سيرفر في المجموعة، مهما كان عنوانه.

  • A: هذا يفتح القاعدة على الإنترنت كله.
  • B: ينفع، بس يضيف سكربت تصونه وممكن يفشل.
  • C: قواعد Security Group تسمح فقط، فما فيه قاعدة منع تضيفها.

للمراجعة: مجموعات الأمان في هذا الجزء، وSecurity group rules في وثائق AWS.

السؤال 3 من 5

شغّلت سيرفر ويب، وhttp://SERVER_ADDRESS يعطي Timeout في متصفحك. دخلت عبر SSH وتأكدت إن Nginx شغال وإن curl localhost يرجع الصفحة. وش السبب الأرجح؟

اعرض الجواب

الجواب الصحيح: A

الـ Timeout يعني الطلب ما وصل، والسيرفر نفسه يقدم الصفحة بدون مشكلة. فالمنع في الطريق للسيرفر، وSecurity Group أول مكان تشيك عليه.

  • B: أدوار IAM تتحكم في استدعاء خدمات AWS، مو في البيانات الداخلة للسيرفر.
  • C: زوج المفاتيح يخص SSH فقط، وSSH شغال.
  • D: Nginx شغال ويرجع الصفحة، يعني التجهيز نجح.

للمراجعة: مجموعات الأمان في هذا الجزء، وTroubleshoot connecting to your instance في وثائق AWS.

السؤال 4 من 5

مطور أوقف سيرفر، وعدّل User Data حقه عشان يثبت حزمة جديدة، ثم شغّله مرة ثانية. الحزمة ما انثبتت، وما فيه أخطاء. ليه؟

اعرض الجواب

الجواب الصحيح: B

السكربت يشتغل مرة وحدة في أول تشغيل. وبعدها يقدر المطور يثبت الحزمة مباشرة، أو يشغّل سيرفر جديد بالسكربت المحدث.

  • A: الدور يحدد وش يقدر يستدعي السيرفر، وما له علاقة بهذا.
  • C: الإيقاف ما يحذف User Data، ولهذا قدر يحفظ تعديله.
  • D: User Data ما يعتمد على نوع العنوان.

للمراجعة: User Data في هذا الجزء، وRun commands at launch with user data في وثائق AWS.

السؤال 5 من 5

سيرفر تطوير ينستخدم في ساعات الدوام فقط. يبي الفريق يقلل تكلفته بالليل، ويلقى ملفاته وإعداداته زي ما تركها الصبح. وش يسوي كل ليلة؟

اعرض الجواب

الجواب الصحيح: C

السيرفر الموقوف ما يتحاسب على الحوسبة، بس على أقراصه، وبياناته تبقى. بس عنوان IP العام العادي حقه بيتغير.

  • A: الحذف يمسح قرص النظام افتراضياً، فيضيع الشغل.
  • B: إعادة التشغيل تخلي السيرفر شغال ويتحاسب.
  • D: هذا يقلل التكلفة، بس تدفع طول الليل على سيرفر ما أحد يستخدمه.

للمراجعة: الإيقاف أو الحذف؟ في هذا الجزء، وInstance state changes في وثائق AWS.

في الجزء الرابع نشوف كيف تدفع أقل بكثير على نفس السيرفر، وكيف تتعامل مع عناوين IP والشبكة.