Serverless عند الـ Edge: تعمق في AWS Lambda@Edge

١٢ نوفمبر ٢٠٢٥

Serverless at the Edge: Deep Dive into AWS Lambda@Edge

ملخص

  • تسمح لك Lambda@Edge بتشغيل وظائف بدون خادم (serverless) بالقرب من مستخدميك من خلال التكامل مع Amazon CloudFront.
  • تمكنك من إجراء تخصيصات بزمن استجابة فائق الانخفاض مثل إعادة التوجيه، ومعالجة العناوين (headers)، والمصادقة عند طبقة CDN.
  • مثالية لعمليات التخصيص، واختبارات A/B، وتصفية الأمان دون الحاجة لإدارة البنية التحتية.
  • تدفع فقط مقابل وقت التنفيذ وعدد الطلبات — لا توجد خوادم تحتاج للتحجيم أو التحديث.
  • ومع ذلك، فإن تصحيح الأخطاء (debugging)، والبدايات الباردة (cold starts)، وقيود النشر الإقليمي تتطلب تصميماً دقيقاً.

ما ستتعلمه

  1. ما هي AWS Lambda@Edge وكيف تمد الحوسبة بدون خادم إلى الشبكة العالمية.
  2. كيف تختلف عن AWS Lambda القياسية.
  3. حالات الاستخدام الشائعة في العالم الحقيقي وأنماط البنية التحتية.
  4. كيفية نشر واختبار وظائف Lambda@Edge خطوة بخطوة.
  5. اعتبارات الأداء والأمان وقابلية المراقبة.
  6. متى تستخدم (ومتى لا تستخدم) Lambda@Edge.
  7. الأخطاء الشائعة، نصائح تصحيح الأخطاء، وأفضل الممارسات للإنتاج.

المتطلبات الأساسية

  • إلمام أساسي بـ AWS Lambda و CloudFront.
  • حساب AWS مع صلاحيات IAM لإنشاء وظائف Lambda وتوزيعات CloudFront.
  • بعض الخبرة في JavaScript (Node.js) أو Python لكتابة وظائف Lambda.

مقدمة: ما هي AWS Lambda@Edge؟

تعد AWS Lambda@Edge امتداداً لـ AWS Lambda تتيح لك تشغيل الكود في مواقع AWS الطرفية (edge locations) — وهي مراكز البيانات التي تشغل Amazon CloudFront، شبكة توصيل المحتوى العالمية (CDN) التابعة لـ AWS1.

بدلاً من تنفيذ الكود الخاص بك في منطقة واحدة، تقوم Lambda@Edge بنشر وظيفتك في مواقع طرفية متعددة حول العالم، وتقوم بنسخها تلقائياً حتى تتمكن من الاستجابة لطلبات المشاهدين بأقل زمن استجابة ممكن.

لماذا هي مهمة؟

تعمل الوظائف التقليدية بدون خادم (مثل AWS Lambda القياسية) في منطقة محددة. إذا كان مستخدموك موزعين عالمياً، يجب أن تنتقل الطلبات عبر القارات، مما يزيد من زمن الاستجابة. تحل Lambda@Edge هذه المشكلة عن طريق تنفيذ المنطق بالقرب من المستخدم، مما يؤدي إلى:

  • أوقات استجابة أسرع
  • زمن استجابة أقل للتخصيص أو إعادة التوجيه
  • تقليل الحمل على خوادم الأصل (origin servers)

كيف تعمل Lambda@Edge

تتكامل Lambda@Edge مباشرة مع Amazon CloudFront. تقوم بربط وظيفة بحدث توزيع CloudFront — على سبيل المثال، عند وصول طلب أو عند إرجاع استجابة.

أنواع الأحداث المدعومة

نوع الحدثالتوقيتحالة استخدام شائعة
Viewer Requestقبل أن يتحقق CloudFront من التخزين المؤقت (cache)المصادقة، إعادة التوجيه، حقن العناوين (headers)
Origin Requestقبل إرسال الطلب إلى الأصلإعادة كتابة الروابط، توجيه الأصل، معالجة الاستعلامات
Origin Responseبعد الاستجابة من الأصلتحويل الاستجابة، قرارات التخزين المؤقت
Viewer Responseقبل إرسال الاستجابة إلى المشاهدمعالجة العناوين، سياسة أمان المحتوى

يمنحك كل نوع حدث مستوى مختلفاً من التحكم في دورة حياة الطلب/الاستجابة.


نظرة عامة على البنية التحتية

إليك تدفق مبسط لكيفية ملاءمة Lambda@Edge في مسار طلب CloudFront:

flowchart TD
A[User Request] --> B[CloudFront Edge Location]
B -->|Viewer Request Trigger| C[Lambda@Edge Function]
C -->|Optional| D[CloudFront Cache]
D -->|Cache Miss| E[Origin Request Trigger]
E --> F[Origin Server]
F -->|Response| G[Origin Response Trigger]
G --> H[Viewer Response Trigger]
H --> I[User Receives Response]

تضمن هذه البنية تنفيذ المنطق المخصص الخاص بك في أقرب مكان ممكن من المستخدم.


البداية السريعة: ابدأ التشغيل في 5 دقائق

لنقم بنشر وظيفة Viewer Request بسيطة تقوم بتحويل HTTP إلى HTTPS.

الخطوة 1: إنشاء وظيفة Lambda

'use strict';

exports.handler = async (event) => {
  const request = event.Records[0].cf.request;
  const headers = request.headers;

  if (headers['cloudfront-forwarded-proto'] && headers['cloudfront-forwarded-proto'][0].value === 'http') {
    const redirectResponse = {
      status: '301',
      statusDescription: 'Moved Permanently',
      headers: {
        location: [{ key: 'Location', value: `https://${request.headers.host[0].value}${request.uri}` ],
      },
    };
    return redirectResponse;
  }

  return request;
};

الخطوة 2: النشر في Lambda@Edge

  1. اذهب إلى AWS Lambda Console.
  2. أنشئ وظيفة جديدة في منطقة us-east-1 (N. Virginia) — يبدأ نسخ Lambda@Edge من هناك.
  3. اختر بيئة تشغيل مدعومة حالياً مثل Node.js 22.x أو Python 3.13. تدعم Lambda@Edge فقط Node.js و Python — لا يُسمح بـ Java أو Go أو Ruby أو .NET أو بيئات التشغيل المخصصة. لاحظ أن Node.js 18 وصل إلى نهاية الدعم في مارس 2026.
  4. تحت Actions → Deploy to Lambda@Edge، قم بربطها بتوزيع CloudFront الخاص بك.
  5. اختر نوع الحدث Viewer Request.

الخطوة 3: الاختبار

بمجرد النشر، يجب أن يتم تحويل أي طلب HTTP إلى توزيع CloudFront الخاص بك تلقائياً إلى HTTPS.

مثال:

$ curl -I http://d123example.cloudfront.net
HTTP/1.1 301 Moved Permanently
Location: https://d123example.cloudfront.net/

حالات استخدام في العالم الحقيقي

تُستخدم Lambda@Edge على نطاق واسع في الإنتاج للمهام الحساسة للأداء. تشمل السيناريوهات الشائعة ما يلي:

  1. اختبارات A/B: تقديم صفحات مختلفة بناءً على ملفات تعريف الارتباط (cookies) أو العناوين (headers).
  2. تصفية الأمان: حظر عناوين IP الضارة أو فرض قيود الموقع الجغرافي.
  3. التخصيص: تعديل المحتوى ديناميكياً بناءً على موقع المستخدم أو نوع جهازه.
  4. تحسين محركات البحث (SEO): إعادة توجيه الروابط القديمة أو فرض هياكل الروابط الأساسية (canonical).
  5. إدارة العناوين (Headers): إضافة عناوين أمان مثل CSP أو HSTS أو CORS.

غالباً ما تستخدم الخدمات واسعة النطاق المنطق الطرفي لتقليل زمن الاستجابة وتخفيف العبء عن الأصول2.


متى تستخدم ومتى لا تستخدم Lambda@Edge

حالة الاستخدامموصى به؟السبب
قاعدة مستخدمين عالمية مع تخصيص حساس لزمن الاستجابةتعمل بالقرب من المستخدمين
المصادقة أو التحكم في الوصول عند طبقة CDNتخفف الحمل عن الأصل
معالجة بيانات ثقيلة أو استدلال تعلم آلي (ML)ذاكرة ووقت محدودان
تحديثات كود متكررة⚠️يستغرق النسخ العالمي عدة دقائق
منطق امتثال خاص بمنطقة معينةتنفيذ قيود قائمة على الموقع الجغرافي
جمع مقاييس عالية الترددمكلف عند التوسع الكبير

تتفوق Lambda@Edge في التحويلات خفيفة الوزن على مستوى الطلب، وليس في المهام الكثيفة حاسوبياً.


الأخطاء الشائعة والحلول

الخطأ الشائعالسببالحل
تحديثات بطيئةتأخير النسخ المتماثل العالمي (Global replication)خطط لنوافذ النشر؛ استخدم أسماء مستعارة (aliases) ذات إصدارات محددة
صعوبة التصحيح (Debugging)لا توجد سجلات مباشرة من الحافة (edge)استخدم CloudWatch Logs؛ أضف ترويسات (headers) مخصصة للتتبع
حد حجم الوظيفة1 ميجابايت مضغوط لمحفزات المشاهد، 50 ميجابايت لمحفزات الأصل (origin)قم بحزم وتقليل حجم التبعيات في حزمة النشر — Lambda@Edge لا تدعم Lambda Layers
البدايات الباردة (Cold starts)استدعاء موقع حافة جديداجعل الوظائف خفيفة الوزن وخالية من التبعيات — السعة المحجوزة (provisioned concurrency) غير مدعومة في Lambda@Edge
مهلة الانتظار (Timeouts)حد 5 ثوانٍ لأحداث المشاهد (30 ثانية لأحداث الأصل)قم بتحسين المنطق؛ تجنب استدعاءات الشبكة البطيئة في محفزات المشاهد

اعتبارات الأداء

يتم تنفيذ وظائف Lambda@Edge في 13 ذاكرة تخزين مؤقت إقليمية للحافة (Regional Edge Caches) تابعة لـ CloudFront، وليس في كل نقطة تواجد (Point of Presence) — وظائف CloudFront Functions هي التي تعمل في كل موقع حافة. تمتد شبكة CloudFront الإجمالية لتشمل أكثر من 750 نقطة تواجد عبر أكثر من 100 مدينة في أكثر من 50 دولة، بالإضافة إلى أكثر من 1,140 نقطة تواجد مدمجة داخل شبكات مزودي خدمة الإنترنت (ISP)3.

زمن الاستجابة (Latency)

  • يتم تنفيذ أحداث طلب/استجابة المشاهد (Viewer Request/Response) في أجزاء من الثانية.
  • عادةً ما تكون البدايات الباردة أقل من 100 مللي ثانية للوظائف خفيفة الوزن.

التكلفة

يتم محاسبتك على:

  • عدد الاستدعاءات
  • مدة التنفيذ (بالمللي ثانية)
  • نقل البيانات (إن وجد)

يمكن أن يؤدي التحسين لأوقات تنفيذ قصيرة وتخزين الاستجابات مؤقتًا إلى تقليل التكلفة بشكل كبير.


الاعتبارات الأمنية

تعمل Lambda@Edge ضمن البنية التحتية المدارة لـ AWS، وترث نفس النموذج الأمني لـ AWS Lambda4. ومع ذلك، فإن التنفيذ عند الحافة يطرح تحديات فريدة:

  • لا يوجد وصول إلى VPC: لا يمكن للوظائف الاتصال بموارد VPC الخاصة.
  • كود غير قابل للتغيير (Immutable Code): بمجرد النشر، لا يمكنك تعديل الوظيفة؛ يجب إعادة النشر بدلاً من ذلك.
  • البيانات الحساسة: تجنب تسجيل البيانات الشخصية؛ والتزم بقوانين GDPR والقوانين الإقليمية.
  • تطهير الترويسات (Header Sanitization): قم دائمًا بالتحقق من ترويسات إدخال المستخدم لمنع الحقن (injection).

نصيحة: استخدم AWS WAF مع Lambda@Edge لتوفير أمن متعدد الطبقات.


اختبار Lambda@Edge

قد يكون اختبار وظائف الحافة أمرًا صعبًا لأنها تعمل عالميًا. إليك بعض الاستراتيجيات:

  1. المحاكاة المحلية: استخدم AWS SAM CLI أو أحداث وهمية (mock events) محلية.
  2. توزيعات المرحلة (Staging Distributions): قم بالنشر في توزيع CloudFront غير إنتاجي أولاً.
  3. اختبارات التكامل: استخدم أدوات مثل Postman أو k6 لمحاكاة حركة المرور العالمية.

مثال لحدث وهمي للاختبار المحلي:

{
  "Records": [
    {
      "cf": {
        "request": {
          "uri": "/index.html",
          "headers": {
            "host": [{"key": "Host", "value": "example.cloudfront.net"],
            "cloudfront-forwarded-proto": [{"key": "CloudFront-Forwarded-Proto", "value": "http"]
                              ]
node index.js

المراقبة وقابلية الملاحظة

تتكامل Lambda@Edge مع Amazon CloudWatch Logs و AWS X-Ray للتتبع5.

أفضل الممارسات

  • سجل بيانات قليلة ولكن ذات مغزى (تجنب معلومات الهوية الشخصية PII).
  • استخدم سجلات JSON منظمة لسهولة التحليل.
  • قم بتمييز الوظائف بمعرفات البيئة والإصدار.

مثال لمخرجات السجل:

REPORT RequestId: 1234abcd Duration: 1.23 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 45 MB

أنماط معالجة الأخطاء

لا تدعم Lambda@Edge عمليات إعادة المحاولة لأحداث المشاهد، لذا تعامل مع الأخطاء بلباقة.

نمط مثال: إرجاع استجابات احتياطية (fallback) بدلاً من إلقاء خطأ.

try {
  // core logic
catch (err) {
  console.error('Edge error:', err);
  return {
    status: '500',
    statusDescription: 'Internal Server Error',
    body: 'Something went wrong at the edge.',
  ;
رؤى حول القابلية للتوسع

نظرًا لأن وظائف Lambda@Edge يتم نسخها تلقائيًا إلى مواقع الحافة، فإن التوسع مدار بالكامل بواسطة AWS1. يمكن لكل موقع حافة التعامل مع آلاف التنفيذات المتزامنة.

ومع ذلك، لاحظ ما يلي:

  • تنتشر عمليات النشر تدريجيًا.
  • تحتفظ كل منطقة بنسختها الخاصة — التحديثات ليست فورية.
  • استخدم الأسماء المستعارة ذات الإصدارات (versioned aliases) للتحكم في عملية الإطلاق.

الأخطاء الشائعة التي يقع فيها الجميع

  1. نسيان إصدار الوظائف — يؤدي إلى تراجعات غير متوقعة.
  2. الإفراط في استخدام المتغيرات العالمية — يمكن أن يسبب تخزينًا مؤقتًا غير متسق.
  3. تسجيل الكثير من البيانات — يزيد من التكلفة وزمن الاستجابة.
  4. تجاهل حالة الأحرف في الترويسات — ترويسات CloudFront تكون بأحرف صغيرة (lowercase).
  5. النشر دون اختبار الانتشار — تستغرق الإصدارات الجديدة دقائق للوصول إلى جميع الحواف.

دراسة حالة واقعية: التخصيص الديناميكي

أرادت منصة تجارة إلكترونية عالمية تخصيص صفحات الهبوط بناءً على بلد المستخدم دون إضافة زمن استجابة.

الحل:

  • استخدام Lambda@Edge (طلب المشاهد) لاكتشاف ترويسة CloudFront-Viewer-Country.
  • إعادة توجيه المستخدمين إلى صفحات محلية (/us/، /de/، /fr/) على الفور.

النتيجة:

  • تقليل زمن الاستجابة بنحو 80 مللي ثانية عالميًا (المتوسط).
  • إزالة الحاجة إلى منطق تحديد الموقع الجغرافي القائم على الأصل (origin).

تُعتمد مثل هذه الأنماط على نطاق واسع من قبل الخدمات الكبيرة للتخصيص الحساس للأداء2.


تحدي "جربها بنفسك"

قم بإنشاء وظيفة Lambda@Edge تقوم بما يلي:

  • إضافة ترويسة مخصصة X-Edge-Processed: true
  • حظر الطلبات من بلد معين باستخدام ترويسة CloudFront-Viewer-Country

تلميح: استخدم محفز "طلب المشاهد" (Viewer Request) وأرجع استجابة 403 عندما يتطابق البلد.


دليل استكشاف الأخطاء وإصلاحها

الخطأالسببالإصلاح
The function cannot be edited because it is replicated globallyقيود Lambda@Edgeقم بإنشاء إصدار جديد وأعد النشر
AccessDenied عند الإرفاق بالتوزيعمشكلة في أذونات IAMتأكد من وجود أذونات lambda:CreateFunction و cloudfront:UpdateDistribution
السجلات لا تظهرعدم تطابق منطقة CloudWatchتُكتب السجلات في منطقة AWS الأقرب إلى موقع الحافة الذي نفذ الوظيفة، وليس us-east-1. تحقق من المنطقة الأقرب لموقع المشاهد
الوظيفة لا تعملنوع حدث خاطئتحقق من الارتباط في إعدادات توزيع CloudFront

أصبحت الحوسبة عند الحافة (Edge computing) مركزية في البنيات الحديثة. وفقًا لـ AWS، تعد Lambda@Edge جزءًا من توجه أوسع نحو الحوسبة بدون خادم الموزعة، جنبًا إلى جنب مع CloudFront Functions و AWS Global Accelerator6.

مع انتقال المزيد من المنطق البرمجي ليكون أقرب إلى المستخدم، توقع ما يلي:

  • تكامل أوثق مع استنتاج الذكاء الاصطناعي (AI inference) عند الحافة (Edge).
  • أدوات مطورين أفضل لتصحيح الأخطاء (debugging) وقابلية الملاحظة (observability).
  • تحكم أكثر دقة في التكاليف.

تظل Lambda@Edge حجر الزاوية لـ التطبيقات الموزعة عالمياً ذات زمن الاستجابة المنخفض.


النقاط الرئيسية

تسمح لك Lambda@Edge بتشغيل كود بدون خادم (serverless) عالمياً، مباشرة حيث يتواجد مستخدموك.

  • مثالية للتخصيص (personalization)، وإعادة التوجيه (redirects)، ومنطق الأمان.
  • توسع مدار بالكامل مع تكامل CloudFront.
  • خفيفة الوزن، تعتمد على الأحداث، وفعالة من حيث التكلفة.
  • تتطلب تعاملاً حذراً مع النسخ المتماثل (replication)، وتصحيح الأخطاء، والقيود.

الأسئلة الشائعة

س1: هل يمكنني استخدام متغيرات البيئة (environment variables) في Lambda@Edge؟

لا، متغيرات البيئة غير مدعومة. استخدم الثوابت (constants) أو ملفات الإعداد بدلاً من ذلك.

س2: في أي منطقة AWS يجب أن أنشئ دالتي؟

قم دائماً بإنشائها في us-east-1 (N. Virginia)، حيث تتطلبها Lambda@Edge لعملية النسخ المتماثل.

س3: هل يمكن لـ Lambda@Edge الوصول إلى خدمات AWS مثل S3 أو DynamoDB؟

دوال Lambda@Edge لا يمكنها الوصول إلى موارد VPC مباشرة — هذا قيد ثابت وليس خياراً قابلاً للإعداد. يمكنك الوصول إلى خدمات AWS مثل S3 و DynamoDB فقط من خلال واجهات برمجة التطبيقات العامة (public APIs) الخاصة بها، وليس أبداً من خلال نقاط نهاية VPC الخاصة (private VPC endpoints).

س4: كم من الوقت يستغرق انتشار النشر (deployment propagation)؟

عادةً بضع دقائق، اعتماداً على عدد مواقع الحافة (edge locations).

س5: ما هو الحجم الأقصى للدالة؟

بالنسبة لمحفزات المشاهد (viewer triggers)، الحد الأقصى لحجم الحزمة المضغوطة هو 1 ميجابايت. بالنسبة لمحفزات الأصل (origin triggers)، هو 50 ميجابايت. لاحظ أن Lambda@Edge لا تدعم Lambda Layers.


الخطوات التالية

  • قم بتجربة CloudFront Functions للحصول على أداء بمستوى الميكروثانية.
  • تعرف على تكامل AWS WAF للأمان المتقدم.
  • استكشف AWS SAM أو Terraform لعمليات النشر القائمة على البنية التحتية ككود (IaC).

Footnotes

  1. AWS Lambda@Edge Documentation – https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html 2

  2. AWS CloudFront Developer Guide – https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html 2

  3. AWS Global Infrastructure – https://aws.amazon.com/about-aws/global-infrastructure/

  4. AWS Lambda Security Overview – https://docs.aws.amazon.com/lambda/latest/dg/security.html

  5. AWS CloudWatch Logs Documentation – https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html

  6. AWS Edge Computing Overview – https://aws.amazon.com/edge/


نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.