TypeScript पर सर्वरलेस फ़ंक्शन: AWS Lambda के साथ उन्नत कार्य

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

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

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

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

\n\n

सर्वरलेस-आर्किटेक्चर स्केलेबल और किफ़ायती एप्लिकेशन बनाने के लिए डी-फैक्टो मानक बन गया है। AWS Lambda सर्वरलेस फ़ंक्शन को लागू करने के लिए सबसे लोकप्रिय सेवाओं में से एक है। यदि बुनियादी सिंटैक्स और ट्रिगर (API Gateway, S3, DynamoDB) पहले से सीख लिए गए हैं, तो उन्नत तकनीकों का समय आ गया है। इस लेख में, हम TypeScript पर Lambda फ़ंक्शन के पेशेवर विकास के प्रमुख पहलुओं पर विचार करेंगे: कोल्ड स्टार्ट ऑप्टिमाइज़ेशन से लेकर VPC के साथ एकीकरण और जटिल पैटर्न के उपयोग तक।

\n\n

1. कोल्ड स्टार्ट ऑप्टिमाइज़ेशन और मेमोरी प्रबंधन

\n\n

कोल्ड स्टार्ट सर्वरलेस एप्लिकेशन के प्रदर्शन का मुख्य दुश्मन है। TypeScript पर यह समस्या कंपाइलेशन चरण के कारण और बढ़ जाती है। आइए तीन मुख्य निपटान विधियों पर विचार करें।

\n\n

1.1. डिप्लॉय पैकेज का आकार कम करना

\n

मानक tsc के बजाय बिल्ड के लिए esbuild का उपयोग करें। यह tree-shaking और मिनिफिकेशन करता है, जिससे बंडल का आकार 5-10 गुना कम हो जाता है। serverless.yml के लिए कॉन्फ़िगरेशन उदाहरण:

\n\n
plugins:\n  - serverless-esbuild\ncustom:\n  esbuild:\n    bundle: true\n    minify: true\n    sourcemap: false\n    target: 'node18'\n    exclude: ['aws-sdk'] # SDK पहले से Lambda वातावरण में मौजूद है
\n\n

1.2. Provisioned Concurrency का उपयोग

\n

विलंब-संवेदनशील फ़ंक्शन (जैसे, API अनुरोधों को संसाधित करने वाले) के लिए Provisioned Concurrency सेट करें। यह निर्दिष्ट संख्या में "हॉट" कंटेनर को लगातार चालू रखता है:

\n\n
functions:\n  apiHandler:\n    handler: src/handler.apiHandler\n    provisionedConcurrency: 5 # हमेशा 5 तैयार इंस्टेंस
\n\n

1.3. इम्पोर्ट और कोड का ऑप्टिमाइज़ेशन

\n

फ़ंक्शन के अंदर "भारी" लाइब्रेरी से बचें। उदाहरण के लिए, पूरे aws-sdk v3 के बजाय केवल आवश्यक क्लाइंट इम्पोर्ट करें:

\n\n
// खराब: import * as AWS from 'aws-sdk';\n// अच्छा:\nimport { DynamoDBClient } from '@aws-sdk/client-dynamodb';\nimport { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
\n\n

2. Lambda Layers और निर्भरताओं के साथ कार्य

\n\n

Lambda Layers आपको सामान्य कोड और निर्भरताओं (जैसे, ORM, वैलिडेटर) को फ़ंक्शन के बाहर रखने की अनुमति देते हैं। इससे डिप्लॉय तेज़ होता है और प्रत्येक अलग पैकेज का आकार कम होता है।

\n\n

2.1. सामान्य उपयोगिताओं के साथ लेयर बनाना

\n

प्रोजेक्ट संरचना इस प्रकार दिख सकती है:

\n\n
project/\n├── layers/\n│   └── common/\n│       └── nodejs/\n│           ├── package.json\n│           └── node_modules/\n├── functions/\n│   ├── createUser.ts\n│   └── getUser.ts\n└── serverless.yml
\n\n

serverless.yml में लेयर जोड़ें:

\n\n
layers:\n  commonLibs:\n    path: layers/common\n    compatibleRuntimes:\n      - nodejs18.x\nfunctions:\n  createUser:\n    handler: functions/createUser.handler\n    layers:\n      - { Ref: CommonLibsLambdaLayer }
\n\n

2.2. लेयर्स के लिए टाइपिफिकेशन

\n

TypeScript को लेयर से टाइप दिखाने के लिए, पथों के साथ tsconfig.json बनाएं:

\n\n
{\n  "compilerOptions": {\n    "paths": {\n      "@common/*": ["layers/common/nodejs/*"]\n    }\n  }\n}
\n\n

अब फ़ंक्शन में लिखा जा सकता है:

\n
import { validateEmail } from '@common/validators';
\n\n

3. VPC के साथ कार्य और सुरक्षा

\n\n

VPC के अंदर काम करने वाले Lambda फ़ंक्शन सार्वजनिक इंटरनेट तक पहुंच खो देते हैं (जब तक NAT Gateway कॉन्फ़िगर न किया गया हो)। यह RDS, ElastiCache या प्राइवेट API से कनेक्शन के लिए महत्वपूर्ण है।

\n\n

3.1. VPC में Lambda सेट करना

\n

serverless.yml के माध्यम से कॉन्फ़िगरेशन:

\n\n
provider:\n  vpc:\n    securityGroupIds:\n      - sg-12345\n    subnetIds:\n      - subnet-abc\n      - subnet-def\n\nfunctions:\n  dbHandler:\n    handler: src/db.handler\n    vpc: true # प्रोवाइडर सेटिंग्स को इनहेरिट करता है
\n\n

3.2. कनेक्शन के लिए "Thin Handler" पैटर्न

\n

पढ़ना जारी रखें

ब्लॉग

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