Go وServerless: كيفية كتابة دوال AWS Lambda التي يحسدك عليها مطورو Python

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

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

ابدأ الدورة

لماذا Go هو الملك الجديد لـ Serverless (ونقطة)؟

\n\n

عندما يتعلق الأمر ببنية serverless، يتبادر إلى ذهن معظم المطورين JavaScript (Node.js) أو Python. هذا منطقي: فهي بسيطة وشائعة، وقد كُتبت لها الكثير من الدروس التعليمية. لكن هناك مشكلة واحدة: البداية الباردة.

\n\n

تخيل: تقوم بتشغيل دالة Lambda بلغة Python. الطلب الأول بعد فترة خمول يُعالج في 3-5 ثوانٍ. المستخدم ينتظر. العمل يخسر المال. الآن تخيل نفس الدالة بلغة Go: 100-200 مللي ثانية. هل تشعر بالفرق؟

\n\n

Go (Golang) هي لغة تم إنشاؤها في أعماق Google لحل المشكلات التي تكون فيها الأداء والبساطة مهمين. في عالم serverless، تقدم ثلاث مزايا رئيسية:

\n
    \n
  • بداية باردة فورية — يتم تشغيل الملف الثنائي المترجم في أجزاء من الثانية.
  • \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
\n\n

الخطوة 1. إنشاء المشروع

\n

أنشئ دليلاً جديداً وقم بتهيئة الوحدة:

\n
mkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda
\n\n

الخطوة 2. كتابة الدالة الأولى

\n

أنشئ ملف main.go. إليك مثال بسيط لدالة serverless بلغة Go تعالج JSON وتعيد الرد:

\n
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.

\n\n

الخطوة 3. الترجمة لنظام Linux

\n

يعمل AWS Lambda على Linux، لذلك يجب بناء الملف الثنائي لهذا النظام:

\n
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
\n

لاحظ: يجب تسمية ملف الإخراج bootstrap — وهذا مطلب AWS Lambda لـ Go.

\n\n

الخطوة 4. التعبئة والتحميل

\n

قم بتعبئة الملف الثنائي في ZIP:

\n
zip function.zip bootstrap
\n

الآن قم بتحميله إلى AWS Lambda عبر وحدة التحكم أو CLI. تم! أول دالة serverless لك بلغة Go تعمل.

\n\n

مثال متقدم: العمل مع S3 وDynamoDB

\n

الآن بعد أن أتقنت الأساسيات، دعنا نكتب شيئاً مفيداً. لنفترض أننا بحاجة إلى معالجة تحميل الملفات إلى S3 وحفظ البيانات الوصفية في DynamoDB. هذا سيناريو كلاسيكي لـ serverless.

\n\n

قم بتثبيت حزم SDK اللازمة:

\n
go 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\

المدونات

توصيات الكتب