Kotlin पर सर्वरलेस फंक्शन्स: AWS Lambda A से Z तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin और AWS Lambda पर सर्वरलेस फंक्शन्स का परिचय

\n\n

सर्वरलेस आर्किटेक्चर स्केलेबल और किफायती एप्लिकेशन बनाने का मानक बन गया है। AWS Lambda सर्वर प्रबंधन के बिना कोड चलाने के लिए सबसे लोकप्रिय सेवाओं में से एक है। हालांकि, अधिकांश उदाहरण और दस्तावेज़ Java या Python पर केंद्रित हैं। Kotlin, JVM के लिए एक आधुनिक भाषा होने के नाते, संक्षिप्त सिंटैक्स और Java इकोसिस्टम के साथ पूर्ण संगतता प्रदान करता है, जो इसे Lambda फंक्शन्स के लिए एक उत्कृष्ट विकल्प बनाता है।

\n\n

इस लेख में हम पूरे चक्र को समझेंगे: प्रोजेक्ट सेटअप से लेकर डिप्लॉय और मॉनिटरिंग तक। आप सीखेंगे कि Kotlin पर प्रभावी सर्वरलेस फंक्शन कैसे लिखें, API Gateway, S3 और DynamoDB इवेंट्स को कैसे प्रोसेस करें, और कोल्ड स्टार्ट को कैसे ऑप्टिमाइज़ करें।

\n\n

1. प्रोजेक्ट सेटअप और डिपेंडेंसीज़

\n\n

शुरुआत करने के लिए, Kotlin सपोर्ट के साथ एक Gradle प्रोजेक्ट बनाएँ। मुख्य डिपेंडेंसी com.amazonaws:aws-lambda-java-core है, जो हैंडलर के लिए इंटरफेस प्रदान करती है।

\n\n

चरण 1.1: build.gradle.kts की संरचना

\n\n
plugins {\n    kotlin("jvm") version "1.9.22"\n    id("io.github.microutils:kotlin-logging") version "3.0.5"\n}\n\ndependencies {\n    implementation("com.amazonaws:aws-lambda-java-core:1.2.2")\n    implementation("com.amazonaws:aws-lambda-java-events:3.11.3")\n    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.15.3")\n    implementation("org.slf4j:slf4j-simple:2.0.9")\n}\n\ntasks.register<Zip>("buildLambda") {\n    from(sourceSets.main.get().output)\n    from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })\n    into("build/libs")\n    archiveFileName.set("lambda.zip")\n}
\n\n

buildLambda टास्क पर ध्यान दें - यह एक "फैट" JAR (fat jar) बनाता है जिसे AWS Lambda निष्पादित कर सके। इस चरण के बिना डिप्लॉय काम नहीं करेगा।

\n\n

चरण 1.2: बेसिक हैंडलर फंक्शन

\n\n

एक Handler.kt फ़ाइल बनाएँ जिसमें एक सरल फंक्शन हो जो Map<String, String> लेता है और एक स्ट्रिंग लौटाता है:

\n\n
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        context.logger.log("Processing request for $name")\n        return "Hello, $name!"\n    }\n}
\n\n

RequestHandler इंटरफ़ेस दो प्रकारों से पैरामीटराइज़ किया गया है: इनपुट डेटा का प्रकार और रिटर्न वैल्यू का प्रकार। Kotlin Map, String, और किसी भी data-क्लास का उपयोग करने की अनुमति देता है।

\n\n

2. AWS इवेंट्स के साथ काम करना (API Gateway, S3, DynamoDB)

\n\n

सर्वरलेस फंक्शन शायद ही कभी अलग-थलग काम करते हैं। अक्सर वे अन्य AWS सेवाओं के इवेंट्स पर प्रतिक्रिया करते हैं। आइए तीन लोकप्रिय परिदृश्यों पर विचार करें।

\n\n

2.1 API Gateway के माध्यम से HTTP अनुरोधों को संभालना

\n\n

API Gateway के साथ एकीकरण के लिए aws-lambda-java-events से APIGatewayProxyRequestEvent क्लास का उपयोग करें:

\n\n
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent\nimport com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent\nimport com.amazonaws.services.lambda.runtime.Context\nimport com.amazonaws.services.lambda.runtime.RequestHandler\n\nclass ApiHandler : RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {\n    override fun handleRequest(input: APIGatewayProxyRequestEvent, context: Context): APIGatewayProxyResponseEvent {\n        val body = "Received: ${input.body}"\n        return APIGatewayProxyResponseEvent()\n            .withStatusCode(200)\n            .withBody(body)\n            .withHeaders(mapOf("Content-Type" to "text/plain"))\n    }\n}
\n\n

इस उदाहरण में, हम अनुरोध का बॉडी निकालते हैं और HTTP प्रतिक्रिया लौटाते हैं।

ब्लॉग

पुस्तक अनुशंसाएँ