أدلة عملية

لا تضبط Lambda على 90 دقيقة تلقائيًا: نوع الاستدعاء يحسم القرار

|الكاتب: فريق تحرير QUASA|5 دقيقة للقراءة| 1
لا تضبط Lambda على 90 دقيقة تلقائيًا: نوع الاستدعاء يحسم القرار

لتعديل مهلة AWS Lambda، افتح الوظيفة وانتقل إلى Configuration ثم General configuration واختر Edit، أو مرّر عدد الثواني إلى --timeout في AWS CLI. لكن لا تختَر 5400 ثانية تلقائيًا؛ فمهلة 90 دقيقة تخص الاستدعاءات غير المتزامنة وEvent Source Mapping المؤهلة على Lambda Managed Instances، ولا ترفع سقف الاستدعاء المتزامن عن 15 دقيقة.

ابدأ بأطول مدة تنفيذ واقعية، ثم أضف هامشًا للتذبذب وقارن النتيجة بمهل العميل والخدمات التابعة وسياسة إعادة المحاولة. القيمة الآمنة ليست السقف الأكبر، بل أصغر مهلة تستوعب الحمل المتوقع من دون إبقاء تنفيذ متعطل يعمل طويلًا أو إعادة عمل مكلف من بدايته.

تعديل المهلة من وحدة التحكم أو CLI

تعديل مهلة وظيفة AWS Lambda بالثواني والتحقق من التكوين بعد النشر

تحدد وثائق إعداد مهلة Lambda القيمة بالثواني، وتوضح أن الإعداد الافتراضي هو ثلاث ثوان، وأن التعديل يتم من Configuration ثم General configuration أو بالأمر update-function-configuration. كما توصي بأن تمثل الاختبارات الحدود العليا المعقولة لحجم البيانات وعددها ومعلمات المعالجة، لأن زمن التنزيل والخدمات التابعة قد يختلف عن المتوسط.

لتعيين مهلة مقدارها 120 ثانية، استخدم الأمر الآتي بعد استبدال اسم الوظيفة والمنطقة:

aws lambda update-function-configuration --function-name my-function --timeout 120 --region me-south-1

إذا كانت CloudFormation أو AWS SAM أو Terraform تدير الوظيفة، عدّل القيمة في تعريف البنية التحتية أيضًا؛ وإلا قد يعيد النشر التالي الإعداد القديم. وتذكّر أن إعدادات الإصدار المنشور ثابتة، لذلك تحقق من أن alias الإنتاج يشير إلى إصدار يتضمن التكوين المطلوب.

نوع الاستدعاء يحدد السقف الفعلي

مقارنة حد التنفيذ بين استدعاء Lambda المتزامن ومهمة غير متزامنة مؤهلة على Managed Instances

تؤكد تفاصيل المهلة الممتدة من AWS أن 5400 ثانية متاحة للاستدعاء غير المتزامن وEvent Source Mapping على Lambda Managed Instances، بينما يظل الاستدعاء المتزامن محدودًا بـ900 ثانية. وتبقى Event Source Mapping الخاصة بـAmazon MQ وAmazon DocumentDB عند 15 دقيقة، كما تظل مرحلة Init في Managed Instances محدودة بـ15 دقيقة.

  • الاستدعاء المتزامن: لا تتجاوز 900 ثانية، واضبط المهلة بما ينسجم مع الزمن الذي ينتظره العميل أو الوكيل أو اتصال HTTP؛ فقد ينهي المستدعي طلبه قبل انتهاء Lambda.
  • الاستدعاء غير المتزامن أو Event Source Mapping المؤهل على Managed Instances: يمكن ضبط أكثر من 900 ثانية حتى 5400 إذا احتاجت المهمة فعلًا إلى تنفيذ متصل طويل.
  • السعة عند الطلب أو مصدر حدث غير مؤهل: لا تفترض أن ظهور قيمة أكبر في التكوين يجعلها قابلة للاستخدام مع نمط الاستدعاء المقصود.
  • مهمة تتجاوز السقف أو يصعب تكرارها: قسّمها إلى مراحل قابلة للاستئناف أو استخدم تنفيذًا دائمًا بنقاط تحقق.

حتى في الحالة المؤهلة، لا تجعل 90 دقيقة قيمة افتراضية. فإذا انتهت مهمة غير متزامنة عادة خلال سبع دقائق ولم تتجاوز عشر دقائق في اختبارات تمثل الحمل الأعلى، فإن مهلة قريبة من الحد المقاس مع هامش واضح تكشف التعطل أسرع من تركها تعمل ساعة ونصف.

استخرج القيمة من القياسات وميزانية المسار

قِس مدة الوظيفة ببيانات تمثل الملفات الكبيرة والعدد الأعلى المتوقع من السجلات وبطء الشبكة والخدمات التابعة. لا تعتمد على المتوسط وحده؛ فالحالات الطرفية هي التي تحدد إن كانت المهلة ستقطع عملًا سليمًا تحت الحمل.

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

في مثال افتراضي، إذا استغرق مسار متزامن خمس ثوان في أسوأ الاختبارات وكان العميل ينتظر عشر ثوان، فقد تكون سبع أو ثماني ثوان نقطة بداية قابلة للمراقبة. ضبط 900 ثانية لن يمدد انتظار العميل، وقد يسمح لاتصال عالق باستهلاك وقت تنفيذ بعد أن تصبح النتيجة غير قابلة للاستخدام.

تدخل الكلفة في القرار من باب مدة التنفيذ وإعادة العمل، لا من رقم المهلة وحده. المهلة الأكبر لا تُحتسب كاملة إذا انتهت الوظيفة مبكرًا، لكنها توسع الفترة التي يمكن أن يظل فيها كود عالق أو اتصال بطيء قيد التشغيل.

أدخل إعادة المحاولة في الحساب

إعادة محاولة حدث غير متزامن بعد انتهاء مهلة Lambda مع منع تكرار العملية المكتملة

تفيد سياسة أخطاء الاستدعاء غير المتزامن بأن انتهاء المهلة يُعد خطأ في الوظيفة، وأن Lambda تعيد المحاولة مرتين افتراضيًا: بعد دقيقة للمحاولة الثانية ثم بعد دقيقتين للثالثة. وقد يصل الحدث نفسه أكثر من مرة حتى من دون خطأ ظاهر، لذلك يجب أن تتحمل المعالجة التكرار.

كلما طال التنفيذ، زادت قيمة العمل التي قد تتكرر إذا وقع الفشل قرب النهاية. استخدم مفتاحًا ثابتًا للحدث واجعل العمليات ذات الآثار الجانبية idempotent، خصوصًا عند إنشاء ملف أو تسجيل دفعة أو تحديث قاعدة بيانات. ويمكن ضبط MaximumRetryAttempts وMaximumEventAgeInSeconds وإرسال الأحداث غير المعالجة إلى on-failure destination أو قائمة رسائل ميتة بحسب متطلبات الاحتفاظ والتشخيص.

مع SQS، اضبط مهلة الرؤية على ستة أمثال مهلة الوظيفة على الأقل؛ فمهلة وظيفة قدرها ست دقائق تستلزم 36 دقيقة على الأقل. راجع الإعداد بعد أي تغيير، لأن إنشاء Event Source Mapping يتحقق من العلاقة، لكن تعديلات لاحقة قد تترك القيم غير متسقة. وإذا عالجت الدفعة عدة سجلات، فاستخدم الإبلاغ الجزئي عن فشل الدفعة عندما يكون مدعومًا كي لا تعاد السجلات الناجحة بسبب سجل واحد.

متى تكون نقاط التحقق أفضل من مهلة أطول؟

استخدم نقاط التحقق عندما تتكون المهمة من مراحل واضحة أو تكون إعادة عشرات الدقائق من العمل مكلفة. تحفظ Lambda durable functions تقدم التنفيذ وتعيد التشغيل مع تجاوز الخطوات المكتملة، لكن الخطوة التي تفشل قبل تسجيل نقطة التحقق قد تنفذ مجددًا؛ لذلك تظل idempotency ضرورية.

أما المهمة التي يمكن تكرارها كاملة بكلفة مقبولة، وتبقى داخل سقف نمط الاستدعاء، فقد تكفيها مهلة أطول مع سياسة فشل معلومة. السؤال العملي ليس هل يمكن إدخال 5400 في الإعداد، بل هل يحتاج الاستدعاء إلى تشغيل متصل بهذا الطول، وهل يستطيع التعافي من الفشل من دون إعادة العمل كله.

قائمة مراجعة قبل الحفظ

  • حدد نوع الاستدعاء ومصدر الحدث ونمط السعة قبل اختيار الرقم.
  • قِس الحالات العليا الواقعية، لا المتوسط أو عينة صغيرة فقط.
  • قارن مهلة Lambda بمهل العميل والوكيل وقاعدة البيانات وكل اتصال تابع.
  • قدّر كلفة التشغيل الطويل وإعادة المحاولة وتكرار الآثار الجانبية.
  • اجعل المعالجة idempotent واضبط عمر الحدث وعدد المحاولات ووجهة الفشل.
  • طابق مهلة رؤية SQS وإعدادات الدفعات مع مهلة الوظيفة.
  • استخدم نقاط تحقق إذا كانت إعادة الخطوات المكتملة غير مقبولة.
  • راقب Duration وعمليات انتهاء المهلة بعد النشر، ثم عدّل القيمة وفق القياسات.

استخدم 5400 ثانية فقط عندما تكون الوظيفة على Managed Instances، ويكون نمط الاستدعاء مؤهلًا، وتثبت القياسات حاجتها إلى هذا الزمن. في غير ذلك، اختر مهلة أقصر تكفي الحالات الواقعية وتترك للكود وقتًا لمعالجة الفشل بأمان.

اقرأ أيضًا:

مشاركة:

اشترك في نشرتنا الإخبارية

احصل على أحدث أخبار الويب 3 والذكاء الاصطناعي والعملات المشفرة مباشرة في بريدك.

0