مقدمة: ما هو Serverless و AWS Lambda؟
\n\nServerless (الحوسبة بدون خادم) هو نموذج للحوسبة السحابية حيث يتجاهل المطور تمامًا إدارة البنية التحتية للخادم. أنت فقط تكتب الكود، وتحمله إلى السحابة، ويقوم المزود (AWS، Google Cloud، Azure) تلقائيًا بتشغيله استجابةً للأحداث، مع توسيع الموارد حسب الطلب. أنت تدفع فقط مقابل وقت التنفيذ الفعلي للكود (وعدد الطلبات).
\n\nAWS Lambda هي الخدمة الرائدة من Amazon Web Services في مجال serverless. تتيح لك تشغيل الكود بلغات متعددة، بما في ذلك JavaScript (Node.js)، دون الحاجة إلى تخصيص الخوادم وصيانتها. تعتبر Lambda مثالية لمعالجة طلبات HTTP (عبر API Gateway)، والمهام الخلفية، ومعالجة الملفات من S3، والتفاعل مع التغييرات في قاعدة بيانات DynamoDB، والعديد من السيناريوهات الأخرى.
\n\nفي هذه المقالة، سنشرح AWS Lambda بلغة JavaScript من الألف إلى الياء: من إنشاء أول دالة إلى نشرها ومراقبتها وتحسينها.
\n\nالجزء الرئيسي: إنشاء وإدارة دوال Lambda على Node.js
\n\n1. إنشاء أول دالة Lambda
\n\nانتقل إلى وحدة تحكم AWS Lambda واضغط على "إنشاء دالة". اختر خيار "من الصفر". حدد اسمًا (مثل my-first-lambda) واختر بيئة التشغيل Node.js 20.x (أو أحدث إصدار مستقر).
الهيكل الأساسي لدالة على Node.js يبدو كالتالي:
\n\nexports.handler = async (event, context) => {\n // event - البيانات التي تُمرر إلى الدالة (مثل طلب HTTP)\n // context - معلومات عن بيئة التشغيل (مثل معرف الطلب)\n\n console.log('تم استلام الحدث:', JSON.stringify(event, null, 2));\n\n // منطق عملك\n const response = {\n statusCode: 200,\n body: JSON.stringify({\n message: 'مرحبًا من Lambda!',\n input: event\n }),\n };\n\n return response; // AWS Lambda تتوقع إرجاع قيمة\n};\n\n\nفي هذا المثال البسيط، تستقبل الدالة حدثًا وتعيد استجابة بصيغة JSON. إذا تم استدعاء الدالة عبر API Gateway، فإن event سيحتوي على طريقة HTTP، والرؤوس، ونص الطلب، إلخ.
هام: استخدم دائمًا async/await للعمل مع العمليات غير المتزامنة (استعلامات قاعدة البيانات، API). إذا لم تكن الدالة غير متزامنة، فيجب أن تعيد Promise أو تستخدم callback.
2. المشغلات والتكاملات
\n\nتتجلى قوة Lambda من خلال المشغلات — الأحداث من خدمات AWS الأخرى التي تشغل الدالة الخاصة بك. دعنا نستعرض ثلاثة من أكثر الخيارات شيوعًا بلغة JavaScript.
\n\n2.1. طلبات HTTP عبر API Gateway
\nهذا هو السيناريو الأكثر شيوعًا لإنشاء REST API. تقوم بإرفاق مشغل API Gateway بـ Lambda. في هذه الحالة، سيحتوي event على هيكل طلب HTTP. مثال على المعالجة:
exports.handler = async (event) => {\n const httpMethod = event.httpMethod;\n const path = event.path;\n const queryParams = event.queryStringParameters || {};\n const body = event.body ? JSON.parse(event.body) : {};\n\n console.log(`الطريقة: ${httpMethod}, المسار: ${path}`);\n\n if (httpMethod === 'GET' && path === '/hello') {\n return {\n statusCode: 200,\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message: `مرحبًا، ${queryParams.name || 'العالم'}!` })\n };\n }\n\n return {\n statusCode: 404,\n body: JSON.stringify({ error: 'غير موجود' })\n };\n};\n\n\n2.2. معالجة الملفات من S3
\nيمكن لـ Lambda أن تُشغل تلقائيًا عند تحميل أو حذف الملفات في حاوية S3. هذا مثالي لإنشاء صور مصغرة، تحويل الفيديو، أو فهرسة البيانات.
\n\nconst AWS = require('aws-sdk');\nconst s3 = new AWS.S3();\n\nexports.handler = async (e