مقدمة في وظائف Serverless بلغة TypeScript مع AWS Lambda
\n\nأصبحت بنية Serverless معيارًا لتطوير السحابة الحديثة. تتيح AWS Lambda تشغيل الكود دون إدارة الخوادم، بينما يضيف TypeScript كتابة صارمة وسهولة في التطوير. في هذه المقالة، سنستعرض العملية بأكملها: من إنشاء أول وظيفة إلى النشر في الإنتاج. ستتعلم كيفية كتابة وظائف serverless فعالة بلغة TypeScript، والعمل مع المشغلات ومعالجة الأخطاء.
\n\nوظائف Serverless مثالية للخدمات المصغرة، ومعالجة الأحداث، وخطافات الويب، والمهام الخلفية. يجعل TypeScript الكود أكثر أمانًا وقابلية للتنبؤ، وهو أمر بالغ الأهمية لحلول الإنتاج.
\n\n1. إعداد البيئة لـ AWS Lambda بلغة TypeScript
\n\nقبل البدء، قم بتثبيت الأدوات اللازمة. ستحتاج إلى Node.js (الإصدار 18+) و npm و AWS CLI.
\n\n1.1. تثبيت التبعيات
\n\nnpm init -y\nnpm install -D typescript @types/node @aws-sdk/client-lambda\nnpm install aws-lambda @types/aws-lambda\n\n\n1.2. تكوين TypeScript
\n\nأنشئ ملف tsconfig.json مع إعدادات Lambda:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "lib": ["ES2020"],\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true,\n "declaration": true,\n "declarationMap": true,\n "sourceMap": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\n\n1.3. تثبيت AWS CLI
\n\nقم بتنزيل وتكوين AWS CLI من المصدر الرسمي. بعد التثبيت، نفذ:
\n\naws configure\n\n\nأدخل Access Key ID و Secret Access Key والمنطقة (مثل us-east-1) وتنسيق الإخراج (json).
2. إنشاء أول وظيفة serverless بلغة TypeScript
\n\nيجب أن يبدو هيكل المشروع كالتالي:
\n\nmy-lambda-project/\n├── src/\n│ └── handler.ts\n├── dist/\n├── tsconfig.json\n├── package.json\n└── .gitignore\n\n\n2.1. معالج Lambda الأساسي
\n\nأنشئ ملف src/handler.ts مع وظيفة بسيطة:
import { Context, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';\n\ninterface HelloResponse {\n message: string;\n timestamp: string;\n eventType: string;\n}\n\nexport const handler = async (\n event: APIGatewayProxyEvent,\n context: Context\n): Promise<APIGatewayProxyResult> => {\n console.log('Event:', JSON.stringify(event, null, 2));\n console.log('Context:', context);\n\n const response: HelloResponse = {\n message: 'Hello from AWS Lambda with TypeScript!',\n timestamp: new Date().toISOString(),\n eventType: event.httpMethod || 'UNKNOWN'\n };\n\n return {\n statusCode: 200,\n headers: {\n 'Content-Type': 'application/json',\n 'Access-Control-Allow-Origin': '*'\n },\n body: JSON.stringify(response)\n };\n};\n\n\n2.2. ترجمة TypeScript
\n\nأضف البرامج النصية في package.json:
"scripts": {\n "build": "tsc",\n "watch": "tsc --watch",\n "clean": "rm -rf dist"\n}\n\n\nنفذ عملية البناء:
\n\nnpm run build\n\n\nتحقق من ظهور ملف handler.js في مجلد dist.
3. نشر وظيفة Lambda على AWS
\n\nهناك عدة طرق للنشر. سننظر في أبسطها - عبر AWS CLI.
\n\n3.1. حزم الوظيفة
\n\nأنشئ أرشيف ZIP مع الكود:
\n\ncd dist\nzip -r ../function.zip .\ncd ..\n\n\n3.2. إنشاء وظيفة Lambda
\n\nنفذ أمر AWS CLI:
\n\naws lambda create-function \\\n --function-name hello-typescript \\\n --runtime nodejs18.x \\\n --role arn:aws:iam::Y