MODULE 11 - Serverless : AWS Lambda
نظرة عامة
هذا الوحدة تقدم السيرفرلس مع AWS Lambda. إنه نموذج مختلف حيث لا يوجد لديك خوادم لإدارتها - أنت فقط تكتب الكود الذي يتم تنفيذه عند الطلب.
التقييم الختامي
هذه الوحدة تتضمن التقييم 3 (25%) الذي يغطي Lambda والتحقق.
LocalStack يدعم Lambda!
خبر جيد: LocalStack يحاكي Lambda بشكل جيد. ستتمكن من ممارسة هذه الوحدة فعليًا!
أهداف التعلم
- فهم نموذج السيرفرلس
- مقارنة Lambda مقابل الآلات الافتراضية
- إنشاء ونشر وظائف Lambda
- تكوين أذونات IAM الدنيا
- تحليل سجلات CloudWatch
- اختبار والتحقق من الوظائف
محتوى الأسبوع
1. السيرفرلس مقابل VM
┌─────────────────────────────────────────────────────────────┐
│ SERVERLESS vs VM │
├─────────────────────────────────────────────────────────────┤
│ │
│ EC2 (VM) LAMBDA (Serverless) │
│ ──────── ──────────────────── │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Instance │ │ Function │ │
│ │ (24/7) │ │ (on demand) │ │
│ │ │ │ │ │
│ │ OS + Runtime │ │ Code only │ │
│ │ + Application │ │ │ │
│ │ │ │ Triggered by │ │
│ │ Always UP │ │ event │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ أنت تدير: أنت تدير: │
│ • OS • Code │
│ • Patching • Configuration │
│ • Scaling │
│ • Availability AWS يدير الباقي! │
│ │
│ الفوترة: الفوترة: │
│ • بالساعة • لكل تنفيذ │
│ • حتى في وضع الخمول • 0$ إن لم يُنفَّذ │
│ │
└─────────────────────────────────────────────────────────────┘
2. تشريح وظيفة Lambda
# Exemple Python
def handler(event, context):
"""
Handler = نقطة دخول الوظيفة
event = بيانات الإدخال (JSON)
context = معلومات وقت التشغيل (الوقت المتبقي، الذاكرة...)
"""
# منطقك هنا
name = event.get('name', 'World')
message = f"Hello, {name}!"
# العودة (التنسيق يعتمد على المشغل)
return {
'statusCode': 200,
'body': message
}
3. المشغلات (Triggers)
| Trigger | Description | Exemple |
|---|---|---|
| API Gateway | طلب HTTP | REST API |
| S3 | تحميل ملف | معالجة الصور |
| DynamoDB | تغيير البيانات | تزامن، إشعار |
| SQS | رسالة في قائمة | معالجة غير متزامنة |
| CloudWatch Events | جدولة | Cron job |
| SNS | إشعار | Fan-out |
4. حدود Lambda
| Limite | Valeur | Notes |
|---|---|---|
| Timeout max | 15 minutes | لكل تنفيذ |
| Mémoire | 128 MB - 10 GB | CPU متناسب |
| Package | 50 MB (zip) / 250 MB (décompressé) | كود + تبعيات |
| Concurrence | 1000 (par défaut) | لكل حساب/منطقة |
| /tmp storage | 512 MB - 10 GB | مؤقت |
مختبر عملي مع LocalStack
إنشاء وظيفة Lambda
# 1. إنشاء ملف الوظيفة
cat > lambda_function.py << 'EOF'
def handler(event, context):
name = event.get('name', 'World')
return {
'statusCode': 200,
'body': f'Hello, {name}!'
}
EOF
# 2. ضغط الملف
zip function.zip lambda_function.py
# 3. إنشاء الوظيفة على LocalStack
awslocal lambda create-function \
--function-name hello-function \
--runtime python3.9 \
--handler lambda_function.handler \
--zip-file fileb://function.zip \
--role arn:aws:iam::000000000000:role/lambda-role
# 4. استدعاء الوظيفة
awslocal lambda invoke \
--function-name hello-function \
--payload '{"name": "AWS Student"}' \
output.txt
# 5. عرض النتيجة
cat output.txt
اختبار مع API Gateway (LocalStack)
# إنشاء API REST
awslocal apigateway create-rest-api \
--name 'Hello API'
# قائمة APIs
awslocal apigateway get-rest-apis
التقييم 3 (25%)
الشكل
- مختبر عملي LocalStack (60%)
- أسئلة نظرية (40%)
المحتوى المغطى
- إنشاء وظائف Lambda
- الاستدعاء والاختبارات
- قراءة السجلات
- حالات استخدام السيرفرلس
- مقارنة مع EC2
التسليم
وظيفة Lambda موثقة + اختبارات:
- كود مصدر مع تعليقات
- لقطات شاشة للاستدعاء
- تحليل السجلات
- اقتراحات للتحسين
التنقل
- مفاهيم Lambda
- إنشاء الوظائف
- اختبار التحقق - 30 سؤال للتحقق من معرفتك
- مختبر: Lambda
الأسبوع التالي: MODULE 12 - استكشاف أخطاء Lambda