Go में Serverless फंक्शन: AWS Lambda पूरी गाइड

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

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

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

Go और AWS Lambda के साथ Serverless फंक्शन का परिचय

\n

Serverless आर्किटेक्चर आज स्केलेबल और किफायती एप्लिकेशन बनाने का मानक बन गया है। AWS Lambda इस क्षेत्र में अग्रणी है, और Go (Golang) अपनी परफॉरमेंस, तेज़ स्टार्टअप और छोटे बाइनरी साइज़ के कारण serverless फंक्शन लिखने के लिए आदर्श भाषा है। इस लेख में हम पूरी प्रक्रिया को कवर करेंगे: एक साधारण फंक्शन बनाने से लेकर डिप्लॉय और मॉनिटरिंग तक।

\n

Go क्यों? Node.js या Python के विपरीत, Go नेटिव बाइनरी फ़ाइल में कंपाइल होता है, जो कोल्ड स्टार्ट (cold start) को मिलीसेकंड में कम कर देता है। यह हाई-लोड सिस्टम के लिए बेहद ज़रूरी है।

\n\n

मुख्य भाग

\n\n

1. Go में Lambda फंक्शन बनाना और उसकी संरचना

\n

Go में किसी भी Lambda फंक्शन की शुरुआत github.com/aws/aws-lambda-go/lambda पैकेज को इम्पोर्ट करने से होती है। आइए एक मिनिमल उदाहरण देखें:

\n\n
package main\n\nimport (\n    "github.com/aws/aws-lambda-go/lambda"\n)\n\ntype MyEvent struct {\n    Name string `json:"name"`\n}\n\ntype MyResponse struct {\n    Message string `json:"message"`\n}\n\nfunc HandleRequest(event MyEvent) (MyResponse, error) {\n    return MyResponse{Message: "नमस्ते, " + event.Name + "!"}, nil\n}\n\nfunc main() {\n    lambda.Start(HandleRequest)\n}
\n\n

मुख्य बिंदु:

\n
    \n
  • Handler — वह फंक्शन है जिसे AWS Lambda कॉल करता है। यह किसी भी डेटा टाइप (स्ट्रक्चर, स्ट्रिंग, इंटरफ़ेस) को स्वीकार और रिटर्न कर सकता है।
  • \n
  • कॉन्टेक्स्ट — वैकल्पिक पहला आर्गुमेंट: func HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error)। यह टाइमआउट पर एक्ज़ीक्यूशन को रद्द करने की अनुमति देता है।
  • \n
  • एरर (error) Lambda को एक्ज़ीक्यूशन विफलता के बारे में सूचित करता है।
  • \n
\n\n

2. विभिन्न AWS सेवाओं से इवेंट हैंडल करना

\n

Lambda का उपयोग अक्सर S3, DynamoDB, SQS और API Gateway इवेंट्स के लिए ट्रिगर के रूप में किया जाता है। Go github.com/aws/aws-lambda-go/events पैकेज के माध्यम से सभी प्रकार के इवेंट्स को सपोर्ट करता है।

\n\n

API Gateway (HTTP रिक्वेस्ट) के लिए उदाहरण:

\n
package main\n\nimport (\n    "github.com/aws/aws-lambda-go/lambda"\n    "github.com/aws/aws-lambda-go/events"\n)\n\nfunc handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {\n    return events.APIGatewayProxyResponse{\n        Body:       "Hello, World!",\n        StatusCode: 200,\n        Headers:    map[string]string{"Content-Type": "text/plain"},\n    }, nil\n}\n\nfunc main() {\n    lambda.Start(handler)\n}
\n\n

S3 (बकेट में नई ऑब्जेक्ट) के लिए उदाहरण:

\n
package main\n\nimport (\n    "context"\n    "fmt"\n    "github.com/aws/aws-lambda-go/lambda"\n    "github.com/aws/aws-lambda-go/events"\n)\n\nfunc handler(ctx context.Context, s3Event events.S3Event) error {\n    for _, record := range s3Event.Records {\n        bucket := record.S3.Bucket.Name\n        key := record.S3.Object.Key\n        fmt.Printf("नई फ़ाइल: %s बकेट %s में\\n", key, bucket)\n    }\n    return nil\n}\n\nfunc main() {\n    lambda.Start(handler)\n}
\n
    \n
  • events.S3Event, events.SNSEvent, events.DynamoDBEvent और अन्य का उपयोग करें।
  • \n
  • कस्टम इवेंट्स (जैसे CloudWatch से) के लिए json.Unmarshal का उपयोग करें।
  • \n
\n\n

3. कंपाइलेशन, डिप्लॉय और बेस्ट प्रैक्टिसेज

\n

Go Linux (x86_64 या arm64 आर्किटेक्चर) के लिए कंपाइल होता है। Lambda के लिए बाइनरी फ़ाइल बनाएं:

\n
# x86_64 के लिए\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\n\n# ARM (Graviton) के लिए — सस्ता और तेज़\nGOOS=linux GOARCH=arm64 go build -o bootstrap main.go
\n\n

फिर ZIP में पैक करें और AWS CLI या कंसोल के माध्यम से अपलोड करें:

\n
zip function.zip bootstrap\naws lambda create-function \\\n    --function-name my-go-function \\\n    --runtime provided.al2023 \\\n    --role arn:aws:iam::XXXXXXXXXXX                

ब्लॉग

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