لماذا Go هو الملك الجديد لـ Serverless (ونقطة)؟
\n\nعندما يتعلق الأمر ببنية serverless، يتبادر إلى ذهن معظم المطورين JavaScript (Node.js) أو Python. هذا منطقي: فهي بسيطة وشائعة، وقد كُتبت لها الكثير من الدروس التعليمية. لكن هناك مشكلة واحدة: البداية الباردة.
\n\nتخيل: تقوم بتشغيل دالة Lambda بلغة Python. الطلب الأول بعد فترة خمول يُعالج في 3-5 ثوانٍ. المستخدم ينتظر. العمل يخسر المال. الآن تخيل نفس الدالة بلغة Go: 100-200 مللي ثانية. هل تشعر بالفرق؟
\n\nGo (Golang) هي لغة تم إنشاؤها في أعماق Google لحل المشكلات التي تكون فيها الأداء والبساطة مهمين. في عالم serverless، تقدم ثلاث مزايا رئيسية:
\n- \n
- بداية باردة فورية — يتم تشغيل الملف الثنائي المترجم في أجزاء من الثانية. \n
- استهلاك منخفض للذاكرة — تدفع أقل وتحصل على أكثر. \n
- ملف ثنائي واحد — لا تبعيات، فقط قم بالتحميل وانسَ الأمر. \n
في هذه المقالة، سنشرح كيفية كتابة دوال serverless بلغة Go لـ AWS Lambda، وسنستعرض أمثلة كود حقيقية ونقارنها بالبدائل. إذا كنت قد سئمت من انتظار "تسخين" دالة Python — مرحباً بك.
\n\nكيفية إعداد AWS Lambda بلغة Go: دليل خطوة بخطوة
\n\nقبل كتابة الكود، دعنا نفهم الأدوات اللازمة. للعمل مع Go على AWS Lambda ستحتاج إلى:
\n- \n
- تثبيت Go (الإصدار 1.21+). \n
- أداة
aws-cli(أو وحدة تحكم AWS). \n - فهم أساسي لماهية Handler. \n
الخطوة 1. إنشاء المشروع
\nأنشئ دليلاً جديداً وقم بتهيئة الوحدة:
\nmkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda\n\nالخطوة 2. كتابة الدالة الأولى
\nأنشئ ملف main.go. إليك مثال بسيط لدالة serverless بلغة Go تعالج JSON وتعيد الرد:
package main\n\nimport (\n "context"\n "fmt"\n\n "github.com/aws/aws-lambda-go/lambda"\n)\n\n// MyEvent — هيكل الحدث الوارد\ntype MyEvent struct {\n Name string `json:"name"`\n}\n\n// MyResponse — هيكل الرد\ntype MyResponse struct {\n Message string `json:"message"`\n Status int `json:"status"`\n}\n\n// HandleRequest — المعالج الرئيسي لـ Lambda\nfunc HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {\n if event.Name == "" {\n return MyResponse{Message: "مرحباً، أيها المجهول!", Status: 200}, nil\n }\n return MyResponse{\n Message: fmt.Sprintf("مرحباً، %s! مرحباً بك في serverless مع Go.", event.Name),\n Status: 200,\n }, nil\n}\n\nfunc main() {\n lambda.Start(HandleRequest)\n}\n\nهام: يجب أن تستقبل الدالة context.Context وتعيد (T, error). هذا هو المعيار لـ Go Lambda.
الخطوة 3. الترجمة لنظام Linux
\nيعمل AWS Lambda على Linux، لذلك يجب بناء الملف الثنائي لهذا النظام:
\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\nلاحظ: يجب تسمية ملف الإخراج bootstrap — وهذا مطلب AWS Lambda لـ Go.
الخطوة 4. التعبئة والتحميل
\nقم بتعبئة الملف الثنائي في ZIP:
\nzip function.zip bootstrap\nالآن قم بتحميله إلى AWS Lambda عبر وحدة التحكم أو CLI. تم! أول دالة serverless لك بلغة Go تعمل.
\n\nمثال متقدم: العمل مع S3 وDynamoDB
\nالآن بعد أن أتقنت الأساسيات، دعنا نكتب شيئاً مفيداً. لنفترض أننا بحاجة إلى معالجة تحميل الملفات إلى S3 وحفظ البيانات الوصفية في DynamoDB. هذا سيناريو كلاسيكي لـ serverless.
\n\nقم بتثبيت حزم SDK اللازمة:
\ngo get github.com/aws/aws-lambda-go/events\ngo get github.com/aws/aws-sdk-go-v2/service/s3\ngo get github.com/aws/aws-sdk-go-v2/service/dynamodb\n\