paint-brush
AWS सर्वर रहित एपीआई और CICD पाइपलाइन बनाने के लिए एक गाइडद्वारा@pchandel09
6,697 रीडिंग
6,697 रीडिंग

AWS सर्वर रहित एपीआई और CICD पाइपलाइन बनाने के लिए एक गाइड

द्वारा Puneet Chandel11m2023/10/27
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

यह आलेख AWS सेवाओं का उपयोग करते हुए सर्वर रहित API के विकास को प्रदर्शित करता है और AWS वातावरण के भीतर एक सतत एकीकरण/निरंतर परिनियोजन (CICD) पाइपलाइन स्थापित करता है।
featured image - AWS सर्वर रहित एपीआई और CICD पाइपलाइन बनाने के लिए एक गाइड
Puneet Chandel HackerNoon profile picture


अवलोकन

यह आलेख AWS सेवाओं का उपयोग करते हुए सर्वर रहित API के विकास को प्रदर्शित करता है और AWS वातावरण के भीतर एक सतत एकीकरण/निरंतर परिनियोजन (CICD) पाइपलाइन स्थापित करता है।


भाग 1: एपीआई गेटवे से अनुरोधों को संभालने और सर्वर रहित एप्लिकेशन मॉडल का उपयोग करके डायनेमोडीबी में डेटा को बनाए रखने के लिए लैम्ब्डा फ़ंक्शन के निर्माण का अन्वेषण करता है।


भाग 2: AWS में CodeCommit रिपॉजिटरी को कॉन्फ़िगर करने और एक CICD पाइपलाइन स्थापित करने के लिए आवश्यक चरणों का विवरण देता है जो रिपॉजिटरी में नए परिवर्तन प्रस्तुत करने पर स्वचालित रूप से एक निर्माण प्रक्रिया शुरू करता है।

आवश्यक शर्तें

इस प्रोजेक्ट के लिए, आपको एक AWS खाते की आवश्यकता होगी (फ्री टियर पर्याप्त है)। निम्नलिखित AWS घटकों का उपयोग किया जाएगा:


  • एडब्ल्यूएस एपीआई गेटवे
  • एडब्ल्यूएस लैम्ब्डा
  • एडब्ल्यूएस डायनेमोडीबी
  • एडब्ल्यूएस कोडकमिट
  • एडब्ल्यूएस कोडबिल्ड
  • एडब्ल्यूएस कोडपाइपलाइन
  • एडब्लूएस एस3
  • विविध - क्लाउडवॉच, आईएएम, आदि


सुनिश्चित करें कि आपने अपना स्थानीय विकास परिवेश निम्नानुसार स्थापित किया है:


  1. AWS CLI स्थापित करें : AWS कमांड लाइन इंटरफ़ेस स्थापित करने के लिए यहां दिए गए गाइड का पालन करें।


  2. AWS SAM (सर्वर रहित एप्लिकेशन मॉडल) स्थापित करें : यहां दिए गए निर्देशों का पालन करके SAM CLI स्थापित करें।


  3. एक IDE चुनें : विकास के लिए IntelliJ या समान IDE का उपयोग करें। मुझे IntelliJ पसंद है


  4. पैकेजिंग के लिए मावेन : सुनिश्चित करें कि आपने अपने एप्लिकेशन की पैकेजिंग के लिए मावेन स्थापित किया है।


  5. वैकल्पिक: डॉकर (यदि आपको स्थानीय स्तर पर लैम्ब्डा कार्यों का परीक्षण करने की आवश्यकता है): यदि आप स्थानीय स्तर पर लैम्ब्डा कार्यों का परीक्षण करने की योजना बना रहे हैं तो डॉकर स्थापित करें।


ये उपकरण और घटक परियोजना की नींव बनाएंगे।

भाग 1: विकास

इस अनुभाग में, हम AWS SAM का उपयोग करके एक स्टार्टर प्रोजेक्ट बनाने की प्रक्रिया देखेंगे, जिसमें हैंडलर क्लास को पूरा करना, निर्माण करना, AWS पर तैनाती करना और पोस्टमैन का उपयोग करके परीक्षण करना शामिल है।


पर्यावरण सेटअप

  1. एडब्ल्यूएस सेटअप :

    https://aws.amazon.com/console/ पर AWS कंसोल पर जाएं, अपने व्यवस्थापक उपयोगकर्ता क्रेडेंशियल का उपयोग करके लॉग इन करें।

    1. IAM में एक उपयोगकर्ता बनाएं :
      • आईएएम में, स्थानीय विकास और सीएलआई/एसएएम उपयोग के लिए समर्पित एक उपयोगकर्ता बनाएं।
    2. एक DynamoDB तालिका बनाएं :
      • नाम: "उपयोगकर्ता", प्राथमिक कुंजी: "आईडी" (प्रकार: स्ट्रिंग)
  2. स्थानीय मशीन पर AWS CLI कॉन्फ़िगर करें :

    • एक टर्मिनल खोलें और $ aws configure चलाएँ
    • पहले बनाए गए IAM उपयोगकर्ता के लिए एक्सेस कुंजी और अन्य डिफ़ॉल्ट मान प्रदान करें
  3. AWS सर्वर रहित एप्लिकेशन मॉडल (SAM) का उपयोग करके एक प्रोजेक्ट प्रारंभ करें :

    • अपना टर्मिनल खोलें और $ sam init चलाएँ
    • AWS क्विक स्टार्ट टेम्पलेट चुनें।
    • "हैलो वर्ल्ड" उदाहरण चुनें।
    • जावा 11 या 17 चुनें, पैकेज प्रकार को ज़िप के रूप में चुनें, और मेवेन को निर्भरता प्रबंधक के रूप में उपयोग करें।
    • क्लाउडवॉच और एक्सरे के साथ लॉगिंग और मॉनिटरिंग सक्षम करें।
  4. प्रोजेक्ट का नाम बदलें : प्रोजेक्ट का नाम अपने पसंदीदा नाम पर बदलें।

  5. IntelliJ में प्रोजेक्ट खोलें : IntelliJ लॉन्च करें, और प्रोजेक्ट खोलें।

  6. 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" प्रदान करें, और डिफ़ॉल्ट विकल्प चुनें।


आउटपुट बनाए गए क्लाउडफॉर्मेशन स्टैक को प्रदर्शित करेगा और एपीआई गेटवे एंडपॉइंट भी प्रदान करेगा।

एपीआई का परीक्षण करें

एपीआई का परीक्षण करने से पहले, डायनेमोडीबी को एसएएम द्वारा बनाई गई लैम्ब्डा भूमिका तक पहुंच प्रदान करें।

  • AWS कंसोल में लैम्ब्डा फ़ंक्शन खोलें।


  • "अनुमतियाँ" पर जाएँ, और भूमिका का नाम खोजें।


  • इस भूमिका में "DynamoDBFullAccess" अनुमति जोड़ें।


यह चरण सुनिश्चित करता है कि लैम्ब्डा फ़ंक्शन के पास DynamoDB के साथ इंटरैक्ट करने के लिए आवश्यक अनुमतियाँ हैं।




एपीआई गेटवे पर नेविगेट करें, फिर अपनी सेवा के लिए यूआरएल प्राप्त करने के लिए इन चरणों का पालन करें:

  1. AWS कंसोल में API गेटवे पर जाएँ।

  2. अपना एपीआई चुनें.

  3. बाएँ साइडबार में, "चरण" पर क्लिक करें।

  4. "चरणों" के अंतर्गत, "उत्पाद" चरण का चयन करें।

  5. स्टेज एडिटर अनुभाग में, आपको "इनवोक यूआरएल" मिलेगा। इस यूआरएल को कॉपी करें.



  • पोस्टमैन एप्लिकेशन लॉन्च करें.
  • एक पोस्ट अनुरोध बनाएं: निम्नलिखित विवरण के साथ एक नया अनुरोध सेट करें:
    • विधि: पोस्ट
    • यूआरएल: पहले प्राप्त एपीआई गेटवे एंडपॉइंट यूआरएल चिपकाएँ।
  • हेडर सेट करें: कोई भी आवश्यक हेडर जोड़ें (उदाहरण के लिए, Content-Type: application/json )।


  • अनुरोध निकाय जोड़ें: उस उपयोगकर्ता डेटा का प्रतिनिधित्व करने वाला एक JSON ऑब्जेक्ट बनाएं जिसे आप अनुरोध में भेजना चाहते हैं। यह वह डेटा होगा जिसे आप DynamoDB में संग्रहीत करने की अपेक्षा करते हैं।


भाग II सीआईसीडी पाइपलाइन लागू करें

इस अनुभाग में, हम प्रदर्शित करेंगे कि 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 प्रोजेक्ट बनाएं

एक कोडबिल्ड प्रोजेक्ट सेट करें जो निर्दिष्ट करता है कि आपका एप्लिकेशन कैसे बनाया जाए। इसमें बिल्ड वातावरण, बिल्ड कमांड और निर्भरता को परिभाषित करना शामिल है।


  • बिल्ड फ़ाइलों को संग्रहीत करने के लिए एक S3 बकेट बनाएं।


  • AWS कोड बिल्ड खोजें, एक नया प्रोजेक्ट बनाएं, और कोड के स्रोत के रूप में CodeCommit और कलाकृतियों के भंडारण के लिए S3 प्रदान करें।


कोडबिल्ड सेट अप करने के लिए, आपको अपनी प्रोजेक्ट निर्देशिका में 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


नई फ़ाइल को स्थानीय से रिपॉजिटरी में पुश करें।


इसके बाद, आप यह देखने के लिए प्रोजेक्ट बना सकते हैं कि क्या कोड रेपो से खींच लिया गया है और कलाकृतियाँ बनाई गई हैं।


एक कोडपाइपलाइन बनाएं

  • AWS CodePipeline में एक नई पाइपलाइन बनाएं।


  • स्रोत के रूप में पाइपलाइन को अपने CodeCommit रिपॉजिटरी से कनेक्ट करें।


  • कोडबिल्ड को बिल्ड चरण के रूप में उपयोग करने के लिए पाइपलाइन को कॉन्फ़िगर करें।


  • आपके द्वारा बनाए गए टेम्पलेट का उपयोग करके क्लाउडफ़ॉर्मेशन को ट्रिगर करने के लिए एक परिनियोजन चरण जोड़ें।


पाइपलाइन स्वचालित रूप से गिट कमिट के आधार पर कोड बनाएगी और तैनात करेगी।



पाइपलाइन का परीक्षण करें


  • अपना प्रोजेक्ट IntelliJ में खोलें.


  • अपनी किसी फ़ाइल में एक छोटा सा बदलाव करें, उदाहरण के लिए, एक और लॉगर लाइन जोड़ें।


  • परिवर्तन को अपने स्थानीय Git रिपॉजिटरी में प्रतिबद्ध करें।


  • कमिट को CodeCommit रिपॉजिटरी में पुश करें।


 $ 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 CodePipeline कंसोल पर जाएँ।


  • आपको पाइपलाइन स्वचालित रूप से प्रारंभ होती दिखनी चाहिए। यह रिपॉजिटरी से नवीनतम कोड खींचेगा, CodeBuild का उपयोग करके प्रोजेक्ट बनाएगा, और CloudFormation का उपयोग करके इसे तैनात करेगा।


  • कोडपाइपलाइन डैशबोर्ड में प्रगति की निगरानी करें।


यह आपके कोड में परिवर्तन करने, उन्हें रिपॉजिटरी में भेजने और सीआईसीडी पाइपलाइन को स्वचालित रूप से ट्रिगर करने और अपडेट किए गए कोड को तैनात करने की प्रक्रिया का अनुकरण करेगा।







































AWS API गेटवे, Lambda, DynamoDB, CodeCommit, CodeBuild, और CodePipeline का उपयोग करके, लेख दर्शाता है कि एक लचीली और स्वचालित तैनाती प्रक्रिया को कैसे तैयार किया जाए।


पढ़ने के लिए आपका शुक्रिया। आपके सर्वर रहित प्रयास सफलता और नवीनता के साथ पूरे हों!