وظائف Serverless بلغة Java: AWS Lambda من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في الحوسبة Serverless و AWS Lambda

\n\n

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

\n\n

في هذه المقالة، سنشرح بالتفصيل كيفية إنشاء وظائف serverless بلغة Java باستخدام AWS Lambda. ستتعلم كيفية إعداد المشروع، كتابة أول معالج (handler)، نشر الوظيفة وتصحيح أخطائها في ظروف حقيقية.

\n\n

أساسيات AWS Lambda لمطور Java

\n\n

ما هو AWS Lambda؟

\n\n

AWS Lambda هي منصة Function-as-a-Service (FaaS) تنفذ الكود الخاص بك استجابةً للأحداث. يدعم Lambda إصدارات Java 8 و 11 و 17 و 21 (Corretto). يتم تشغيل الوظيفة في حاوية معزولة، وتستقبل حدثًا (event) وسياقًا (context) كمدخلات، وتعيد نتيجة.

\n\n

المفاهيم الأساسية

\n\n
    \n
  • Handler — نقطة الدخول إلى وظيفتك. عادةً ما يكون طريقة (method) تنفذ الواجهة RequestHandler أو RequestStreamHandler.
  • \n
  • Event — البيانات التي يتم تمريرها إلى الوظيفة (JSON، سلسلة نصية، بيانات ثنائية).
  • \n
  • Context — كائن يحتوي على معلومات حول بيئة التنفيذ (معرف الطلب، المهلة الزمنية، اسم الوظيفة).
  • \n
  • Cold start — التأخير عند أول استدعاء للوظيفة بعد فترة من عدم النشاط. بالنسبة لـ Java، قد يكون من 1 إلى 5 ثوانٍ.
  • \n
  • Layer — أرشيف يحتوي على مكتبات يمكن ربطها بعدة وظائف.
  • \n
\n\n

المثال الأول: Lambda بسيطة بلغة Java

\n\n

لننشئ مشروع Maven ونضيف التبعية:

\n\n
<dependency>\n    <groupId>com.amazonaws</groupId>\n    <artifactId>aws-lambda-java-core</artifactId>\n    <version>1.2.2</version>\n</dependency>
\n\n

الآن لنكتب المعالج (handler):

\n\n
import com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\n\npublic class HelloHandler implements RequestHandler<String, String> {\n\n    @Override\n    public String handleRequest(String input, Context context) {\n        context.getLogger().log("تم الاستلام: " + input);\n        return "مرحبًا، " + input + "!";\n    }\n}
\n\n

هذا المعالج يستقبل سلسلة نصية، يسجلها ويعيد تحية. لنشر الوظيفة، قم بتجميع المشروع في ملف JAR وارفعه في AWS Console أو استخدم AWS CLI.

\n\n

تقنيات متقدمة للعمل مع AWS Lambda بلغة Java

\n\n

العمل مع JSON عبر Jackson

\n\n

في المشاريع الحقيقية، ستقوم بمعالجة أحداث JSON. أضف Jackson إلى ملف pom.xml:

\n\n
<dependency>\n    <groupId>com.fasterxml.jackson.core</groupId>\n    <artifactId>jackson-databind</artifactId>\n    <version>2.15.2</version>\n</dependency>
\n\n

مثال على معالج (handler) للعمل مع JSON:

\n\n
import com.fasterxml.jackson.databind.ObjectMapper;\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\nimport java.util.Map;\n\npublic class JsonHandler implements RequestHandler<Map<String, Object>, String> {\n\n    private static final ObjectMapper mapper = new ObjectMapper();\n\n    @Override\n    public String handleRequest(Map<String, Object> event, Context context) {\n        try {\n            String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(event);\n            context.getLogger().log("الحدث: " + json);\n            return "تمت المعالجة بنجاح";\n        } catch (Exception e) {\n            throw new RuntimeException("خطأ في تحليل JSON", e);\n        }\n    }\n}
\n\n

استخدام AWS SDK داخل Lambda

المدونات

توصيات الكتب