Serverless على C#: AWS Lambda، Azure Functions ومستقبل التطوير بدون خادم

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

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

ابدأ الدورة

لماذا Serverless ليس مجرد ضجة، بل إنقاذ لمحفظتك وأعصابك

\n\n

تخيل: لقد كتبت API رائع بلغة C#، وقمت بتشغيله على جهاز افتراضي، وهو معطل 23 ساعة يوميًا. أنت تدفع ثمن الهواء. مألوف؟ إذا كان الأمر كذلك، فإن دوال serverless بلغة C# هي طوق النجاة لك. الحوسبة بدون خادم (أو Function-as-a-Service) تسمح لك بتنفيذ الكود فقط عندما يكون مطلوبًا حقًا. لا استئجار خوادم، لا إعداد يدوي لـ CI/CD للبنية التحتية، لا صداع مع التوسع.

\n\n

في هذه المقالة، سنشرح كيفية كتابة دوال serverless بلغة C# لـ AWS Lambda و Azure Functions، وسنقارن بينهما، ونكتب كودًا حقيقيًا، ونفهم لماذا هذا هو الخيار الأفضل للخدمات المصغرة، ومعالجات الأحداث، والواجهة الخلفية لتطبيقات الهاتف المحمول. ونعم، سيكون هناك الكثير من الكود — بدون حشو.

\n\n

AWS Lambda و C#: كيف نجمع بين أداتين قويتين

\n\n

AWS Lambda C# هو على الأرجح الخيار الأكثر شيوعًا لمطوري .NET الذين يعملون مع Amazon Web Services. تدعم Lambda .NET Core 3.1، .NET 6، .NET 8 وحتى .NET 9 (تحقق من التحديثات وقت القراءة). الميزة الرئيسية هي أنك تكتب بلغة C# المألوفة، و AWS نفسها تهتم ببيئة التشغيل.

\n\n

إنشاء أول دالة Lambda بلغة C#

\n\n

للبدء، قم بتثبيت AWS Toolkit لـ Visual Studio أو استخدم .NET CLI. لننشئ مشروعًا باستخدام قالب "AWS Lambda Project".

\n\n
dotnet new lambda.EmptyFunction --name HelloWorldFunction\ncd HelloWorldFunction\ndotnet add package Amazon.Lambda.Core\ndotnet add package Amazon.Lambda.Serialization.SystemTextJson
\n\n

الآن لنكتب الدالة نفسها. مثال كلاسيكي — معالجة طلب API Gateway وإرجاع JSON.

\n\n
using Amazon.Lambda.Core;\nusing Amazon.Lambda.Serialization.SystemTextJson;\n\n[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]\n\npublic class Function\n{\n    public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest input, ILambdaContext context)\n    {\n        var message = $"مرحبًا بالعالم! طلبك: {input.Body ?? "فارغ"}";\n        context.Logger.LogInformation("تم استدعاء دالة Lambda");\n\n        return new APIGatewayProxyResponse\n        {\n            StatusCode = 200,\n            Body = JsonSerializer.Serialize(new { message, timestamp = DateTime.UtcNow }),\n            Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } }\n        };\n    }\n}
\n\n

لاحظ: الكود غير متزامن، يستخدم التسلسل المدمج لـ JSON والتسجيل. هذا هو الحد الأدنى من المنتج القابل للتطبيق والذي يمكنه العمل تحت الضغط.

\n\n

لماذا تتفوق AWS Lambda لـ C#؟

\n
    \n
  • Cold start: قامت AWS بتحسين تشغيل دوال .NET عبر SnapStart — الآن يستغرق البدء أقل من 200 مللي ثانية.
  • \n
  • التكامل: تعمل فورًا مع S3، DynamoDB، SQS، API Gateway.
  • \n
  • المراقبة: CloudWatch يجمع السجلات والمقاييس والأخطاء.
  • \n
\n\n

Azure Functions لـ C#: بديل جدير من Microsoft

\n\n

إذا كان مشروعك مرتبطًا بالفعل بنظام Microsoft البيئي (Azure DevOps، Active Directory، SQL Server)، فإن Azure Functions C# قد تكون أكثر ملاءمة. فهي تدعم ليس فقط العملية المعزولة (isolated process)، ولكن أيضًا النموذج داخل العملية.

\n\n

مثال لدالة بلغة C# لـ Azure

\n\n

لننشئ مشغل HTTP باستخدام Azure Functions Core Tools:

\n\n
func init MyFunctionApp --dotnet-isolated\ncd MyFunctionApp\nfunc new --name HttpExample --template "HTTP trigger"
\n\n

كود الدالة:

\n\n
using Microsoft.Azure.Functions.Worker;\nusing Microsoft.Extensions.Logging;\n\npublic class HttpExample\n{\n    private readonly ILogger<HttpExample> _logger;\n\n    public HttpExample(ILogger<HttpExample> logger)\n    {\n        _logger                

المدونات

توصيات الكتب