مقدمة إلى عالم Serverless و AWS Lambda
تتجه التطويرات السحابية الحديثة بشكل متزايد إلى بنية serverless (بدون خادم). على الرغم من الاسم، فإن الخوادم لم تختفِ - أنت فقط تتوقف عن التفكير فيها. AWS Lambda هي خدمة من Amazon تتيح تشغيل الكود دون تخصيص وإدارة الخوادم. أنت تدفع فقط مقابل وقت التنفيذ الفعلي وعدد الطلبات.
في هذه المقالة، سنشرح AWS Lambda بلغة JavaScript (Node.js) من الأساسيات إلى الأمثلة العملية. ستتعلم كيفية إنشاء الوظائف وتكوينها ونشرها، بالإضافة إلى التعرف على أفضل الممارسات.
أساسيات AWS Lambda لـ Node.js
ما هي وظيفة Lambda؟
وظيفة Lambda هي كتلة كود معزولة يتم تنفيذها استجابةً لحدث (مشغل). تستقبل الوظيفة event (بيانات الحدث) و context (معلومات عن بيئة التنفيذ) وتعيد النتيجة.
هيكل أبسط وظيفة Lambda
تبدو الوظيفة الأساسية بلغة Node.js كما يلي:
exports.handler = async (event, context) => { const name = event.queryStringParameters?.name || 'ضيف'; const response = { statusCode: 200, body: JSON.stringify({ message: `مرحبًا، ${name}!` }), }; return response;};- exports.handler — نقطة الدخول الإلزامية.
- event — يحتوي على البيانات المرسلة من المشغل (مثل طلب HTTP من API Gateway).
- context — يوفر طرقًا للعمل مع التنفيذ (الوقت، المسجل، المعرف).
- يجب أن تكون الوظيفة async أو تعيد Promise.
المشغلات (مصادر الاستدعاء)
Lambda لا توجد في فراغ. يمكن استدعاؤها بواسطة:
- API Gateway — طلبات HTTP (REST/WebSocket).
- S3 — رفع/حذف الملفات.
- DynamoDB Streams — التغييرات في قاعدة البيانات.
- SQS/SNS — قوائم انتظار الرسائل.
- CloudWatch Events — جدولة (cron).
إنشاء ونشر وظيفة Lambda
الخطوة 1: إعداد البيئة
ستحتاج إلى:
- حساب AWS.
- تثبيت AWS CLI وإعداد بيانات الاعتماد (credentials).
- Node.js (الإصدار 18 أو 20، الموصى به من AWS).
الخطوة 2: إنشاء الوظيفة عبر لوحة التحكم
هذه أسرع طريقة للمبتدئين:
- ادخل إلى AWS Management Console → Lambda.
- اضغط "إنشاء وظيفة" → "من الصفر".
- حدد اسمًا، واختر بيئة التشغيل Node.js 20.x.
- اضغط "إنشاء".
في محرر الكود، الصق مثالنا أعلاه واضغط "Deploy". تم!
الخطوة 3: النشر باستخدام AWS CLI
لأتمتة النشر، استخدم الأمر:
zip -r function.zip index.js node_modulesaws lambda update-function-code \ --function-name my-first-lambda \ --zip-file fileb://function.zipسيناريوهات متقدمة وأفضل الممارسات
العمل مع متغيرات البيئة
لا تخزن الأسرار في الكود أبدًا. استخدم process.env:
const dbPassword = process.env.DB_PASSWORD;const tableName = process.env.TABLE_NAME;يتم تعيين المتغيرات في إعدادات الوظيفة (Configuration → Environment variables).
معالجة الأخطاء والتسجيل
استخدم المسجل المدمج console.log - فهو يرسل السجلات تلقائيًا إلى CloudWatch:
exports.handler = async (event) => { console.log('تم استلام الحدث:', JSON.stringify(event, null, 2)); try { // الكود الخاص بك } catch (error) { console.error('خطأ:', error.message); throw e