paint-brush
একটি AWS সার্ভারলেস API এবং CICD পাইপলাইন তৈরির জন্য একটি নির্দেশিকা৷দ্বারা@pchandel09
6,731 পড়া
6,731 পড়া

একটি AWS সার্ভারলেস API এবং CICD পাইপলাইন তৈরির জন্য একটি নির্দেশিকা৷

দ্বারা Puneet Chandel11m2023/10/27
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই নিবন্ধটি AWS পরিষেবাগুলি ব্যবহার করে একটি সার্ভারহীন API-এর বিকাশ প্রদর্শন করে এবং AWS পরিবেশের মধ্যে একটি অবিচ্ছিন্ন ইন্টিগ্রেশন/কন্টিনিউয়াস ডিপ্লয়মেন্ট (CICD) পাইপলাইন স্থাপন করে।
featured image - একটি AWS সার্ভারলেস API এবং CICD পাইপলাইন তৈরির জন্য একটি নির্দেশিকা৷
Puneet Chandel HackerNoon profile picture


ওভারভিউ

এই নিবন্ধটি AWS পরিষেবাগুলি ব্যবহার করে একটি সার্ভারহীন API-এর বিকাশ প্রদর্শন করে এবং AWS পরিবেশের মধ্যে একটি অবিচ্ছিন্ন ইন্টিগ্রেশন/কন্টিনিউয়াস ডিপ্লয়মেন্ট (CICD) পাইপলাইন স্থাপন করে।


অংশ 1: API গেটওয়ে থেকে অনুরোধগুলি পরিচালনা করতে এবং সার্ভারহীন অ্যাপ্লিকেশন মডেল ব্যবহার করে DynamoDB-তে ডেটা বজায় রাখার জন্য একটি Lambda ফাংশন তৈরির অন্বেষণ করে।


পার্ট 2: AWS-এ কোডকমিট রিপোজিটরি কনফিগার করার প্রয়োজনীয় পদক্ষেপের বিশদ বিবরণ দেয় এবং একটি CICD পাইপলাইন সেট আপ করে যা রিপোজিটরিতে নতুন পরিবর্তন জমা দেওয়ার পরে স্বয়ংক্রিয়ভাবে একটি বিল্ড প্রক্রিয়া শুরু করে।

পূর্বশর্ত

এই প্রকল্পের জন্য, আপনার একটি AWS অ্যাকাউন্টের প্রয়োজন হবে (ফ্রি টিয়ার যথেষ্ট)। নিম্নলিখিত AWS উপাদানগুলি ব্যবহার করা হবে:


  • AWS API গেটওয়ে
  • এডব্লিউএস ল্যাম্বদা
  • AWS DynamoDB
  • AWS কোড কমিট
  • AWS কোডবিল্ড
  • AWS কোড পাইপলাইন
  • AWS S3
  • বিবিধ - ক্লাউডওয়াচ, আইএএম, ইত্যাদি


নিশ্চিত করুন যে আপনি আপনার স্থানীয় উন্নয়ন পরিবেশ নিম্নরূপ সেট আপ করেছেন:


  1. AWS CLI ইনস্টল করুন : AWS কমান্ড লাইন ইন্টারফেস ইনস্টল করতে এখানে নির্দেশিকা অনুসরণ করুন।


  2. AWS SAM (সার্ভারলেস অ্যাপ্লিকেশন মডেল) ইনস্টল করুন : এখানে নির্দেশাবলী অনুসরণ করে SAM CLI ইনস্টল করুন।


  3. একটি আইডিই চয়ন করুন : বিকাশের জন্য ইন্টেলিজে বা অনুরূপ আইডিই ব্যবহার করুন। আমি IntelliJ পছন্দ করি


  4. প্যাকেজিংয়ের জন্য মাভেন : আপনার অ্যাপ্লিকেশন প্যাকেজিংয়ের জন্য ম্যাভেন ইনস্টল করা আছে তা নিশ্চিত করুন।


  5. ঐচ্ছিক: ডকার (যদি আপনি স্থানীয়ভাবে ল্যাম্বডা ফাংশন পরীক্ষা করতে চান): আপনি যদি স্থানীয়ভাবে ল্যাম্বডা ফাংশন পরীক্ষা করার পরিকল্পনা করেন তবে ডকার ইনস্টল করুন।


এই সরঞ্জাম এবং উপাদানগুলি প্রকল্পের ভিত্তি তৈরি করবে।

পার্ট 1: উন্নয়ন

এই বিভাগে, আমরা AWS SAM ব্যবহার করে একটি স্টার্টার প্রকল্প তৈরি করার প্রক্রিয়া দেখতে পাব, যার মধ্যে হ্যান্ডলার ক্লাস সম্পূর্ণ করা, বিল্ডিং করা, AWS-এ স্থাপন করা এবং পোস্টম্যান ব্যবহার করে পরীক্ষা পরিচালনা করা।


পরিবেশ সেটআপ

  1. AWS সেটআপ :

    https://aws.amazon.com/console/- এ AWS কনসোলে যান, আপনার অ্যাডমিন ব্যবহারকারীর শংসাপত্র ব্যবহার করে লগ ইন করুন।

    1. আইএএম-এ একজন ব্যবহারকারী তৈরি করুন :
      • IAM-এ, স্থানীয় উন্নয়ন এবং CLI/SAM ব্যবহারের জন্য নিবেদিত একজন ব্যবহারকারী তৈরি করুন।
    2. একটি DynamoDB টেবিল তৈরি করুন :
      • নাম: "ব্যবহারকারী", প্রাথমিক কী: "আইডি" (প্রকার: স্ট্রিং)
  2. স্থানীয় মেশিনে AWS CLI কনফিগার করুন :

    • একটি টার্মিনাল খুলুন এবং $ aws configure চালান
    • আগে তৈরি করা IAM ব্যবহারকারীর জন্য অ্যাক্সেস কী এবং অন্যান্য ডিফল্ট মান প্রদান করুন
  3. AWS সার্ভারলেস অ্যাপ্লিকেশন মডেল (SAM) ব্যবহার করে একটি প্রকল্প শুরু করুন :

    • আপনার টার্মিনাল খুলুন এবং $ sam init চালান
    • AWS দ্রুত শুরু টেমপ্লেট চয়ন করুন.
    • একটি "হ্যালো ওয়ার্ল্ড" উদাহরণ বেছে নিন।
    • Java 11 বা 17 নির্বাচন করুন, জিপ হিসাবে প্যাকেজ টাইপ, এবং নির্ভরতা পরিচালক হিসাবে Maven ব্যবহার করুন।
    • CloudWatch এবং XRay দিয়ে লগিং এবং পর্যবেক্ষণ সক্ষম করুন।
  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-এ পরিবর্তনগুলি তৈরি এবং স্থাপনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। প্রকল্পের জন্য ফাইল আপডেট করুন. এই ফাইলের মধ্যে ফোকাস করার মূল উপাদানগুলি হল Lambda ফাংশনের নাম এবং API গেটওয়ে এন্ডপয়েন্ট। এগুলি আপনার সার্ভারহীন অ্যাপ্লিকেশনের কার্যকারিতার কেন্দ্রবিন্দু।


 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


SAM ব্যবহার করে কোড তৈরি করুন এবং স্থাপন করুন

ইন্টেলিজে, টার্মিনাল খুলুন এবং নিম্নলিখিত কমান্ডগুলি চালান:

$ sam build

$ sam deploy –guided


অনুরোধ করা হলে, "PcAwsUsersApi" হিসাবে স্ট্যাকের নাম প্রদান করুন এবং ডিফল্ট বিকল্পগুলি বেছে নিন।


আউটপুট ক্লাউডফরমেশন স্ট্যাকটি প্রদর্শন করবে যা তৈরি করা হয়েছে এবং API গেটওয়ে এন্ডপয়েন্টও প্রদান করবে।

API পরীক্ষা করুন

API পরীক্ষা করার আগে, SAM দ্বারা তৈরি Lambda ভূমিকাতে DynamoDB অ্যাক্সেস মঞ্জুর করুন।

  • AWS কনসোলে Lambda ফাংশন খুলুন।


  • "অনুমতি" এ নেভিগেট করুন এবং ভূমিকার নামটি সনাক্ত করুন৷


  • এই ভূমিকায় "DynamoDBFullAccess" অনুমতি যোগ করুন।


এই ধাপটি নিশ্চিত করে যে Lambda ফাংশনের DynamoDB এর সাথে ইন্টারঅ্যাক্ট করার জন্য প্রয়োজনীয় অনুমতি রয়েছে।




API গেটওয়েতে নেভিগেট করুন, তারপর আপনার পরিষেবার URL পেতে এই পদক্ষেপগুলি অনুসরণ করুন:

  1. AWS কনসোলে API গেটওয়েতে যান।

  2. আপনার API নির্বাচন করুন.

  3. বাম সাইডবারে, "পর্যায়ে" ক্লিক করুন।

  4. "পর্যায়ের" অধীনে, "প্রোড" পর্যায় নির্বাচন করুন।

  5. স্টেজ এডিটর বিভাগে, আপনি "ইনভোক ইউআরএল" পাবেন। এই URL কপি করুন.



  • পোস্টম্যান অ্যাপ্লিকেশন চালু করুন।
  • একটি পোস্ট অনুরোধ তৈরি করুন: নিম্নলিখিত বিবরণ সহ একটি নতুন অনুরোধ সেট আপ করুন:
    • পদ্ধতি: POST
    • URL: আগে প্রাপ্ত API গেটওয়ে এন্ডপয়েন্ট URL পেস্ট করুন।
  • শিরোনাম সেট করুন: যেকোনো প্রয়োজনীয় শিরোনাম যোগ করুন (যেমন, Content-Type: application/json )।


  • অনুরোধের বডি যোগ করুন: আপনি অনুরোধে যে ব্যবহারকারীর ডেটা পাঠাতে চান তার প্রতিনিধিত্ব করে একটি JSON অবজেক্ট তৈরি করুন। এটি এমন ডেটা হবে যা আপনি DynamoDB-তে সংরক্ষণ করতে চান।


পার্ট II সিআইসিডি পাইপলাইন বাস্তবায়ন

এই বিভাগে, আমরা AWS CodeCommit, CodeBuild, এবং CodePipeline ব্যবহার করে কীভাবে একটি CICD পাইপলাইন তৈরি করতে হয় তা প্রদর্শন করব। পাইপলাইন একটি বিল্ড প্রক্রিয়া শুরু করবে যা সংগ্রহস্থল থেকে কোড নিয়ে আসে, বিল্ড ফাইল ব্যবহার করে এটি তৈরি করে এবং স্ট্যাক তৈরি করতে ক্লাউডফর্মেশনকে ট্রিগার করে।


কোডকমিট রিপোজিটরি তৈরি করুন

AWS-এ লগইন করুন এবং CodeCommit পরিষেবা অনুসন্ধান করুন।


আপনার প্রোজেক্টের সোর্স কোড সংরক্ষণ করতে AWS CodeCommit-এ একটি নতুন সংগ্রহস্থল তৈরি করুন।

সংগ্রহস্থলে কোড কমিট করুন

IntelliJ-এ, টার্মিনাল খুলুন এবং ধাপ I-এ তৈরি কোড কমিট করতে নিম্নলিখিত কমান্ডগুলি লিখুন

 $ git init → This initialize local git $ git add . → This will stage files $ git commit -m "commit to CodeCommit"


রিমোট রেপোতে পরিবর্তনগুলি পুশ করুন

Aws কনসোল থেকে CodeCommit রেপো ইউআরএল কপি করুন।

 $ git remote add origin <repo URL> $ git push --set-upstream origin master --> This will prompt for user/password



AWS CodeBuild প্রকল্প তৈরি করুন

একটি CodeBuild প্রকল্প সেট আপ করুন যা আপনার অ্যাপ্লিকেশনটি কীভাবে তৈরি করবেন তা নির্দিষ্ট করে। এর মধ্যে রয়েছে বিল্ড এনভায়রনমেন্ট, বিল্ড কমান্ড এবং নির্ভরতা সংজ্ঞায়িত করা।


  • বিল্ড ফাইল সংরক্ষণ করার জন্য একটি S3 বালতি তৈরি করুন।


  • AWS কোড বিল্ডের জন্য অনুসন্ধান করুন, একটি নতুন প্রকল্প তৈরি করুন এবং কোডের জন্য একটি উৎস হিসাবে কোডকমিট প্রদান করুন এবং আর্টিফ্যাক্ট স্টোরেজের জন্য S3 প্রদান করুন


CodeBuild সেট আপ করতে, আপনাকে আপনার প্রকল্প ডিরেক্টরিতে buildspec.yml নামে একটি বিল্ড স্পেসিফিকেশন ফাইল তৈরি করতে হবে। এই ফাইলটিতে CodeBuild-এর জন্য বিল্ড কমান্ড এবং নির্দেশাবলী থাকবে।


আপনি একটি 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 কোড পাইপলাইনে একটি নতুন পাইপলাইন তৈরি করুন।


  • উৎস হিসাবে আপনার কোডকমিট সংগ্রহস্থলে পাইপলাইনটি সংযুক্ত করুন।


  • বিল্ড স্টেজ হিসাবে কোডবিল্ড ব্যবহার করতে পাইপলাইন কনফিগার করুন।


  • আপনার তৈরি করা টেমপ্লেট ব্যবহার করে ক্লাউডফর্মেশন ট্রিগার করতে একটি স্থাপনার পর্যায় যোগ করুন।


পাইপলাইনটি স্বয়ংক্রিয়ভাবে গিট কমিটের উপর ভিত্তি করে কোড তৈরি এবং স্থাপন করবে।



পাইপলাইন পরীক্ষা করুন


  • IntelliJ এ আপনার প্রকল্প খুলুন।


  • আপনার ফাইলগুলির একটিতে একটি ছোট পরিবর্তন করুন, উদাহরণস্বরূপ, আরেকটি লগার লাইন যোগ করুন।


  • আপনার স্থানীয় গিট সংগ্রহস্থলে পরিবর্তনের প্রতিশ্রুতি দিন।


  • 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 কনসোলে যান।


  • আপনি পাইপলাইন স্বয়ংক্রিয়ভাবে শুরু দেখতে হবে. এটি সংগ্রহস্থল থেকে সর্বশেষ কোড টানবে, কোডবিল্ড ব্যবহার করে প্রকল্পটি তৈরি করবে এবং ক্লাউডফর্মেশন ব্যবহার করে এটি স্থাপন করবে।


  • CodePipeline ড্যাশবোর্ডে অগ্রগতি নিরীক্ষণ করুন।


এটি আপনার কোডে পরিবর্তন করার প্রক্রিয়াকে অনুকরণ করবে, সেগুলিকে সংগ্রহস্থলে ঠেলে দেবে এবং CICD পাইপলাইন স্বয়ংক্রিয়ভাবে ট্রিগার করবে এবং আপডেট করা কোডটি স্থাপন করবে।







































AWS API গেটওয়ে, Lambda, DynamoDB, CodeCommit, CodeBuild, এবং CodePipeline ব্যবহার করে, নিবন্ধটি দেখায় কিভাবে একটি স্থিতিস্থাপক এবং স্বয়ংক্রিয় স্থাপনা প্রক্রিয়ার স্থপতি করা যায়।


পড়ার জন্য আপনাকে ধন্যবাদ. আপনার সার্ভারহীন প্রচেষ্টা সফলতা এবং উদ্ভাবনের সাথে পূরণ হোক!