AWS हाल ही में कई सेवाओं और रनटाइम को बंद कर रहा है। जैसा कि हमने अपनी प्रिय CodeCommit और अन्य महत्वपूर्ण सेवाओं के बंद होने के साथ देखा है, Go1.x अब AWS Lambda कार्यों के लिए समर्थित नहीं है।
यदि आप अधिकांश पुराने ट्यूटोरियल्स को तैनात करने का प्रयास करते हैं, तो आपको इस तरह की त्रुटियों का सामना करना पड़ सकता है:
Resource creation Initiated CREATE_FAILED AWS::Lambda::Function DemoFunction Resource handler returned message: "The runtime parameter of go1.x is no longer supported for creating or updating AWS Lambda functions. We recommend you use a supported runtime while creating or updating functions. (Service: Lambda, Status Code: 400, Request ID: 81f1f708-0a7a-40d0-8442-b9c16510d01f)" ROLLBACK_IN_PROGRESS AWS::CloudFormation::Stack lambda-go-gorilla The following resource(s) failed to create: [DemoFunction]. Rollback requested by user.
मुख्य बात यह है कि सॉफ्टवेयर में एकमात्र स्थिरांक परिवर्तन है। हालाँकि, कुछ कालातीत सिद्धांत हैं जिन्हें हमें हमेशा ध्यान में रखना चाहिए:
इस समस्या के समाधान के लिए, मैंने गो एप्लिकेशन को तैनात करने के लिए आवश्यक सभी बुनियादी ढांचे के साथ एक अद्यतन रिपॉजिटरी बनाने का निर्णय लिया। दो विकल्प उपलब्ध हैं:
आप GitHub यहां रिपॉजिटरी ढूंढ सकते हैं।
अपरिवर्तनीय बुनियादी ढांचा हमें यह घोषित करने की अनुमति देता है कि हम उच्च स्तर पर क्या चाहते हैं और यह सुनिश्चित करता है कि विकास और उत्पादन वातावरण यथासंभव करीब रहे। उदाहरण के लिए:
CompoundingFunction: Type: AWS::Serverless::Function Metadata: BuildMethod: makefile Properties: FunctionName: CompoundingFunction Architectures: ["arm64"] Handler: bootstrap Runtime: provided.al2 CodeUri: ./functions/CompoundingFunction/ MemorySize: 512 Timeout: 10 Environment: Variables: COMPOUNDING_TABLE_NAME: !Ref CompoundingTable Policies: - DynamoDBCrudPolicy: TableName: !Ref CompoundingTable Events: ApiGatewayPost: Type: Api Properties: RestApiId: !Ref ApiGateway Path: /compounding Method: POST
यदि आपके पास परीक्षणों का एक अच्छा समूह है तो रिफैक्टर करने से न डरें। सॉफ्टवेयर विकास में रीफैक्टरिंग एक आवश्यक गतिविधि है। नाम महत्वपूर्ण हैं क्योंकि वे मॉड्यूल, फ़ंक्शन, पैकेज, वेरिएबल इत्यादि में हर जगह दिखाई देते हैं।
package main import ( "context" "encoding/json" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) // Response is the structure for the response JSON type Response struct { Message string `json:"message"` GainsPerYear []float64 `json:"gainsPerYear"` } type Request struct { Principal float64 `json:"principal"` AnnualRate float64 `json:"annualRate"` Years int `json:"years"` } func HelloHandler(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { var req Request err := json.Unmarshal([]byte(event.Body), &req) if err != nil { return createResponse(400, "Invalid request body") } fmt.Println("Request", req) gainsPerYear := CalculateCompoundInterest(req.Principal, req.AnnualRate, req.Years) fmt.Println(gainsPerYear) response := Response{ Message: "Calculation successful", GainsPerYear: gainsPerYear, } body, err := json.Marshal(response) if err != nil { return createResponse(500, "Error marshalling response") } return createResponse(200, string(body)) } func createResponse(statusCode int, body string) (events.APIGatewayProxyResponse, error) { return events.APIGatewayProxyResponse{ StatusCode: statusCode, Body: body, Headers: map[string]string{"Content-Type": "application/json"}, }, nil } func main() { lambda.Start(HelloHandler) }
सर्वर रहित अनुप्रयोगों में, यूनिट परीक्षण महत्वपूर्ण हैं, लेकिन एकीकरण परीक्षण भी शामिल करना न भूलें, क्योंकि इनमें से अधिकतर एप्लिकेशन व्यावसायिक समस्याओं को हल करने के लिए एकीकरण और नीतियों पर निर्भर हैं।
func TestCalculateCompoundInterest(t *testing.T) { principal := 100000000.0 annualRate := 10.0 years := 10 result := CalculateCompoundInterest(principal, annualRate, years) lastElement := round(result[len(result)-1], 2) expected := round(259374246.01, 2) if !reflect.DeepEqual(lastElement, expected) { t.Errorf("Expected %v, but got %v", expected, lastElement) } }
सर्वर रहित आर्किटेक्चर डिफ़ॉल्ट रूप से अत्यधिक उपलब्ध होते हैं और इवेंट-संचालित होते हैं, जो अधिकांश परिचालन कार्यों को हटा देते हैं। हालाँकि, यदि आप ईसीएस और कंटेनरों पर भरोसा करना चुनते हैं, तो उपलब्धता और स्केलेबिलिटी दोनों सुनिश्चित करते हुए, अपने सर्वर के बीच ट्रैफ़िक वितरित करने के लिए एक लोड बैलेंसर शामिल करना महत्वपूर्ण है।
CompoundingLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: compounding-nlb Scheme: internet-facing Type: network Subnets: - !Ref PublicSubnetOne - !Ref PublicSubnetTwo
एक परिनियोजन पाइपलाइन सॉफ़्टवेयर वितरण प्रक्रिया को स्वचालित करती है। हमने इस प्रक्रिया को सरल बनाने के लिए एक मेकफ़ाइल बनाया, जिससे एक ही कमांड के साथ दोहराए जाने वाले कार्यों को तैनात करना और निष्पादित करना आसान हो गया। यह दृष्टिकोण आपके परिनियोजन वर्कफ़्लो में दक्षता और स्थिरता को बढ़ाता है।
सुनिश्चित करें कि आपके पास ट्रेसिंग, लॉगिंग और मेट्रिक्स मौजूद हैं। सर्वर रहित अनुप्रयोगों के साथ, इन सुविधाओं को सक्षम करना ट्रेसिंग: एक्टिव को जोड़ने जितना ही सरल है। क्लाउडवॉच जैसे केंद्रीय स्थान पर सभी लॉग देखने और सेवा की इंटरैक्शन की निगरानी करने की क्षमता अमूल्य है।
सभी एप्लिकेशन में सुरक्षा सर्वोपरि है। अमेज़ॅन कॉग्निटो का उपयोग मजबूत उपयोगकर्ता प्रमाणीकरण प्रदान करता है, जबकि एपीआई कुंजी नियंत्रण और प्राधिकरण की एक अतिरिक्त परत जोड़ती है, जिससे यह सुनिश्चित होता है कि केवल अधिकृत ग्राहक ही आपके एपीआई तक पहुंच सकते हैं।
Auth: DefaultAuthorizer: CompoundingAuthorizer Authorizers: CompoundingAuthorizer: UserPoolArn: XXXX LambdaTokenAuthorizer: FunctionArn: !GetAtt LambdaTokenAuthorizerFunction.Arn FunctionPayloadType: REQUEST Identity: Headers: - Authorization ReauthorizeEvery: 100 AddDefaultAuthorizerToCorsPreflight: false
हमले की सतह को कम करने और अनधिकृत पहुंच को रोकने के लिए प्रत्येक सेवा, उपयोगकर्ता और घटक को न्यूनतम आवश्यक अनुमतियां निर्दिष्ट करें। न्यूनतम विशेषाधिकार सिद्धांत:
Policies: - DynamoDBCrudPolicy: TableName: !Ref CompoundingTable
सॉफ्टवेयर लगातार विकसित हो रहा है, और हालांकि कुछ उपकरण और प्रथाएं बदल जाएंगी, लेकिन मूलभूत सिद्धांत वही रहेंगे। हमें अपरिवर्तनीय बुनियादी ढांचे, सीआई/सीडी, अच्छी नामकरण परंपराएं, एक मजबूत परीक्षण रणनीति, हमारे एपीआई में सुरक्षा और हमारे अनुप्रयोगों में दक्षता की आवश्यकता है। इसीलिए मैंने इस प्रोजेक्ट को सर्वर रहित तरीके से फिर से बनाने का निर्णय लिया।
एक इंजीनियर बनने और सॉफ्टवेयर के माध्यम से समाज में मूल्य पैदा करने का इससे बेहतर समय कभी नहीं रहा।
यदि आपको लेख पसंद आए, तो मेरे ब्लॉग gorgetovar.dev पर जाएं
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3