استخدام دوال AWS Lambda كمهام Cron: دليل جدولة المهام السحابية
مقدمة إلى جدولة المهام السحابية باستخدام AWS Lambda
تُعد مهام Cron أداة أساسية لجدولة الأوامر والعمليات لتُنفذ في أوقات محددة أو بفترات زمنية منتظمة. تُستخدم هذه المهام على نطاق واسع في إدارة الأنظمة لأغراض متعددة، مثل إجراء النسخ الاحتياطي للبيانات، مراقبة حالة النظام، أو تنفيذ مهام الصيانة الدورية. حتى في بيئات الحوسبة السحابية، تظل الحاجة إلى جدولة المهام الإدارية قائمة وضرورية للحفاظ على كفاءة واستقرار الأنظمة.
إحدى الطرق الفعالة لتنفيذ مهام Cron في البيئات السحابية هي الاستفادة من نموذج Function as a Service (FaaS)، والذي تُعد AWS Lambda مثالاً بارزًا عليه ضمن منظومة AWS. تتيح دوال Lambda تشغيل التعليمات البرمجية في السحابة دون الحاجة إلى توفير أو صيانة أي بنية تحتية خادمية. يمكن تهيئة هذه الدوال لتُنفذ عند استجابتها لحدث معين، أو كما في حالة مهام Cron التقليدية، لتُشغّل في أوقات محددة أو بانتظام.
في هذا الدليل، سنستكشف كيفية إنشاء مهمة Cron باستخدام دالة Lambda في منظومة AWS، مع تقديم مثال عملي يوضح الخطوات اللازمة لتحقيق ذلك.
فهم فعاليات Amazon CloudWatch ودورها في جدولة Lambda
لتحويل دالة Lambda إلى مهمة Cron فعالة، من الضروري فهم كيفية عمل فعاليات Amazon CloudWatch. تُرسل فعاليات CloudWatch عند حدوث تغييرات في موارد AWS، ويمكن لهذه الفعاليات أن تُشغّل دالة AWS Lambda تلقائيًا. عندما تتغير حالة موارد AWS الخاصة بك، فإنها تُرسل تلقائيًا فعاليات CloudWatch إلى تدفق الأحداث.
بناءً على ذلك، يمكنك إنشاء قاعدة تُشغّل دالة Lambda محددة عند وقوع حدث معين. على سبيل المثال، يمكنك استدعاء دالة Lambda تلقائيًا عند حدوث تغيير في مجموعة AutoScaling. بالإضافة إلى ذلك، يمكن لفعاليات CloudWatch استدعاء دالة Lambda لتُنفذ وفق جدول زمني منتظم. بهذه الطريقة، يمكنك، على سبيل المثال، إنشاء دالة Lambda تقوم بإيقاف جميع مثيلات EC2 الخاصة بالاختبار والتطوير بعد الساعة السادسة مساءً، ودالة أخرى تقوم بتشغيلها بعد الساعة الثامنة صباحًا.

تُشغّل دالة Lambda بواسطة حدث CloudWatch عند حدوث تغيير في مجموعة AutoScaling.
إعداد العرض التوضيحي: التحكم في مثيلات EC2
سنعرض مثالاً لدالة Lambda يمكنها تنفيذ إجراءات على مثيلات EC2 الخاصة بك. سنستخدم AWS SAM (Serverless Application Model) لتعريف دالة Lambda كبنية تحتية ككود (Infrastructure as Code).
المتطلبات الأساسية
إذا كنت ترغب في تجربة هذا العرض التوضيحي، فستحتاج إلى:
- حساب
AWSنشط. - مثيل واحد أو أكثر من مثيلات
EC2مهيأة في حسابAWSالخاص بك. هذه المثيلات هي التي سنتعامل معها من خلال دوالLambda.
تُعد مثيلات EC2 هي النسخة السحابية من الأجهزة الافتراضية في AWS. يمكنك تجربة العرض التوضيحي على AWS Cloud9 IDE (بيئة تطوير متكاملة قائمة على المتصفح)، حيث إن AWS SAM مهيأ مسبقًا في هذه البيئة.
الهدف من العرض التوضيحي
في هذا المثال، سنقوم بتشغيل وإيقاف مثيلات EC2 باستخدام دالتين مختلفتين من دوال AWS Lambda تُشغّلان في أوقات محددة. سنقوم بتشغيل المثيلات في الساعة 8 صباحًا كل يوم وإيقافها في الساعة 6 مساءً عند انتهاء اليوم. لتحقيق ذلك، سنستخدم حدث CloudWatch لتشغيل دالة Lambda في الوقت المناسب، بالإضافة إلى AWS SDK لتنفيذ العمليات على المثيلات.

في وقت محدد، تُشغّل دالة Lambda التي ستعمل على مجموعة من مثيلات EC2.
نشر المشروع
الكود النهائي لهذا المثال متاح في مستودع GitHub هذا. لتشغيل هذا الكود في AWS Cloud9 IDE، تحتاج إلى تهيئة حساب GitHub الخاص بك في البيئة لتتمكن من استنساخ المشروع، ثم استنساخه داخل IDE. عندما يكون ذلك جاهزًا، ما عليك سوى تشغيل هذا الأمر داخل الدليل المستنسخ:
$ sam deploy --guided
عند تشغيل هذا الأمر، ستظهر لك مجموعة من الأسئلة التي تحتاج إلى الإجابة عليها لتهيئة هذا المشروع للتشغيل بنجاح.

كيفية نشر المشروع إلى السحابة باستخدام AWS SAM CLI.
أول شيء تحتاج إلى تعريفه هو اسم لمشروعك. ثم ستحدد المنطقة التي سيتم النشر فيها – اختر نفس المنطقة التي توجد بها مثيلات EC2 الخاصة بك. بعد ذلك، نحتاج إلى تزويد نص النشر بقائمة المثيلات التي نريد التحكم فيها. وبعد ذلك نكون قد انتهينا – سيقوم بنشر المشروع إلى حساب AWS الخاص بك.
تعريف دالة AWS Lambda
أول ما أريد أن أوضحه هو كيفية تعريف دالة AWS Lambda تُشغّل في وقت محدد باستخدام AWS SAM. سيكون هذا التعريف في الملف المسمى "template.yml".
تعريف AWS SAM لدالة StartInstanceFunction.
هكذا تبدو الدالة. دعنا نلقي نظرة على الأسطر المهمة:
- السطر الأول هو اسم الدالة، في هذه الحالة
“StartInstanceFunction”. - ثم لدينا تعريف
“Properties”. الخاصية الأولى هي“Handler”. هنا سنحدد الوحدة (الملف) التي يوجد بها الكود الذي يحتاج إلى التنفيذ، ثم الدالة داخل تلك الوحدة. - بعد ذلك لدينا
“CodeUri”، وهو المسار الذي يوضح مكان العثور على هذا الملف. في هذه الحالة، سيكون الكود الخاص بنا داخل دليل يسمى“cron”في ملف يسمى“handler.js”وفي دالة تسمى“startInstance”. - بعد ذلك لدينا تعريف
“Runtime”. سأستخدمNodeJSالإصدار 12، ولكن يمكنك استخدامPython،Java،Go،C#، أو أي لغة تفضلها. تدعمLambdaالعديد من بيئات التشغيل بشكل افتراضي ويمكنك جلب بيئة التشغيل الخاصة بك إذا أردت. - ثم لدينا تعريف
“Environment”الذي سنستخدمه لتعريف متغير بيئي واحد. سيسمح لنا هذا المتغير بإرسال معرفات مثيلات مختلفة ديناميكيًا إلى الكود، اعتمادًا على التهيئة عند النشر. - بعد ذلك لدينا قسم يسمى
“Policies”وهو المكان الذي نحدد فيه الأذونات التي ستحصل عليها دالةLambdaهذه. من المهم معرفة أن جميع دوالLambdaتُنشأ بدون أي أذونات. هذا يعني أنها لا تستطيع فعل أي شيء على أي مواردAWSأخرى. لكي تتمكن دالةLambdaهذه من تشغيل مثيلEC2، فإنها تحتاج إلى أذونات للقيام بهذا الإجراء المحدد على موردAWSالمحدد. في هذه السياسة المحددة، نمنح أذونات لتشغيل جميع مثيلاتEC2في حسابAWSهذا. يتم تمثيلALLبـ“*”في قسم الموارد. إذا كان لديك هذا الجزء من الكود يعمل في بيئة إنتاج، أوصي بأن تحدد الموارد بدقة لتلك التي تريد أن تتمكنLambdaمن تشغيلها. - وأخيرًا، القسم الأخير هو قسم
“Events”. هنا سنحدد كيفية تشغيل دالةLambdaهذه. ستُشغّل هذه الدالة بحدثCloudWatchمجدول يُشغّلLambdaكل يوم في الساعة 8 صباحًا. بشكل أساسي، في الساعة 8 كل يوم، ستقوم بتشغيل جميع مثيلاتEC2التي تحددها. هناك العديد من القواعد لتشكيل تعبيرcronهذا: على سبيل المثال، لتقول أنك ترغب في تشغيل هذا فقط من الاثنين إلى الجمعة، اكتبcron(0 8 ? MON-FRI). يمكنك العثور على مزيد من المعلومات في موقع وثائق فعالياتCloudWatchهنا: https://docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html.
كتابة كود دالة AWS Lambda
الآن بعد أن قمنا بتعريف دالة Lambda، نحتاج إلى توفير بعض الكود لها. في المجلد “cron”، في الملف “handler.js”، نحتاج إلى إضافة الدالة المسماة “startInstance” التي تبدو كالتالي:
كود دالة startInstance.
سيتم استدعاء هذه الدالة عندما تُشغّل الدالة كل يوم في الساعة 8 صباحًا. ستحصل على قائمة مثيلات EC2 من متغير بيئي قمنا بتمرير جميع معرفات المثيلات إليه أثناء وقت النشر. ثم ستقوم بإنشاء مصفوفة منها. عندما يكون لديها ذلك، ستستدعي AWS SDK وترسل مصفوفة معرفات المثيلات كمعامل. وإذا كان هناك أي خطأ، فستقوم بتسجيله وإكمال العملية. مباشرة بعد انتهاء تنفيذ دالة Lambda هذه، يمكنك الانتقال إلى وحدة تحكم EC2 الخاصة بك ورؤية كيف تُشغّل مثيلاتك.

مثيلات EC2 تُشغّل تلقائيًا عند تنفيذ دالة Lambda.
الدالة التي تقوم بإيقاف مثيلات EC2 مشابهة جدًا مع بعض الاختلافات. يمكنك العثور على كود تلك الدالة في هذا الرابط والتحقق منه.
تشغيل مهمة Cron
لتشغيل مهمة Cron هذه، لم يتبق الكثير للقيام به. بعد نشر الدالتين في حساب AWS الخاص بك، في نفس المنطقة التي توجد بها مثيلاتك، ستقومان بالتنفيذ والقيام بما تمت برمجتهما للقيام به.
دوال AWS Lambda لبدء وإيقاف المثيلات المنشورة في حساب AWS الخاص بي.
الآن عليك الانتظار حتى الساعة 8 صباحًا أو 6 مساءً لترى ما إذا كانت تعمل. أو إذا كنت ترغب في اختبارها الآن، قم بتغيير وقت الحدث في تعريف Lambda إلى وقت يناسبك. تأكد من أن المثيل قيد التشغيل إذا كنت تخطط لإيقاف تشغيله أو العكس، حتى تتمكن من رؤية التغييرات. الآن انتظر وشاهد ما يحدث في وحدة تحكم EC2. مباشرة بعد الوقت الذي قمت بإعداده، سترى المثيل يتوقف أو يُشغّل ثم يفعل العكس في الوقت الآخر الذي قمت بإعداده. سيستمر هذا إلى الأبد حتى تقوم بإزالة دوال Lambda.
تنظيف حساب AWS الخاص بك
بعد إكمال هذا العرض التوضيحي، أوصيك بإيقاف (أو إزالة المثيل الذي أنشأته للاختبار) وإزالة دوال Lambda التي أنشأتها للتو. إزالة دوال Lambda سهلة مثل الانتقال إلى خدمة CloudFormation في وحدة تحكم إدارة AWS الخاصة بك وإزالة حزمة الموارد التي أنشأها AWS SAM. لا تنس أيضًا إنهاء وإزالة مثيلات EC2 إذا قمت بإنشائها لهذا العرض التوضيحي.

كيفية إزالة دوال AWS Lambda التي أنشأناها في هذا العرض التوضيحي.
الخلاصة التقنية
تُعد دوال AWS Lambda، بالاقتران مع فعاليات Amazon CloudWatch، حلاً قويًا وفعالاً من حيث التكلفة لاستبدال مهام Cron التقليدية في البيئات السحابية. يتيح هذا الدمج أتمتة المهام الإدارية والصيانة الدورية دون الحاجة إلى إدارة خوادم مخصصة، مما يقلل من النفقات التشغيلية ويزيد من مرونة البنية التحتية. القدرة على استدعاء دوال Lambda استجابة لتغيرات الموارد أو وفق جداول زمنية دقيقة، ودمجها مع AWS SDK للتحكم في خدمات AWS الأخرى، يفتح آفاقًا واسعة لأتمتة العمليات المعقدة بكفاءة عالية. إن فهم كيفية استخدام AWS SAM لتعريف ونشر هذه الدوال كبنية تحتية ككود يعزز من قابلية التوسع وقابلية الصيانة لهذه الحلول.