यह आलेख AWS सेवाओं का उपयोग करते हुए सर्वर रहित API के विकास को प्रदर्शित करता है और AWS वातावरण के भीतर एक सतत एकीकरण/निरंतर परिनियोजन (CICD) पाइपलाइन स्थापित करता है।
भाग 1: एपीआई गेटवे से अनुरोधों को संभालने और सर्वर रहित एप्लिकेशन मॉडल का उपयोग करके डायनेमोडीबी में डेटा को बनाए रखने के लिए लैम्ब्डा फ़ंक्शन के निर्माण का अन्वेषण करता है।
भाग 2: AWS में CodeCommit रिपॉजिटरी को कॉन्फ़िगर करने और एक CICD पाइपलाइन स्थापित करने के लिए आवश्यक चरणों का विवरण देता है जो रिपॉजिटरी में नए परिवर्तन प्रस्तुत करने पर स्वचालित रूप से एक निर्माण प्रक्रिया शुरू करता है।
इस प्रोजेक्ट के लिए, आपको एक AWS खाते की आवश्यकता होगी (फ्री टियर पर्याप्त है)। निम्नलिखित AWS घटकों का उपयोग किया जाएगा:
सुनिश्चित करें कि आपने अपना स्थानीय विकास परिवेश निम्नानुसार स्थापित किया है:
AWS CLI स्थापित करें : AWS कमांड लाइन इंटरफ़ेस स्थापित करने के लिए यहां दिए गए गाइड का पालन करें।
AWS SAM (सर्वर रहित एप्लिकेशन मॉडल) स्थापित करें : यहां दिए गए निर्देशों का पालन करके SAM CLI स्थापित करें।
एक IDE चुनें : विकास के लिए IntelliJ या समान IDE का उपयोग करें। मुझे IntelliJ पसंद है
पैकेजिंग के लिए मावेन : सुनिश्चित करें कि आपने अपने एप्लिकेशन की पैकेजिंग के लिए मावेन स्थापित किया है।
वैकल्पिक: डॉकर (यदि आपको स्थानीय स्तर पर लैम्ब्डा कार्यों का परीक्षण करने की आवश्यकता है): यदि आप स्थानीय स्तर पर लैम्ब्डा कार्यों का परीक्षण करने की योजना बना रहे हैं तो डॉकर स्थापित करें।
ये उपकरण और घटक परियोजना की नींव बनाएंगे।
इस अनुभाग में, हम AWS SAM का उपयोग करके एक स्टार्टर प्रोजेक्ट बनाने की प्रक्रिया देखेंगे, जिसमें हैंडलर क्लास को पूरा करना, निर्माण करना, AWS पर तैनाती करना और पोस्टमैन का उपयोग करके परीक्षण करना शामिल है।
पर्यावरण सेटअप
एडब्ल्यूएस सेटअप :
https://aws.amazon.com/console/ पर AWS कंसोल पर जाएं, अपने व्यवस्थापक उपयोगकर्ता क्रेडेंशियल का उपयोग करके लॉग इन करें।
स्थानीय मशीन पर AWS CLI कॉन्फ़िगर करें :
$ aws configure
चलाएँAWS सर्वर रहित एप्लिकेशन मॉडल (SAM) का उपयोग करके एक प्रोजेक्ट प्रारंभ करें :
$ sam init
चलाएँप्रोजेक्ट का नाम बदलें : प्रोजेक्ट का नाम अपने पसंदीदा नाम पर बदलें।
IntelliJ में प्रोजेक्ट खोलें : IntelliJ लॉन्च करें, और प्रोजेक्ट खोलें।
Pom.xml में निर्भरताएँ जोड़ें :
pom.xml
फ़ाइल में आवश्यक निर्भरताएँ जोड़ें। आपको केवल DynamoDB जोड़ने की आवश्यकता है, क्योंकि अन्य निर्भरताएँ SAM द्वारा स्वचालित रूप से शामिल हो जाएंगी।
<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-events</artifactId> <version>3.11.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.12.573</version> </dependency> </dependencies>
हैंडलर क्लास लिखें
लैम्ब्डा फ़ंक्शन के लिए, सैम द्वारा स्वचालित रूप से उत्पन्न हैंडलर क्लास को संपादित करें, और निम्नलिखित कोड जोड़ें; यह एक सरल कोड है, और वास्तविक परियोजनाओं के लिए, आप अधिक मॉड्यूलर कोड का उपयोग करना चाह सकते हैं।
public class UserRequestHandler implements RequestHandler<Map<String,String>, Map<String,String>> { private AmazonDynamoDB amazonDynamoDB; private String DYNAMODB_TABLE_NAME = "users"; private Regions REGION = Regions.US_EAST_1; @Override public Map<String,String> handleRequest(Map<String,String> input, Context context) { this.initDynamoDbClient(); LambdaLogger logger = context.getLogger(); logger.log("Input payload:" + input.toString()); String userId = UUID.randomUUID().toString(); String firstName= input.get("firstName"); String lastName= input.get("lastName"); Map<String, AttributeValue> attributesMap = new HashMap<>(); attributesMap.put("id", new AttributeValue(userId)); attributesMap.put("firstName", new AttributeValue(firstName)); attributesMap.put("lastName", new AttributeValue(lastName)); logger.log(attributesMap.toString()); amazonDynamoDB.putItem(DYNAMODB_TABLE_NAME, attributesMap); Map<String, String> response = new HashMap<>(); response.put("id", userId); response.put("firstName", firstName); response.put("lastName", lastName); return response; } private void initDynamoDbClient() { this.amazonDynamoDB = AmazonDynamoDBClientBuilder.standard() .withRegion(REGION) .build(); } }
SAM टेम्प्लेट फ़ाइल अपडेट करें
SAM टेम्प्लेट फ़ाइल AWS में परिवर्तन बनाने और तैनात करने में महत्वपूर्ण भूमिका निभाती है। प्रोजेक्ट के लिए फ़ाइल अद्यतन करें. इस फ़ाइल में ध्यान केंद्रित करने वाले प्रमुख तत्व लैम्ब्डा फ़ंक्शन नाम और एपीआई गेटवे एंडपॉइंट हैं। वे आपके सर्वर रहित एप्लिकेशन की कार्यक्षमता के केंद्र में हैं।
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > pc-aws-user-api Sample SAM Template for pc-aws-user-api # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 20 MemorySize: 128 Tracing: Active Api: TracingEnabled: true Resources: UserRequestHandlerLambdaFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction Properties: CodeUri: PcAwsUsersApi Handler: com.pc.aws.users.UserRequestHandler::handleRequest Runtime: java11 Architectures: - x86_64 MemorySize: 512 Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object Variables: PARAM1: VALUE JAVA_TOOL_OPTIONS: -XX:+TieredCompilation -XX:TieredStopAtLevel=1 # More info about tiered compilation https://aws.amazon.com/blogs/compute/optimizing-aws-lambda-function-performance-for-java/ Events: PcUsers: Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api Properties: Path: /users Method: post ApplicationResourceGroup: Type: AWS::ResourceGroups::Group Properties: Name: Fn::Sub: ApplicationInsights-SAM-${AWS::StackName} ResourceQuery: Type: CLOUDFORMATION_STACK_1_0 ApplicationInsightsMonitoring: Type: AWS::ApplicationInsights::Application Properties: ResourceGroupName: Ref: ApplicationResourceGroup AutoConfigurationEnabled: 'true' Outputs: # ServerlessRestApi is an implicit API created out of Events key under Serverless::Function # Find out more about other implicit resources you can reference within SAM # https://github.com/awslabs/serverless-application-model/blob/master/docs/internals/generated_resources.rst#api PcAwsUsersApi: Description: API Gateway endpoint URL for Prod stage Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/users/" UserRequestHandlerLambdaFunction: Description: Lambda Function ARN Value: !GetAtt UserRequestHandlerLambdaFunction.Arn UserRequestHandlerLambdaFunctionIamRole: Description: Implicit IAM Role created Value: !GetAtt UserRequestHandlerLambdaFunctionRole.Arn
एसएएम का उपयोग करके कोड बनाएं और तैनात करें
IntelliJ में, टर्मिनल खोलें, और निम्नलिखित कमांड निष्पादित करें:
$ sam build
$ sam deploy –guided
संकेत मिलने पर, स्टैक नाम "PcAwsUsersApi" प्रदान करें, और डिफ़ॉल्ट विकल्प चुनें।
आउटपुट बनाए गए क्लाउडफॉर्मेशन स्टैक को प्रदर्शित करेगा और एपीआई गेटवे एंडपॉइंट भी प्रदान करेगा।
एपीआई का परीक्षण करें
एपीआई का परीक्षण करने से पहले, डायनेमोडीबी को एसएएम द्वारा बनाई गई लैम्ब्डा भूमिका तक पहुंच प्रदान करें।
यह चरण सुनिश्चित करता है कि लैम्ब्डा फ़ंक्शन के पास DynamoDB के साथ इंटरैक्ट करने के लिए आवश्यक अनुमतियाँ हैं।
एपीआई गेटवे पर नेविगेट करें, फिर अपनी सेवा के लिए यूआरएल प्राप्त करने के लिए इन चरणों का पालन करें:
AWS कंसोल में API गेटवे पर जाएँ।
अपना एपीआई चुनें.
बाएँ साइडबार में, "चरण" पर क्लिक करें।
"चरणों" के अंतर्गत, "उत्पाद" चरण का चयन करें।
स्टेज एडिटर अनुभाग में, आपको "इनवोक यूआरएल" मिलेगा। इस यूआरएल को कॉपी करें.
Content-Type: application/json
)।
इस अनुभाग में, हम प्रदर्शित करेंगे कि AWS CodeCommit, CodeBuild और CodePipeline का उपयोग करके CICD पाइपलाइन कैसे बनाई जाए। पाइपलाइन एक निर्माण प्रक्रिया शुरू करेगी जो रिपॉजिटरी से कोड प्राप्त करेगी, बिल्ड फ़ाइल का उपयोग करके इसे बनाएगी, और स्टैक बनाने के लिए क्लाउडफॉर्मेशन को ट्रिगर करेगी।
CodeCommit रिपॉजिटरी बनाएं
AWS में लॉगिन करें, और CodeCommit सेवा खोजें।
अपने प्रोजेक्ट के स्रोत कोड को संग्रहीत करने के लिए AWS CodeCommit में एक नया रिपॉजिटरी बनाएं।
रिपॉजिटरी को कोड समर्पित करें
IntelliJ में, टर्मिनल खोलें और चरण I में बनाए गए कोड को प्रतिबद्ध करने के लिए निम्नलिखित कमांड दर्ज करें
$ git init → This initialize local git $ git add . → This will stage files $ git commit -m "commit to CodeCommit"
रिमोट रेपो में परिवर्तन पुश करें
एडब्ल्यूएस कंसोल से CodeCommit रेपो यूआरएल कॉपी करें।
$ git remote add origin <repo URL> $ git push --set-upstream origin master --> This will prompt for user/password
AWS CodeBuild प्रोजेक्ट बनाएं
एक कोडबिल्ड प्रोजेक्ट सेट करें जो निर्दिष्ट करता है कि आपका एप्लिकेशन कैसे बनाया जाए। इसमें बिल्ड वातावरण, बिल्ड कमांड और निर्भरता को परिभाषित करना शामिल है।
कोडबिल्ड सेट अप करने के लिए, आपको अपनी प्रोजेक्ट निर्देशिका में buildspec.yml
नामक एक बिल्ड विनिर्देश फ़ाइल बनाने की आवश्यकता होगी। इस फ़ाइल में कोडबिल्ड के लिए बिल्ड कमांड और निर्देश होंगे।
buildspec.yml
फ़ाइल बनाने के विस्तृत निर्देशों के लिए आप यहां आधिकारिक दस्तावेज़ देख सकते हैं।
version: 0.2 phases: install: runtime-versions: java: corretto11 pre_build: commands: - echo Nothing to do in the pre_build phase... build: commands: - echo Build started on `date` - sam build - sam package --output-template-file pcoutputtemplate.yaml --s3-bucket com-appsdev-pc-001 post_build: commands: - echo Build completed on `date` artifacts: files: - pcoutputtemplate.yaml
नई फ़ाइल को स्थानीय से रिपॉजिटरी में पुश करें।
इसके बाद, आप यह देखने के लिए प्रोजेक्ट बना सकते हैं कि क्या कोड रेपो से खींच लिया गया है और कलाकृतियाँ बनाई गई हैं।
एक कोडपाइपलाइन बनाएं
पाइपलाइन स्वचालित रूप से गिट कमिट के आधार पर कोड बनाएगी और तैनात करेगी।
पाइपलाइन का परीक्षण करें
$ git branch CR01 $ git checkout CR01 $ git add . $ git commit -m “CR01” $ git push --set-upstream origin CR01 You cand also create a pull request in aws code commit, just for simplicity I am merging from local $ git checkout master $ git merge --ff-only CR01 $ git push
यह आपके कोड में परिवर्तन करने, उन्हें रिपॉजिटरी में भेजने और सीआईसीडी पाइपलाइन को स्वचालित रूप से ट्रिगर करने और अपडेट किए गए कोड को तैनात करने की प्रक्रिया का अनुकरण करेगा।
AWS API गेटवे, Lambda, DynamoDB, CodeCommit, CodeBuild, और CodePipeline का उपयोग करके, लेख दर्शाता है कि एक लचीली और स्वचालित तैनाती प्रक्रिया को कैसे तैयार किया जाए।
पढ़ने के लिए आपका शुक्रिया। आपके सर्वर रहित प्रयास सफलता और नवीनता के साथ पूरे हों!