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

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

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

ابدأ الدورة

دوال Serverless بلغة Go: AWS Lambda من الألف إلى الياء



أصبحت بنية Serverless المعيار الفعلي لإنشاء تطبيقات قابلة للتوسع وفعالة من حيث التكلفة في السحابة. AWS Lambda هي واحدة من أشهر الخدمات لتنفيذ الكود دون إدارة الخوادم. في هذه المقالة، سنشرح كيفية إنشاء وإعداد ونشر دوال Serverless بلغة Go (Golang) في AWS Lambda، من الأساسيات إلى التقنيات المتقدمة.



لماذا Go لـ AWS Lambda؟



Go هي اللغة المثالية لدوال Serverless. فهي تُترجم إلى ملف ثنائي واحد، ولها وقت بدء تشغيل بارد ضئيل (غالباً أقل من 100 مللي ثانية) واستهلاك منخفض للذاكرة. وهذا يجعلها واحدة من أسرع وأرخص الخيارات لـ Lambda.



  • بدء سريع: الملف الثنائي المُترجم يبدأ فوراً.
  • تكلفة منخفضة: استهلاك الموارد الأدنى يقلل فواتير السحابة.
  • سهولة النشر: ملف واحد - لا تبعيات على جانب الخادم.
  • تكامل ممتاز: دعم أصلي لـ AWS SDK لـ Go.


إعداد البيئة وأول معالج (Handler)



قبل كتابة الكود، تأكد من تثبيت ما يلي:

  • Go الإصدار 1.19+
  • أداة AWS CLI (مُهيأة بمفاتيح الوصول)
  • Make أو أي نظام بناء (اختياري)


أنشئ وحدة جديدة وقم بتثبيت الحزمة الرسمية لـ Lambda:



mkdir my-lambda-functioncd my-lambda-functiongo mod init my-lambda-functiongo get github.com/aws/aws-lambda-go/lambda


الآن لنكتب دالة بسيطة تُرجع تحية:



package main

import ( "context" "github.com/aws/aws-lambda-go/lambda")

type MyEvent struct { Name string `json:"name"`}

type MyResponse struct { Message string `json:"message"`}

func HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) { if event.Name == "" { event.Name = "ضيف" } return MyResponse{Message: "مرحباً، " + event.Name + "!"}, nil}

func main() { lambda.Start(HandleRequest)}


هذا الكود يستقبل JSON يحتوي على حقل name ويُعيد تحية مخصصة. لاحظ: يجب أن تكون الدالة مُصدرة (بحرف كبير)، وأن يكون التوقيع مطابقاً تماماً لتوقعات وقت التشغيل.



البناء والنشر على AWS Lambda



لإنشاء ملف ثنائي متوافق مع Linux (وهو ما تتوقعه Lambda)، استخدم الترجمة المتقاطعة:



GOOS=linux GOARCH=amd64 go build -o bootstrap main.gozip function.zip bootstrap


يجب أن يكون اسم الملف الناتج بالضرورة bootstrap - هذا هو شرط وقت تشغيل Go على AWS Lambda.



الآن لننشئ الدالة عبر AWS CLI:



aws lambda create-function \    --function-name my-go-function \    --runtime provided.al2023 \    --role arn:aws:iam::123456789012:role/lambda-execution-role \    --handler bootstrap \    --zip-file fileb://function.zip


لاحظ --runtime provided.al2023 - هذا هو وقت التشغيل الخاص لـ Go (استناداً إلى Amazon Linux 2023). إذا كان لديك إصدار قديم، استخدم provided.al2.



بعد الإنشاء، اختبر الدالة:



aws lambda invoke --function-name my-go-function \    --payload '{"name": "عالم"}' output.jsoncat output.json


يجب أن ترى: {"message":"مرحباً، عالم!"}



العمل مع أحداث AWS (S3, DynamoDB, API Gateway)



تتجلى القوة الحقيقية لـ Lambda عند التكامل مع خدمات AWS الأخرى. لنلقِ نظرة على مثال لمعالج أحداث من S3:



package main

import ( "context" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda")

func HandleS3Event(ctx context.Context, s3Event even

المدونات

توصيات الكتب