Serverless على TypeScript: الباك إند الخاص بك بدون خوادم (وبدون صداع)
مرحبًا، زميلي! إذا سبق لك أن قمت بإعداد VPS، أو حاربت مع nginx، أو راقبت حمل وحدة المعالجة المركزية، أو أعدت تشغيل PostgreSQL المتعطل في الثالثة صباحًا - فهذه المقالة لك. العالم يتجه نحو serverless (الحوسبة بدون خوادم)، و TypeScript هي اللغة المثالية للقفز إلى هذا القطار بأقصى سرعة.
دعنا نفهم ما هي دوال serverless، وكيفية كتابتها باستخدام TypeScript، وأي المنصات (AWS Lambda، Google Cloud Functions، Yandex Cloud Functions) تختار لمشروعك. مفاجأة: سيكون هناك كود، وستكون هناك أمثلة، ولكن لن تكون هناك خوادم.
ما هو Serverless؟ (مفاجأة: الخوادم لا تزال موجودة)
اسم «serverless» هو خدعة تسويقية. الخوادم موجودة بالطبع، لكنك لا تعرف عنها شيئًا ولا تريد أن تعرف. أنت فقط تكتب دالة (عادةً باستخدام TypeScript)، وتحميلها إلى السحابة، ويتم تنفيذها عند الطلب. أنت تدفع فقط مقابل وقت التنفيذ - لا مقابل خادم خامل، ولا مقابل التوسع.
يسمى هذا FaaS (الوظيفة كخدمة). المزايا الرئيسية:
- التوسع التلقائي - من 0 إلى 10000 طلب في الثانية في بضع ثوانٍ.
- توفير التكاليف - تدفع مقابل أجزاء من الثانية من التنفيذ، وليس مقابل استئجار جهاز.
- تقليل DevOps - السحابة تقوم بتحديث بيئة التشغيل وتصحيح الثغرات الأمنية بنفسها.
- TypeScript جاهز للاستخدام - جميع المزودين الكبار يدعمون Node.js، وبالتالي TypeScript.
ولكن هناك أيضًا عيوب: البداية الباردة (أجزاء من الثانية الأولى للتحميل)، وحدود وقت التنفيذ (عادةً 15 دقيقة)، وصعوبات في التصحيح.
كتابة أول دالة Serverless باستخدام TypeScript لـ AWS Lambda
AWS Lambda هو ملك serverless. لنبدأ به. قم بتثبيت aws-sdk و @types/aws-lambda لـ TypeScript.
npm init -ynpm install typescript @types/node aws-lambda --save-devnpx tsc --initأنشئ ملف handler.ts:
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => { const name = event.queryStringParameters?.name || 'ضيف'; return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: `مرحبًا، ${name}! هذه دالة serverless على TypeScript.`, timestamp: new Date().toISOString(), }), };};قم ببناء المشروع:
npx tsczip -r function.zip .قم بتحميل الأرشيف إلى AWS Lambda عبر لوحة التحكم، وحدد بيئة التشغيل Node.js 20.x، ونقطة الدخول handler.handler.
تم! الآن لديك API HTTP لا يتطلب خادمًا. يمكنك ربطه بـ API Gateway واستخدامه.
Google Cloud Functions: بديل TypeScript من Google
إذا كنت تفضل نظام Google البيئي (Firebase، BigQuery، GCP)، فإن Google Cloud Functions هو خيارك. بناء الجملة مشابه لـ AWS، ولكن هناك فروق دقيقة.
قم بتثبيت الأداة:
npm install -g @google-cloud/functions-frameworkأنشئ index.ts:
import { Request, Response } from 'express';
export const helloWorld = (req: Request, res: Response) => { const name = req.query.name || 'العالم'; res.json({ message: `مرحبًا، ${name}! هذه Google Cloud Functions على TypeScript.`, timestamp: new Date().toISOString(), });};للاختبار المحلي:
npx @google-cloud/functions-framework --target=helloWorldالنشر بأمر واحد:
gcloud functions deploy hello-world \ --runtime nodejs20 \ --trigger-http \ --allow-unauthenticated \ --entry-point hell