وظائف Serverless بلغة C#: دليل شامل لـ AWS Lambda مع .NET
أصبحت بنية Serverless معيارًا للتطبيقات الحديثة. AWS Lambda هي واحدة من أشهر الخدمات لتنفيذ الكود دون إدارة الخوادم. في هذه المقالة، سنشرح كيفية إنشاء وظائف serverless بلغة C# باستخدام .NET 6/8، وإعداد البيئة، وكتابة كود فعال، ونشره في السحابة.
ما هي AWS Lambda ولماذا C#؟
AWS Lambda هي خدمة حاسوبية تقوم بتشغيل الكود الخاص بك استجابةً للأحداث وتدير الموارد الحاسوبية تلقائيًا. C# مع .NET هو خيار ممتاز لـ Lambda بفضل:
- الأداء العالي — يوفر .NET 6+ بداية باردة سريعة (حوالي 200-500 مللي ثانية).
- بناء الجملة المألوف — إذا كنت تكتب بالفعل بلغة C#، فإن حاجز الدخول ضئيل.
- النظام البيئي الغني — جميع مكتبات NuGet متاحة.
- التكامل مع AWS — يتيح SDK لـ .NET العمل بسهولة مع S3 و DynamoDB و SQS والخدمات الأخرى.
وظائف Serverless بلغة C# مثالية لمعالجة الملفات، و REST API (عبر API Gateway)، وعمليات ETL، والخدمات المصغرة.
إعداد مشروع لـ AWS Lambda بلغة C#
للبدء، ستحتاج إلى:
- .NET SDK 6.0 أو أحدث
- حساب AWS
- AWS CLI (موصى به)
- أداة
dotnet lambda(يتم تثبيتها عبرdotnet tool install -g Amazon.Lambda.Tools)
لنقم بإنشاء مشروع جديد:
dotnet new lambda.EmptyFunction --name MyFirstLambdacd MyFirstLambdaيتضمن هيكل المشروع:
Function.cs— الملف الرئيسي بالمنطق.aws-lambda-tools-defaults.json— إعدادات النشر.MyFirstLambda.csproj— ملف المشروع مع الحزم الضرورية.
تأكد من وجود مراجع للحزم في .csproj:
<PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /><PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />كتابة أول وظيفة serverless بلغة C#
لنفتح Function.cs ونكتب معالجًا بسيطًا يستقبل اسمًا ويعيد تحية:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(Input input, ILambdaContext context) { context.Logger.LogInformation($"معالجة الطلب لـ: {input.Name}"); return $"مرحبًا، {input.Name}! الوقت: {DateTime.UtcNow}"; }}
public class Input{ public string Name { get; set; }}دعنا نشرح النقاط الرئيسية:
LambdaSerializer— يحدد كيفية تسلسل/إلغاء تسلسل JSON.SystemTextJsonهو خيار سريع وحديث.ILambdaContext— يوفر معلومات حول الاستدعاء الحالي: الوقت المتبقي، المسجل، معرف الطلب.Input— فئة POCO بسيطة لبيانات الإدخال.
للاختبار محليًا، استخدم:
dotnet lambda invoke-function MyFirstLambda --payload "{\\"Name\\": \\"العالم\\"}"العمل مع خدمات AWS من Lambda
تظهر القوة الحقيقية لوظائف serverless بلغة C# عند التكامل مع الخدمات الأخرى. لنلقِ نظرة على مثال لرفع ملف إلى S3:
using Amazon.S3;using Amazon.S3.Model;using Amazon.Lambda.Core;
public class S3Function{ private readonly IAmazonS3 _s3Client; public S3Function() { _s3Client = new AmazonS3Client(); // يستخدم دور IAM الخاص بـ Lambda }```