Lambda@Edge والأنماط المستندة إلى الأحداث
شغّلوا الوظائف في مواقع الحافة التابعة لـCloudFront، ووصلوا Lambda بـSQS وSNS وDynamoDB Streams وKinesis لبناء معماريات مستندة إلى الأحداث.
Lambda@Edge والأنماط المستندة إلى الأحداث درس مجاني في AWS Solutions Architect على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AWS Solutions Architect، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.
ما هي Lambda@Edge؟
تتيح لك Lambda@Edge تشغيل دوال Lambda في مواقع CloudFront الطرفية حول العالم، أي بالقرب من المستخدمين النهائيين، بدلًا من تشغيلها في Region مركزية. ويتيح لك ذلك تخصيص طلبات HTTP واستجاباته مع زمن وصول إضافي أقل من ميلي ثانية على مستوى CDN. تُنشر دوال Lambda@Edge عالميًا وتُستدعى عند كل حدث إصابة أو إخفاق في ذاكرة التخزين المؤقت لـ CloudFront، مما يجعلها مثالية لمهام معالجة الطلبات الخفيفة.
نقاط التشغيل الأربع في CloudFront
يمكن لـ Lambda@Edge اعتراض حركة المرور في أربع نقاط من دورة حياة طلب CloudFront:
- Viewer Request: يُشغَّل عندما تتلقى CloudFront طلبًا من العارض (المستخدم)، قبل التحقق من ذاكرة التخزين المؤقت
- Origin Request: يُشغَّل عندما تمرّر CloudFront إخفاقًا في ذاكرة التخزين المؤقت إلى المصدر
- Origin Response: يُشغَّل عندما يعيد المصدر استجابة، وقبل تخزينها مؤقتًا
- Viewer Response: يُشغَّل قبل أن تعيد CloudFront الاستجابة إلى العارض
قيود Lambda@Edge مقارنةً بـ Lambda العادية
تفرض Lambda@Edge قيودًا أشد من Lambda العادية: حد أقصى يبلغ 128 MB من الذاكرة (لأحداث العارض)، و1 GB (لأحداث المصدر)، ومهلة قصوى تبلغ 5 ثوانٍ (لأحداث العارض)، و30 ثانية (لأحداث المصدر). يجب إنشاء الدوال في us-east-1 ونشرها إلى المواقع الطرفية عبر CloudFront. ولا يتوفر دعم VPC أو متغيرات البيئة أو طبقات Lambda. وتعني هذه القيود أن Lambda@Edge مصممة للتحويلات الخفيفة، لا للمعالجة الثقيلة.
حالات الاستخدام الشائعة لـ Lambda@Edge
تتألق Lambda@Edge في حالات مثل: اختبار A/B (إعادة كتابة عناوين URL إلى مسارات مصدر مختلفة استنادًا إلى ملفات تعريف الارتباط)، والمصادقة (التحقق من JWTs عند الحافة قبل تمرير الطلب إلى المصدر)، ومعالجة ترويسات HTTP (إضافة ترويسات أمان مثل HSTS وCSP وX-Frame-Options)، وتوحيد عناوين URL (إعادة التوجيه من www إلى النطاق الذي لا يستخدم www أو فرض الشرطات المائلة الختامية)، والتخصيص (تقديم محتوى مختلف استنادًا إلى بلد العارض من الترويسة CloudFront-Viewer-Country).
// Viewer Request: Add security headers
exports.handler = async (event) => {
const response = event.Records[0].cf.response;
response.headers['strict-transport-security'] = [{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubdomains; preload'
}];
response.headers['x-frame-options'] = [{
key: 'X-Frame-Options',
value: 'DENY'
}];
return response;
};CloudFront Functions مقابل Lambda@Edge
إن CloudFront Functions دوال JavaScript فائقة الخفة تعمل فقط في مرحلتي طلب العارض واستجابته، مع حد أقصى لزمن التنفيذ يبلغ 2 ms وتكلفة أقل بكثير. وفي حالات الاستخدام البسيطة (إعادة كتابة عناوين URL، ومعالجة الترويسات، وتوحيد مفتاح التخزين المؤقت)، يُفضَّل استخدام CloudFront Functions على Lambda@Edge لأنها أسرع وأقل تكلفة. استخدم Lambda@Edge عندما تحتاج إلى الوصول إلى استدعاءات الشبكة أو حمولات أكبر أو نقاط تشغيل طلب المصدر واستجابته.
البنية المعتمدة على الأحداث باستخدام Lambda
تربط البنية المعتمدة على الأحداث الخدمات عبر الأحداث، وهي رسائل تمثل أمرًا حدث بالفعل. في AWS، تُعد Lambda المستهلك الأساسي للأحداث؛ إذ تتلقى الأحداث من SQS وSNS وDynamoDB Streams وKinesis وS3 وEventBridge وغيرها. ويؤدي كل حدث إلى تنفيذ Lambda، مما يسمح للأنظمة بالاستجابة بشكل غير متزامن ومستقل ومن دون اقتران وثيق. يتيح هذا النمط الاقتران غير المحكم والتوسّع المستقل وعزل الأعطال.
Lambda كمستهلك لـ SQS
يمكن إعداد Lambda باعتبارها تعيين مصدر أحداث لـ SQS. تستطلع Lambda قائمة الانتظار، وتسترد ما يصل إلى حجم دفعة من الرسائل (حتى 10,000 لقوائم الانتظار القياسية و10 لقوائم FIFO)، وتستدعي الدالة مرة واحدة لكل دفعة. إذا فشلت الدالة، تُعاد الدفعة بأكملها إلى قائمة الانتظار. اضبط نافذة الدفعة للانتظار ريثما تصل رسائل إضافية قبل الاستدعاء، مما يحسّن معدل المعالجة. واستخدم DLQ في قائمة انتظار SQS المصدر للرسائل التي تفشل بشكل متكرر.
aws lambda create-event-source-mapping \
--function-name 'OrderProcessor' \
--event-source-arn 'arn:aws:sqs:us-east-1:123456789012:OrderQueue' \
--batch-size 10 \
--maximum-batching-window-in-seconds 5Lambda مع DynamoDB Streams
تلتقط DynamoDB Streams كل تغيير على مستوى العنصر (INSERT وMODIFY وREMOVE) باعتباره تسلسلًا مرتبًا من الأحداث. وتقرأ Lambda من الدفق باستخدام تعيين مصدر أحداث مع TRIM_HORIZON (البدء من الأقدم) أو LATEST (البدء من الأحدث). وتعالج Lambda السجلات بالترتيب ضمن القسم. وتمنع الدفعات الفاشلة مواصلة معالجة القسم نفسه إلى أن تُحل المشكلة؛ لذا استخدم bisect on error لتقسيم الدفعات الفاشلة وعزل السجلات المتسببة في المشكلة.
aws lambda create-event-source-mapping \
--function-name 'StreamProcessor' \
--event-source-arn 'arn:aws:dynamodb:us-east-1:123456789012:table/Orders/stream/...' \
--starting-position TRIM_HORIZON \
--batch-size 100 \
--bisect-batch-on-function-errorLambda مع Kinesis Data Streams
تعالج Lambda سجلات Kinesis بطريقة مشابهة لـ DynamoDB Streams، أي تنفيذًا متزامنًا واحدًا لكل جزء. وتشمل خيارات الإعداد الرئيسية عامل التوازي (حتى 10 استدعاءات Lambda متزامنة لكل جزء، مع معالجة الدفعات الفرعية بالتوازي) والتوزيع المحسّن (إنتاجية مخصصة تبلغ 2 MB/s لكل جزء لمستهلك Lambda). وتزيد هذه الخيارات معدل المعالجة بدرجة كبيرة للدفقات ذات الحجم المرتفع من دون زيادة عدد الأجزاء.
EventBridge كموجّه للأحداث
يُعد Amazon EventBridge ناقل الأحداث الموصى به لربط خدمات AWS والتطبيقات المخصّصة. تتدفق الأحداث إلى ناقل، ثم تعمل القواعد على تصفية الأحداث حسب النمط وتوجيهها إلى أهداف تشمل Lambda وSQS وStep Functions وغيرها. ويفصل EventBridge بين منتجي الأحداث ومستهلكيها فصلًا تامًا، فلا يعرف أيٌّ منهما الآخر. يستقبل ناقل الأحداث الافتراضي الأحداث من خدمات AWS؛ أما أحداث تطبيقك، فأنشئ لها ناقل أحداث مخصّص.
aws events put-rule \
--name 'OrderPlacedRule' \
--event-pattern '{"source": ["com.myapp.orders"], "detail-type": ["OrderPlaced"]}' \
--state ENABLED
aws events put-targets \
--rule 'OrderPlacedRule' \
--targets 'Id=LambdaTarget,Arn=arn:aws:lambda:us-east-1:123456789012:function:InventoryUpdater'نمط التوزيع المتعدد: من SNS إلى عدة دوال Lambda
من الأنماط الشائعة المعتمدة على الأحداث التوزيع المتعدد: يؤدي حدث واحد إلى تشغيل مسارات معالجة متعددة بالتوازي. انشر الحدث في موضوع SNS، وستستجيب اشتراكات متعددة لدوال Lambda كلٌّ على نحو مستقل. فعلى سبيل المثال، يمكن أن يوزّع حدث إتمام طلب إلى: دالة ترسل رسالة تأكيد بالبريد الإلكتروني، ودالة تحدّث المخزون، ودالة تُخطر المستودع. ويعمل كل مستهلك بشكل مستقل ويتوسّع منفردًا، ولا يستطيع مستهلك واحد منع الآخرين.
تحقّق سريعًا
اختبر مدى فهمك لمفاهيم AWS Solutions Architect (SAA-C03) الواردة في هذا الدرس.
مراجعة الدرس
تعلّمت في هذا الدرس أن Lambda@Edge تشغّل الدوال في مواقع CloudFront الطرفية عبر أربع نقاط تشغيل (طلب العارض واستجابته، وطلب المصدر واستجابته) لمهام مثل المصادقة وإعادة كتابة عناوين URL ومعالجة الترويسات، وأن CloudFront Functions بديل أقل تكلفة وزمن وصول للتحويلات البسيطة في مرحلة العارض، وأن الأنماط المعتمدة على الأحداث باستخدام SQS وDynamoDB Streams وKinesis وEventBridge والتوزيع المتعدد عبر SNS تتيح بنيات ذات اقتران محكم منخفض، تستجيب فيها Lambda للأحداث الفورية. بعد ذلك سنستكشف قوائم انتظار SQS Standard مقابل FIFO.
الأسئلة الشائعة
هل درس «Lambda@Edge والأنماط المستندة إلى الأحداث» مجاني؟
نعم — نص درس «Lambda@Edge والأنماط المستندة إلى الأحداث» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AWS Solutions Architect، انتقل إلى CoddyKit PRO. تتضمن دورة AWS Solutions Architect 4 دروس في المجموع.
ماذا ستتعلم في «Lambda@Edge والأنماط المستندة إلى الأحداث»؟
شغّلوا الوظائف في مواقع الحافة التابعة لـCloudFront، ووصلوا Lambda بـSQS وSNS وDynamoDB Streams وKinesis لبناء معماريات مستندة إلى الأحداث. تتمرن على AWS Solutions Architect مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AWS Solutions Architect؟
لا تُشترط خبرة سابقة. AWS Solutions Architect على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «Lambda@Edge والأنماط المستندة إلى الأحداث»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AWS Solutions Architect هذا؟
نعم. كل درس في AWS Solutions Architect يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- وظائف Lambda: أوقات التشغيل والمشغلات والمعالجات
- التزامن والتقييد والتزامن المحجوز
- طبقات Lambda وحزم النشر
- Lambda@Edge والأنماط المستندة إلى الأحداث