وظائف Serverless بلغة C#: AWS Lambda من الألف إلى الياء - دليل شامل

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر Serverless و C# ثنائيًا مثاليًا

\n

بنية Serverless (أو الحوسبة بدون خادم) هي نموذج تقوم فيه بكتابة الكود دون القلق بشأن إدارة الخوادم. AWS Lambda هي واحدة من أشهر الخدمات لتشغيل هذا النوع من الكود. وبالاقتران مع C# (.NET)، تحصل على أداة قوية وآمنة من حيث الأنواع وعالية الأداء لإنشاء الخدمات المصغرة ومعالجات API والمهام الخلفية.

\n

في هذه المقالة، سنستعرض المسار بأكمله: من إعداد البيئة إلى النشر والمراقبة لأول دالة بلغة C# في AWS Lambda. المحتوى مناسب لكل من المبتدئين والمطورين ذوي الخبرة الذين يرغبون في تنظيم معرفتهم.

\n\n

1. إعداد البيئة وإنشاء المشروع

\n

1.1 تثبيت الأدوات

\n

للعمل مع C# و AWS Lambda، ستحتاج إلى:

\n
    \n
  • .NET SDK (8.0 أو 6.0) — قم بتنزيله من dotnet.microsoft.com;
  • \n
  • AWS CLI — لإدارة الموارد من خلال الطرفية;
  • \n
  • Amazon.Lambda.Tools — أداة .NET عالمية للنشر.
  • \n
\n

قم بتثبيت Lambda Tools بأمر واحد:

\n
dotnet tool install -g Amazon.Lambda.Tools
\n\n

1.2 إنشاء قالب الدالة

\n

استخدم القالب المدمج للبدء السريع:

\n
dotnet new lambda.EmptyFunction --name MyFirstLambda --profile default --region us-east-1
\n

سينشئ هذا الأمر مشروعًا بملف Function.cs وملف aws-lambda-tools-defaults.json لإعدادات النشر.

\n\n

2. كتابة كود دالة Serverless بلغة C#

\n

2.1 الهيكل الأساسي لدالة Lambda

\n

كل دالة Lambda هي طريقة تستقبل كائن الحدث وسياق التنفيذ. لنلقِ نظرة على أبسط مثال:

\n
using Amazon.Lambda.Core;\nusing Amazon.Lambda.SQSEvents;\n\n[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]\n\npublic class Function\n{\n    public async Task<string> FunctionHandler(SQSEvent evnt, ILambdaContext context)\n    {\n        context.Logger.LogInformation("تم استلام رسائل: " + evnt.Records.Count);\n        \n        foreach (var record in evnt.Records)\n        {\n            await ProcessMessageAsync(record.Body, context);\n        }\n        \n        return "تمت معالجة " + evnt.Records.Count + " رسالة";\n    }\n\n    private async Task ProcessMessageAsync(string messageBody, ILambdaContext context)\n    {\n        context.Logger.LogInformation("جارٍ المعالجة: " + messageBody);\n        await Task.Delay(100); // محاكاة العمل\n    }\n}
\n

لاحظ السمة LambdaSerializer — فهي تحدد كيفية تسلسل/إلغاء تسلسل JSON. بالنسبة لـ C#، يُوصى باستخدام SystemTextJson.

\n\n

2.2 العمل مع المشغلات المختلفة

\n

يدعم AWS Lambda العديد من مصادر الأحداث. إليك مثال لطلب HTTP عبر API Gateway:

\n
public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)\n{\n    var name = request.QueryStringParameters?.ContainsKey("name") == true \n        ? request.QueryStringParameters["name"] \n        : "العالم";\n    \n    var responseBody = $"مرحبًا، {name}!";\n    \n    return new APIGatewayProxyResponse\n    {\n        StatusCode = 200,\n        Body = responseBody,\n        Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }\n    };\n}
\n

للعمل مع HTTP، ستحتاج إلى تثبيت الحزمة Amazon.Lambda.APIGatewayEvents.

\n\n

3. النشر واختبار الدالة

\n

3.1 الاختبار المحلي

\n

قبل النشر، تحقق من الكود محليًا باستخدام dotnet lambda invoke:

\n
dotnet lambda invoke --payload "{\\"Records\                

المدونات

توصيات الكتب