भाग 1: एपीआई गेटवे से अनुरोधों को संभालने और सर्वर रहित एप्लिकेशन मॉडल का उपयोग करके डायनेमोडीबी में डेटा को बनाए रखने के लिए लैम्ब्डा फ़ंक्शन के निर्माण का अन्वेषण करता है।
भाग 2: AWS में CodeCommit रिपॉजिटरी को कॉन्फ़िगर करने और एक CICD पाइपलाइन स्थापित करने के लिए आवश्यक चरणों का विवरण देता है जो रिपॉजिटरी में नए परिवर्तन प्रस्तुत करने पर स्वचालित रूप से एक निर्माण प्रक्रिया शुरू करता है।
AWS CLI स्थापित करें : AWS कमांड लाइन इंटरफ़ेस स्थापित करने के लिए दिए गए गाइड का पालन करें।
AWS SAM (सर्वर रहित एप्लिकेशन मॉडल) स्थापित करें : दिए गए निर्देशों का पालन करके SAM CLI स्थापित करें।
एक IDE चुनें : विकास के लिए IntelliJ या समान IDE का उपयोग करें। मुझे IntelliJ पसंद है
पैकेजिंग के लिए मावेन : सुनिश्चित करें कि आपने अपने एप्लिकेशन की पैकेजिंग के लिए मावेन स्थापित किया है।
वैकल्पिक: डॉकर (यदि आपको स्थानीय स्तर पर लैम्ब्डा कार्यों का परीक्षण करने की आवश्यकता है): यदि आप स्थानीय स्तर पर लैम्ब्डा कार्यों का परीक्षण करने की योजना बना रहे हैं तो डॉकर स्थापित करें।
पर्यावरण सेटअप
एडब्ल्यूएस सेटअप :
पर 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: //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: //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: //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 //aws.amazon.com/blogs/compute/optimizing-aws-lambda-function-performance-for-java/ Events: PcUsers: Type: Api # More info about API Event Source: //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 # //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 "//${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
एपीआई का परीक्षण करें
एपीआई का परीक्षण करने से पहले, डायनेमोडीबी को एसएएम द्वारा बनाई गई लैम्ब्डा भूमिका तक पहुंच प्रदान करें।
एपीआई गेटवे पर नेविगेट करें, फिर अपनी सेवा के लिए यूआरएल प्राप्त करने के लिए इन चरणों का पालन करें:
Content-Type: application/json
)।
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