Kotlin पर सर्वरलेस कंप्यूटिंग का परिचय
\nसर्वरलेस आर्किटेक्चर स्केलेबल और किफायती एप्लिकेशन बनाने का मानक बन गया है। AWS Lambda सबसे लोकप्रिय सेवाओं में से एक है, जो सर्वर प्रबंधन के बिना कोड चलाने की अनुमति देता है। हालाँकि Lambda अक्सर Node.js या Python से जुड़ा होता है, Kotlin भाषा अपनी संक्षिप्तता, टाइप सुरक्षा और Java इकोसिस्टम के साथ पूर्ण संगतता के कारण सर्वरलेस फ़ंक्शन लिखने के लिए एक उत्कृष्ट विकल्प बन जाती है।
\nइस लेख में, हम विस्तार से जानेंगे कि AWS Lambda के लिए Kotlin पर सर्वरलेस फ़ंक्शन कैसे बनाएं, परीक्षण करें और डिप्लॉय करें। आप सीखेंगे कि प्रोजेक्ट कैसे सेट करें, API Gateway, S3 और DynamoDB इवेंट को कैसे हैंडल करें, और प्रदर्शन को कैसे ऑप्टिमाइज़ करें।
\n\nAWS Lambda के लिए Kotlin प्रोजेक्ट सेटअप
\nशुरू करने के लिए, हमें सही डिपेंडेंसी के साथ एक Gradle प्रोजेक्ट की आवश्यकता होगी। Kotlin का मुख्य लाभ सभी Java लाइब्रेरीज़ का उपयोग करने की क्षमता है, जिसमें आधिकारिक AWS SDK शामिल है।
\nGradle प्रोजेक्ट बनाना
\nनिम्नलिखित कॉन्फ़िगरेशन के साथ एक build.gradle.kts फ़ाइल बनाएँ:
plugins {\n kotlin("jvm") version "1.9.22"\n id("io.github.deweyjose.lambda-packager") version "0.1.2"\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 testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")\n testImplementation("org.mockito:mockito-core:5.11.0")\n}\n\ntasks.withType<Jar> {\n duplicatesStrategy = DuplicatesStrategy.EXCLUDE\n from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })\n}\nहैंडलर फ़ंक्शन की संरचना
\nKotlin पर किसी भी Lambda फ़ंक्शन को RequestHandler या RequestStreamHandler इंटरफ़ेस को लागू करना चाहिए। आइए एक सरल HelloHandler उदाहरण देखें:
import com.amazonaws.services.lambda.runtime.Context\nimport com.amazonaws.services.lambda.runtime.RequestHandler\n\nclass HelloHandler : RequestHandler<Map<String, String>, String> {\n override fun handleRequest(input: Map<String, String>, context: Context): String {\n val name = input["name"] ?: "World"\n return "Hello, $name! Kotlin Lambda से नमस्ते!"\n }\n}\nध्यान दें: Kotlin JSON इवेंट के साथ काम करने के लिए Map<String, String> का उपयोग करने की अनुमति देता है, लेकिन जटिल संरचनाओं के लिए Data Class बनाना बेहतर है।
विभिन्न AWS ट्रिगर्स के साथ काम करना
\nसर्वरलेस फ़ंक्शन शायद ही कभी अलगाव में काम करते हैं। आइए तीन लोकप्रिय परिदृश्यों पर विचार करें: API Gateway, S3 और DynamoDB।
\nAPI Gateway + Kotlin पर Lambda
\nHTTP अनुरोधों को संसाधित करने के लिए APIGatewayProxyRequestEvent क्लास का उपयोग करें:
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent\n\nclass ApiHandler : RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {\n override fun handleRequest(event: APIGatewayProxyRequestEvent, context: Context): APIGatewayProxyResponseEvent {\n val body = """\n {"message": "${event.httpMethod} अनुरोध ${event.path} पर प्राप्त हुआ",\n "queryParams": "${event.queryStringParameters}"}\n """.trimIndent()\n\n return APIGatewayProxyResponseEvent()\n .withStatusCode(200)\n .withHeaders(mapOf("Content-Type" to "application/json"))\n .withBody(body)\n }\n}\nS3 इवेंट को संसाधित करना
\nजब S3 बकेट में कोई नई ऑब्जेक्ट अपलोड होती है, तो Lambda स्वचालित रूप से चल सकता है:
\nimport com.amazonaws.services.lambda.runtime.events.S3Event\nimport com.amazonaws.services.s3.AmazonS3ClientBuilder\n\nclass S3ProcessorHandler : RequestHandler<S3Event, String>