مقدمة في دوال 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، سنضيف التبعيات اللازمة:
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لننشئ فئة HelloHandler التي تطبق واجهة RequestHandler:
import com.amazonaws.services.lambda.runtime.Context\nimport com.amazonaws.services.lambda.runtime.RequestHandler\n\nclass HelloHandler : RequestHandler\n\nيقبل هذا المعالج كائن JSON يحتوي على حقل name ويعيد تحية. للنشر، قم ببناء المشروع باستخدام الأمر ./gradlew buildZip ثم قم بتحميل ملف JAR الناتج إلى وحدة تحكم AWS Lambda.
سيناريوهات متقدمة: العمل مع الأحداث و AWS SDK
\n\nمعالجة أحداث API Gateway
\n\nغالبًا ما تُستخدم Lambda كخلفية لواجهات REST API. للقيام بذلك، ستحتاج إلى معالجة تنسيق أحداث API Gateway. لننشئ فئة ApiGatewayHandler:
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