مقدمة في Serverless و AWS Lambda بلغة C#
بنية Serverless (الحوسبة بدون خادم) هي نموذج تطوير يركز فيه المطور حصريًا على كود منطق الأعمال، بينتما يدير مزود السحابة البنية التحتية (الخوادم، التوسع، المراقبة). AWS Lambda هي واحدة من أشهر الخدمات لتنفيذ وظائف serverless، وهي تدعم نظام .NET بشكل ممتاز.
في هذه المقالة، سنناقش دورة العمل الكاملة مع AWS Lambda بلغة C#: من إنشاء المشروع إلى النشر والتصحيح. ستتعلم كيفية إعداد البيئة، كتابة وظيفة فعالة، معالجة الأحداث وتجنب الأخطاء الشائعة. المحتوى موجه لمطوري C# الذين يرغبون في إتقان نهج serverless في Amazon Web Services.
1. إعداد البيئة وإنشاء أول مشروع
تثبيت الأدوات
للعمل مع AWS Lambda بلغة C# ستحتاج إلى:
- .NET SDK الإصدار 6.0 أو 8.0 (يوصى باستخدام أحدث إصدار LTS).
- AWS CLI — واجهة سطر الأوامر لإدارة خدمات AWS.
- Amazon.Lambda.Templates — مجموعة قوالب لـ .NET CLI.
- Docker Desktop (اختياري) — للاختبار المحلي مع محاكاة Lambda.
قم بتثبيت قوالب Lambda عبر الطرفية:
dotnet new -i Amazon.Lambda.Templatesإنشاء المشروع
أنشئ دالة Lambda جديدة باستخدام الأمر:
dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambdaيتضمن هيكل المشروع ملف Function.cs مع الفئة الأساسية Function وطريقة المعالج. افتراضيًا، يتم استخدام قالب لدالة بسيطة تستقبل سلسلة نصية وتعيد سلسلة نصية.
افتح Function.cs وقم بتعديله كالتالي:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(string input, ILambdaContext context) { context.Logger.LogInformation($"تم استلام الإدخال: {input}"); return $"مرحبًا، {input}! تم تنفيذ وظيفتك بنجاح."; }}الاختبار المحلي
لتشغيل الدالة محليًا، استخدم الأداة dotnet lambda invoke أو محاكي Lambda Runtime Interface Emulator (RIE) في Docker. مثال باستخدام RIE:
docker run --rm -v "$PWD/bin/Release/net8.0/publish":/var/task:ro,delegated \ -p 9000:8080 \ public.ecr.aws/lambda/dotnet8:latest \ MyFirstLambda::MyFirstLambda.Function::FunctionHandlerأرسل طلب اختبار عبر curl:
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -d '"العالم"'2. معالجة أنواع مختلفة من الأحداث
العمل مع API Gateway (طلبات HTTP)
غالبًا ما تُستخدم Lambda كخلفية لـ REST API عبر Amazon API Gateway. في هذه الحالة، يستقبل المعالج كائن APIGatewayProxyRequest ويعيد APIGatewayProxyResponse.
قم بتثبيت حزمة NuGet:
dotnet add package Amazon.Lambda.APIGatewayEventsمثال لدالة معالج لطلب HTTP POST:
using Amazon.Lambda.APIGatewayEvents;using System.Text.Json;
public class Function{ public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { context.Logger.LogInformation($"تم استلام الطلب: {request.HttpMethod} {request.Path}");
// تحليل جسم الطلب var body = JsonSerializer.Deserialize<Dictionary<string, string>>(request.Body); var name = body?.GetValueOrDefault("name") ?? "ضيف";
//