Swift पर सर्वरलेस फ़ंक्शन: AWS Lambda उन्नत स्तर

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

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

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

Swift पर सर्वरलेस फ़ंक्शन: AWS Lambda उन्नत स्तर

\n\n

Swift पर सर्वरलेस एप्लिकेशन विकसित करना तेजी से लोकप्रिय हो रहा है। इस मार्गदर्शिका में हम AWS Lambda के साथ उन्नत तकनीकों पर विचार करेंगे: एसिंक्रोनस हैंडलर, VPC के साथ एकीकरण, कस्टम लेयर्स (Layers) बनाना और मॉनिटरिंग सेटअप। यह सामग्री उन डेवलपर्स के लिए है जो Swift और AWS Lambda की मूल बातों से पहले से परिचित हैं।

\n\n

1. एसिंक्रोनस हैंडलर (async/await)

\n\n

आधुनिक Swift async/await के माध्यम से एसिंक्रोनसिटी का समर्थन करता है। AWS Lambda SDK इस मॉडल का उपयोग करने की अनुमति देता है, जो इनपुट-आउटपुट और बाहरी सेवाओं के साथ काम को काफी सरल बनाता है।

\n\n

बुनियादी एसिंक्रोनस हैंडलर:

\n\n
import AWSLambdaRuntime\nimport AWSLambdaEvents\n\nstruct AsyncHandler: LambdaHandler {\n    typealias Event = APIGatewayV2Request\n    typealias Output = APIGatewayV2Response\n\n    func handle(_ event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {\n        let result = await fetchData(from: "https://api.example.com/data")\n        return APIGatewayV2Response(statusCode: .ok, body: result)\n    }\n\n    private func fetchData(from url: String) async -> String {\n        // एसिंक्रोनस अनुरोध का अनुकरण\n        try? await Task.sleep(nanoseconds: 100_000_000)\n        return "{\\"status\\": \\"ok\\", \\"data\\": \\"\\(url)\\"}"\n    }\n}
\n\n

समानांतर प्रसंस्करण:

\n\n
func handle(_ event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {\n    async let user = fetchUser(id: event.queryParameters?["userId"] ?? "")\n    async let orders = fetchOrders(userId: event.queryParameters?["userId"] ?? "")\n\n    let (userData, ordersData) = try await (user, orders)\n    let combined = """\n    {\n        "user": \\(userData),\n        "orders": \\(ordersData)\n    }\n    """\n    return APIGatewayV2Response(statusCode: .ok, body: combined)\n}
\n\n

प्राथमिकताओं और संचालन को रद्द करने के सटीक नियंत्रण के लिए Task का उपयोग करें। धीमे बाहरी API के साथ काम करते समय यह महत्वपूर्ण है।

\n\n

2. VPC के साथ एकीकरण और सुरक्षा

\n\n

Swift पर Lambda फ़ंक्शन निजी संसाधनों (RDS, ElastiCache) तक पहुंच के लिए VPC के अंदर काम कर सकते हैं। हालांकि, ENI बनाने के कारण यह कोल्ड स्टार्ट को 5-10 सेकंड तक बढ़ा देता है।

\n\n

VPC की उन्नत कॉन्फ़िगरेशन:

\n\n
    \n
  • सबनेट को न्यूनतम करना: विभिन्न उपलब्धता क्षेत्रों में केवल 2-3 सबनेट का उपयोग करें।
  • \n
  • NAT Gateway: यदि इंटरनेट तक पहुंच आवश्यक है, तो सार्वजनिक सबनेट में NAT Gateway सेटअप करना सुनिश्चित करें।
  • \n
  • VPC Endpoints: AWS सेवाओं (S3, DynamoDB, SQS) के लिए NAT के बजाय VPC Endpoints का उपयोग करें।
  • \n
  • Security Groups: न्यूनतम आवश्यक नियम सेट करें (केवल विशिष्ट पोर्ट के लिए inbound/outbound)।
  • \n
\n\n

VPC के माध्यम से RDS से कनेक्शन का उदाहरण:

\n\n
import Vapor\nimport MySQLNIO\n\nstruct DatabaseHandler: LambdaHandler {\n    typealias Event = APIGatewayV2Request\n    typealias Output = APIGatewayV2Response\n\n    private let db: MySQLConnection\n\n    init(context: LambdaInitializationContext) async throws {\n        let eventLoop = context.eventLoop\n        self.db = try await MySQLConnection.connect(\n            to: .init(hostname: "private-rds-endpoint", port: 3306),\n            username: "admin",\n            password: "secret",\n            database: "mydb",\n            on: eventLoop\n        ).get()\n    }\n\n    func handle(_ event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {\n        let rows = try await db.simpleQuery("SELECT * FROM users LIMIT 10")\n        let jsonData = try JSONEncoder().encode(rows)\n        return APIGatewayV2Response(statusCode: .ok, body: String(data: jsonData, encoding: .utf8) ?? "[]")\n                

ब्लॉग

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