دوال Serverless بلغة Kotlin: AWS Lambda من الألف إلى الياء

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

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

ابدأ الدورة

مقدمة في دوال Serverless بلغة Kotlin مع AWS Lambda

\n\n

تكتسب بنية Serverless شعبية متزايدة بفضل قابليتها للتوسع، وفعاليتها من حيث التكلفة، وسهولة النشر. تُعد AWS Lambda واحدة من الخدمات الرائدة لتشغيل الدوال بدون خادم، وعلى الرغم من أنها غالبًا ما ترتبط بـ JavaScript أو Python أو Java، إلا أن لغة Kotlin مناسبة تمامًا لهذه المهمة أيضًا. بفضل توافقها الكامل مع JVM وبناءها النحوي المختصر، تتيح Kotlin كتابة كود نظيف وآمن وعالي الأداء للدوال السحابية.

\n\n

في هذه المقالة، سننتقل من إنشاء دالة Lambda بسيطة بلغة Kotlin إلى نشرها واختبارها ومراقبتها في AWS. ستتعلم كيفية إعداد مشروع باستخدام Gradle، ومعالجة أحداث API Gateway، والعمل مع AWS SDK، وتحسين البداية الباردة.

\n\n

الأساسيات: إنشاء أول دالة Lambda بلغة Kotlin

\n\n

إعداد المشروع والتبعيات

\n\n

للبدء، سننشئ مشروع Gradle جديدًا. تأكد من تثبيت JDK 11+ و Gradle 7+. في ملف build.gradle.kts، سنضيف التبعيات اللازمة:

\n\n
plugins {\n    kotlin("jvm") version "1.9.22"\n    id("io.github.justinhj.kotlin-lambda") version "0.2.0"\n}\n\ndependencies {\n    implementation("com.amazonaws:aws-lambda-java-core:1.2.3")\n    implementation("com.amazonaws:aws-lambda-java-events:3.11.4")\n    implementation("com.google.code.gson:gson:2.10.1")\n}\n\ntasks.withType {\n    archiveFileName.set("lambda-function.zip")\n}
\n\n

يعمل إضافة kotlin-lambda على تبسيط عملية البناء والنشر، بينما توفر مكتبات aws-lambda-java-core و aws-lambda-java-events واجهات للمعالجات والأحداث.

\n\n

معالج بسيط

\n\n

لننشئ فئة HelloHandler التي تطبق واجهة RequestHandler:

\n\n
import com.amazonaws.services.lambda.runtime.Context\nimport com.amazonaws.services.lambda.runtime.RequestHandler\n\nclass HelloHandler : RequestHandler {\n    override fun handleRequest(input: Map<String, String>, context: Context): String {\n        val name = input["name"] ?: "World"\n        context.logger.log("Processing request for $name")\n        return "Hello, $name! دالة Kotlin الخاصة بك تعمل!"\n    }\n}
\n\n

يقبل هذا المعالج كائن JSON يحتوي على حقل name ويعيد تحية. للنشر، قم ببناء المشروع باستخدام الأمر ./gradlew buildZip ثم قم بتحميل ملف JAR الناتج إلى وحدة تحكم AWS Lambda.

\n\n

سيناريوهات متقدمة: العمل مع الأحداث و AWS SDK

\n\n

معالجة أحداث API Gateway

\n\n

غالبًا ما تُستخدم Lambda كخلفية لواجهات REST API. للقيام بذلك، ستحتاج إلى معالجة تنسيق أحداث API Gateway. لننشئ فئة ApiGatewayHandler:

\n\n
import com.amazonaws.services.lambda.runtime.Context\nimport com.amazonaws.services.lambda.runtime.RequestHandler\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent\n\nclass ApiGatewayHandler : RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {\n    override fun handleRequest(request: APIGatewayProxyRequestEvent, context: Context): APIGatewayProxyResponseEvent {\n        val response = APIGatewayProxyResponseEvent()\n        val body = """\n            {\n                "message": "تحية من Kotlin Lambda!",\n                "method": "${request.httpMethod}",\n                "path": "${request.path}"\n            }\n        """.trimIndent()\n        response.statusCode = 200\n        response.body = body\n        response.headers = mapOf("Content-Type" to "application/json")\n        return response\n    }\n}
\n\n

الآن يمكن لدالتك الاستجابة لطلبات HTTP، ونقل الرؤوس ورموز الحالة. في وحدة تحكم AWS عند إنشاء الدالة، اختر مشغل API Gateway HT

المدونات

توصيات الكتب