مقدمة في الحوسبة 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\nAWS 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
المثال الأول: 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\nimport 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:
<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\nimport 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