استخدام دوال AWS Lambda كمهام Cron: دليل جدولة المهام السحابية

دقائق القراءة: 8

مقدمة إلى جدولة المهام السحابية باستخدام 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

تُشغّل دالة 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

في وقت محدد، تُشغّل دالة Lambda التي ستعمل على مجموعة من مثيلات EC2.

نشر المشروع

الكود النهائي لهذا المثال متاح في مستودع GitHub هذا. لتشغيل هذا الكود في AWS Cloud9 IDE، تحتاج إلى تهيئة حساب GitHub الخاص بك في البيئة لتتمكن من استنساخ المشروع، ثم استنساخه داخل IDE. عندما يكون ذلك جاهزًا، ما عليك سوى تشغيل هذا الأمر داخل الدليل المستنسخ:

$ sam deploy --guided

عند تشغيل هذا الأمر، ستظهر لك مجموعة من الأسئلة التي تحتاج إلى الإجابة عليها لتهيئة هذا المشروع للتشغيل بنجاح.

صورة متحركة توضح خطوات نشر المشروع إلى السحابة باستخدام واجهة سطر الأوامر AWS SAM CLI

كيفية نشر المشروع إلى السحابة باستخدام AWS SAM CLI.

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

تعريف دالة AWS Lambda

أول ما أريد أن أوضحه هو كيفية تعريف دالة AWS Lambda تُشغّل في وقت محدد باستخدام AWS SAM. سيكون هذا التعريف في الملف المسمى "template.yml".

تعريف دالة StartInstanceFunction في ملف template.yml باستخدام AWS SAM

تعريف 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 في Node.js لتشغيل مثيلات EC2

كود دالة startInstance.

سيتم استدعاء هذه الدالة عندما تُشغّل الدالة كل يوم في الساعة 8 صباحًا. ستحصل على قائمة مثيلات EC2 من متغير بيئي قمنا بتمرير جميع معرفات المثيلات إليه أثناء وقت النشر. ثم ستقوم بإنشاء مصفوفة منها. عندما يكون لديها ذلك، ستستدعي AWS SDK وترسل مصفوفة معرفات المثيلات كمعامل. وإذا كان هناك أي خطأ، فستقوم بتسجيله وإكمال العملية. مباشرة بعد انتهاء تنفيذ دالة Lambda هذه، يمكنك الانتقال إلى وحدة تحكم EC2 الخاصة بك ورؤية كيف تُشغّل مثيلاتك.

صورة متحركة تظهر مثيلات EC2 تبدأ تلقائياً عند تنفيذ دالة Lambda

مثيلات EC2 تُشغّل تلقائيًا عند تنفيذ دالة Lambda.

الدالة التي تقوم بإيقاف مثيلات EC2 مشابهة جدًا مع بعض الاختلافات. يمكنك العثور على كود تلك الدالة في هذا الرابط والتحقق منه.

تشغيل مهمة Cron

لتشغيل مهمة Cron هذه، لم يتبق الكثير للقيام به. بعد نشر الدالتين في حساب AWS الخاص بك، في نفس المنطقة التي توجد بها مثيلاتك، ستقومان بالتنفيذ والقيام بما تمت برمجتهما للقيام به.

لقطة شاشة لدوال AWS Lambda المنشورة في حساب AWS لبدء وإيقاف مثيلات EC2

دوال AWS Lambda لبدء وإيقاف المثيلات المنشورة في حساب AWS الخاص بي.

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

تنظيف حساب AWS الخاص بك

بعد إكمال هذا العرض التوضيحي، أوصيك بإيقاف (أو إزالة المثيل الذي أنشأته للاختبار) وإزالة دوال Lambda التي أنشأتها للتو. إزالة دوال Lambda سهلة مثل الانتقال إلى خدمة CloudFormation في وحدة تحكم إدارة AWS الخاصة بك وإزالة حزمة الموارد التي أنشأها AWS SAM. لا تنس أيضًا إنهاء وإزالة مثيلات EC2 إذا قمت بإنشائها لهذا العرض التوضيحي.

صورة متحركة توضح كيفية حذف دوال AWS Lambda والموارد المرتبطة بها من خلال خدمة CloudFormation

كيفية إزالة دوال AWS Lambda التي أنشأناها في هذا العرض التوضيحي.

الخلاصة التقنية

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

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *