وظائف Serverless بلغة TypeScript: AWS Lambda من الصفر

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في دوال Serverless باستخدام TypeScript



الحوسبة بدون خادم (Serverless) تغير بشكل جذري طريقة تطوير ونشر التطبيقات. بدلاً من إدارة الخوادم، يركز المطورون حصرياً على كتابة الكود. AWS Lambda هي الخدمة الرائدة لإنشاء دوال serverless، و TypeScript يضيف إلى ذلك موثوقية الكتابة الثابتة (static typing).



في هذه المقالة، سنشرح بالتفصيل كيفية إنشاء وتكوين ونشر دالة serverless باستخدام TypeScript مع AWS Lambda. ستتعلم كيفية كتابة كود فعال، ومعالجة الأحداث، ودمج Lambda مع خدمات AWS الأخرى.



ما هي AWS Lambda ولماذا TypeScript؟



أساسيات AWS Lambda



AWS Lambda هي خدمة حوسبة تقوم بتشغيل الكود الخاص بك استجابةً للأحداث وتدير تلقائياً موارد الحوسبة. أنت تدفع فقط مقابل وقت التنفيذ الفعلي المستخدم (مقرباً إلى 1 مللي ثانية).



الميزات الرئيسية:

  • بنية موجهة بالأحداث — يتم تشغيل الدالة عند حدوث حدث (طلب HTTP، تحميل ملف إلى S3، تغيير في DynamoDB)
  • التوسع التلقائي — من طلب واحد إلى آلاف الطلبات في وقت واحد
  • دعم لغات متعددة — Node.js (TypeScript)، Python، Java، Go، .NET
  • حد مجاني — مليون طلب شهرياً (ضمن الطبقة المجانية Free Tier)


مزايا TypeScript لـ Lambda



TypeScript هو امتداد لـ JavaScript يضيف الكتابة الثابتة. بالنسبة لدوال serverless، يوفر هذا:

  • أخطاء أقل في وقت التشغيل — المترجم يكتشف عدم تطابق الأنواع قبل النشر
  • توثيق أفضل للكود — الأنواع تعمل كتوثيق ذاتي
  • دعم الميزات الحديثة — async/await، decorators، generics
  • التكامل مع AWS SDK — أنواع كاملة لجميع خدمات AWS


إنشاء وتكوين دالة Lambda باستخدام TypeScript



الخطوة 1: تهيئة المشروع



لنقم بإنشاء مشروع جديد وتثبيت التبعيات اللازمة:



mkdir my-lambda-functioncd my-lambda-functionnpm init -ynpm install --save-dev typescript @types/node aws-sdknpm install --save-dev @types/aws-lambda


الخطوة 2: تكوين TypeScript



قم بإنشاء ملف tsconfig.json:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "lib": ["ES2020"],    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "skipLibCheck": true,    "forceConsistentCasingInFileNames": true,    "resolveJsonModule": true,    "declaration": true  },  "include": ["src/**/*"],  "exclude": ["node_modules", "dist"]}


الخطوة 3: كتابة دالة Lambda



قم بإنشاء مجلد src وملف src/handler.ts:



import { Context, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';

interface UserData { userId: string; name: string; email: string;}

export const handler = async ( event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult> => { console.log('Event:', JSON.stringify(event, null, 2)); console.log('Context:', context);

try { // تحليل جسم الطلب const body: UserData = JSON.parse(event.body || '{}');

// التحقق من صحة البيانات if (!body.userId || !body.name || !body.email) { return { statusCode: 400, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify({ message: 'Missing required fields: userId, name, email' }) }; }

المدونات

توصيات الكتب