وداعًا للخوادم! دليل شامل لبناء تطبيقات Serverless مع AWS Lambda و Node.js

استمع للبودكاست حوار شيق بين لمى وأبو عمر
0:00 / 0:00

مقدمة: يومٌ كدتُ أفقد فيه شعري بسبب سيرفر!

بتذكر مرة، كنت شغال على مشروع تجارة إلكترونية صغير، وكل شوي السيرفر يوقع! تخيل، نص الليل وأنا قاعد بعمل troubleshooting، بصلّي إنه الموقع يرجع يشتغل قبل ما الزباين يهربوا. وقتها، فكرت: “يا ريت في طريقة أريح من وجع الراس هذا كله!”. بعدين، اكتشفت الـ Serverless Functions، ومن يومها حياتي أسهل بكتير. 😉

في هالمقالة، رح آخدك في رحلة خطوة بخطوة، من الصفر، لتبني تطبيقات Serverless باستخدام AWS Lambda و Node.js. سواء كنت مبرمج مبتدئ أو محترف، رح تلاقي هون معلومات مفيدة وعملية.

ما هي الـ Serverless Functions؟ (وليش لازم تهتم!)

الـ Serverless Functions، ببساطة، هي دوال برمجية بتنفذها في السحابة بدون ما تهتم بإدارة الخوادم. يعني، أنت بس بتركز على الكود تبعك، و AWS (أو أي مزود خدمة سحابية ثاني) بيتولى كل شي ثاني: تشغيل الكود، وتوسيع نطاقه، وإدارة البنية التحتية.

ليش الـ Serverless أفضل من الخوادم التقليدية؟

  • توفير التكاليف: بتدفع بس لما الكود تبعك يشتغل. ما في تكاليف للخوادم الخاملة.
  • التوسع التلقائي: الـ Serverless بيتوسع تلقائيًا عشان يستوعب حركة المرور المتزايدة.
  • سرعة التطوير: بتقدر تركز على الكود تبعك بدل ما تضيع وقتك في إدارة الخوادم.
  • سهولة النشر: عملية النشر أبسط وأسرع بكثير من الخوادم التقليدية.

AWS Lambda و Node.js: ثنائي قوي!

AWS Lambda هي خدمة الـ Serverless Functions من Amazon Web Services (AWS). بتسمحلك تشغل الكود تبعك بدون ما تدير أي خوادم. Node.js، من ناحية ثانية، هي بيئة تشغيل JavaScript بتخليك تبني تطبيقات خلفية (Backend) بسرعة وسهولة. مع بعض، Lambda و Node.js بيشكلوا ثنائي قوي جدًا لبناء تطبيقات Serverless.

خطوات بناء أول Serverless Function مع AWS Lambda و Node.js

جاهز؟ يلا نبدأ!

1. تجهيز بيئة التطوير

أول شي، تأكد إنك مثبت Node.js و npm (Node Package Manager) على جهازك. إذا ما كانوا مثبتين، نزّلهم من الموقع الرسمي لـ Node.js.

2. إنشاء مشروع Node.js جديد

افتح الـ terminal أو الـ command prompt، وروح للمجلد اللي بدك تعمل فيه المشروع، وشغل الأمر التالي:


mkdir my-serverless-app
cd my-serverless-app
npm init -y

هذا الأمر بينشئ مجلد جديد اسمه `my-serverless-app`، وبدخلك عليه، وبينشئ ملف `package.json` بشكل تلقائي.

3. كتابة الـ Lambda Function

أنشئ ملف جديد اسمه `index.js`، وحط فيه الكود التالي:


exports.handler = async (event) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: 'مرحباً يا عالم من Serverless Functions!',
    }),
  };
  return response;
};

هذا الكود بسيط جدًا. هو عبارة عن دالة بتستقبل `event` كمدخل، وبترجع `response` عبارة عن كود حالة (statusCode) ورسالة (body). الـ `event` بيحتوي على معلومات عن الحدث اللي شغل الـ Lambda Function (مثلاً، طلب HTTP).

4. إنشاء حساب AWS وتكوين الـ IAM Role

إذا ما عندك حساب AWS، أنشئ واحد. بعدين، روح لـ IAM (Identity and Access Management) في الـ AWS Console، وأنشئ Role جديد. هذا الـ Role بيعطي الـ Lambda Function صلاحيات لتنفيذ الكود تبعك والوصول لموارد AWS الأخرى (إذا احتجت).

نصيحة: أعطي الـ Role أقل صلاحيات ممكنة (Least Privilege). يعني، بس الصلاحيات اللي الـ Lambda Function تبعك محتاجها.

5. نشر الـ Lambda Function

في طرق كتير لنشر الـ Lambda Function، منها استخدام الـ AWS Console، أو الـ AWS CLI (Command Line Interface)، أو أدوات مثل Serverless Framework. أنا بفضل Serverless Framework لأنه بسهل عملية النشر والإدارة.

لتستخدم Serverless Framework، أول شي، ثبته عالميًا باستخدام الأمر التالي:


npm install -g serverless

بعدين، أنشئ ملف اسمه `serverless.yml` في نفس المجلد تبع المشروع، وحط فيه الكود التالي:


service: my-serverless-app

provider:
  name: aws
  runtime: nodejs16.x
  region: your-aws-region # استبدل بـ المنطقة تبعك (مثلاً us-east-1)
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "logs:CreateLogGroup"
        - "logs:CreateLogStream"
        - "logs:PutLogEvents"
      Resource: "arn:aws:logs:your-aws-region:*:*" # استبدل بـ المنطقة تبعك

functions:
  hello:
    handler: index.handler
    events:
      - http:
          path: /hello
          method: get

هذا الملف بيحدد إعدادات الـ Lambda Function تبعك. غير `your-aws-region` بالمنطقة اللي بدك تنشر فيها الـ Lambda Function.

أخيرًا، شغل الأمر التالي لنشر الـ Lambda Function:


serverless deploy

بعد ما يخلص النشر، Serverless Framework رح يعرضلك الـ endpoint (URL) تبع الـ Lambda Function. افتح الـ URL في المتصفح، وشوف النتيجة!

6. اختبار الـ Lambda Function

بعد ما نشرت الـ Lambda Function، اختبرها. تقدر تختبرها عن طريق الـ AWS Console، أو عن طريق إرسال طلب HTTP للـ endpoint تبعها.

نصائح عملية من أبو عمر

  • استخدم Logging: استخدم الـ logging عشان تتبع أداء الـ Lambda Function تبعك وتصلح الأخطاء.
  • قسّم الـ Functions: قسّم الـ Lambda Functions تبعك لوظائف صغيرة ومنفصلة. هذا بيسهل عملية الصيانة والتطوير.
  • استخدم الـ Environment Variables: استخدم الـ environment variables عشان تخزن معلومات حساسة (مثلاً، كلمات المرور) بشكل آمن.
  • راقب الأداء: راقب أداء الـ Lambda Functions تبعك باستخدام AWS CloudWatch.

الخلاصة: مستقبل التطبيقات بين إيديك! 🎉

الـ Serverless Functions بتمثل مستقبل التطبيقات السحابية. بتوفرلك مرونة، وتوفير في التكاليف، وسرعة في التطوير. باستخدام AWS Lambda و Node.js، بتقدر تبني تطبيقات قوية ومرنة بدون ما تهتم بإدارة الخوادم.

نصيحة أخيرة: لا تخاف تجرب! الـ Serverless Functions ممكن تبدو معقدة في البداية، بس بمجرد ما تفهم الأساسيات، رح تكتشف إنها بسيطة جدًا وقوية جدًا. جرّب ابني مشروع صغير، وشوف كيف الـ Serverless ممكن يغير طريقة تفكيرك في تطوير التطبيقات.

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

نصائح برمجية

كانت إعادة المحاولة تدمر بياناتنا: كيف أنقذتنا ‘اللامتناهية’ (Idempotency) من جحيم العمليات المكررة؟

في ليلة لم أنم فيها، كانت أنظمتنا المالية تنهار بسبب عمليات دفع متكررة. أشارككم اليوم قصة كيف أنقذنا مفهوم "اللامتناهية" (Idempotency) من كارثة محققة، وكيف...

15 مايو، 2026 قراءة المزيد
​معمارية البرمجيات

كانت خدماتنا تتحدث في نفس الوقت: كيف أنقذتنا ‘المعمارية القائِمَة على الأحداث’ (EDA) من جحيم الاقتران المحكم؟

في ليلة إطلاق عصيبة، كادت خدماتنا المترابطة أن تُغرق المشروع بأكمله. أروي لكم كيف تحولنا من فوضى الاقتران المحكم إلى مرونة المعمارية القائمة على الأحداث...

15 مايو، 2026 قراءة المزيد
ذكاء اصطناعي

كانت نماذجنا تموت بصمت: كيف أنقذتنا ‘مراقبة تعلم الآلة’ (ML Monitoring) من كارثة التنبؤات الفاسدة؟

أشارككم قصة حقيقية من الميدان، حين كادت نماذج الذكاء الاصطناعي التي بنيناها بجهد أن تنهار بصمت. اكتشفوا معنا ما هي "مراقبة تعلم الآلة" (ML Monitoring)،...

15 مايو، 2026 قراءة المزيد
تجربة المستخدم والابداع البصري

نقرات المستخدمين كانت تذهب في الفراغ: كيف أنقذتنا ‘التفاعلات الدقيقة’ من جحيم التجربة الصامتة؟

أشارككم قصة حقيقية من قلب معركة تطوير أحد التطبيقات، وكيف أن تفاصيل صغيرة تُدعى "التفاعلات الدقيقة" (Microinteractions) حوّلت تجربة مستخدم صامتة ومحبطة إلى حوار ممتع...

15 مايو، 2026 قراءة المزيد
برمجة وقواعد بيانات

كانت استعلاماتنا تزحف كالسلحفاة: كيف أنقذنا ‘فهرس قاعدة البيانات’ من جحيم البحث الكامل في الجداول (Full Table Scan)؟

أشارككم قصة حقيقية عن يوم كادت فيه استعلاماتنا البطيئة أن تدمر مشروعًا بالكامل، وكيف كان "الفهرس" البسيط في قاعدة البيانات هو طوق النجاة. سنتعلم معًا...

15 مايو، 2026 قراءة المزيد
الشبكات والـ APIs

كانت خوادمنا تستجدي التحديثات: كيف أنقذتنا ‘خطافات الويب’ (Webhooks) من جحيم الاستطلاع المستمر (Polling)؟

بصفتي أبو عمر، أشارككم قصة حقيقية من معاناتنا مع استنزاف الموارد بسبب الاستطلاع المستمر (Polling). سأشرح كيف كانت خطافات الويب (Webhooks) هي طوق النجاة، مع...

15 مايو، 2026 قراءة المزيد
الحوسبة السحابية

كانت بيئاتنا تتغير كالحرباء: كيف أنقذتنا ‘البنية التحتية كشيفرة’ (IaC) من جحيم التكوين اليدوي؟

أروي لكم حكايتي كـ "أبو عمر"، مبرمج فلسطيني، مع الفوضى التي كنا نعيشها في إدارة الخوادم يدوياً. سأشارككم كيف كانت 'البنية التحتية كشيفرة' (IaC) وأداة...

15 مايو، 2026 قراءة المزيد
البودكاست