এই নিবন্ধটি AWS পরিষেবাগুলি ব্যবহার করে একটি সার্ভারহীন API-এর বিকাশ প্রদর্শন করে এবং AWS পরিবেশের মধ্যে একটি অবিচ্ছিন্ন ইন্টিগ্রেশন/কন্টিনিউয়াস ডিপ্লয়মেন্ট (CICD) পাইপলাইন স্থাপন করে।
অংশ 1: API গেটওয়ে থেকে অনুরোধগুলি পরিচালনা করতে এবং সার্ভারহীন অ্যাপ্লিকেশন মডেল ব্যবহার করে DynamoDB-তে ডেটা বজায় রাখার জন্য একটি Lambda ফাংশন তৈরির অন্বেষণ করে।
পার্ট 2: AWS-এ কোডকমিট রিপোজিটরি কনফিগার করার প্রয়োজনীয় পদক্ষেপের বিশদ বিবরণ দেয় এবং একটি CICD পাইপলাইন সেট আপ করে যা রিপোজিটরিতে নতুন পরিবর্তন জমা দেওয়ার পরে স্বয়ংক্রিয়ভাবে একটি বিল্ড প্রক্রিয়া শুরু করে।
এই প্রকল্পের জন্য, আপনার একটি AWS অ্যাকাউন্টের প্রয়োজন হবে (ফ্রি টিয়ার যথেষ্ট)। নিম্নলিখিত AWS উপাদানগুলি ব্যবহার করা হবে:
নিশ্চিত করুন যে আপনি আপনার স্থানীয় উন্নয়ন পরিবেশ নিম্নরূপ সেট আপ করেছেন:
AWS CLI ইনস্টল করুন : AWS কমান্ড লাইন ইন্টারফেস ইনস্টল করতে এখানে নির্দেশিকা অনুসরণ করুন।
AWS SAM (সার্ভারলেস অ্যাপ্লিকেশন মডেল) ইনস্টল করুন : এখানে নির্দেশাবলী অনুসরণ করে SAM CLI ইনস্টল করুন।
একটি আইডিই চয়ন করুন : বিকাশের জন্য ইন্টেলিজে বা অনুরূপ আইডিই ব্যবহার করুন। আমি IntelliJ পছন্দ করি
প্যাকেজিংয়ের জন্য মাভেন : আপনার অ্যাপ্লিকেশন প্যাকেজিংয়ের জন্য ম্যাভেন ইনস্টল করা আছে তা নিশ্চিত করুন।
ঐচ্ছিক: ডকার (যদি আপনি স্থানীয়ভাবে ল্যাম্বডা ফাংশন পরীক্ষা করতে চান): আপনি যদি স্থানীয়ভাবে ল্যাম্বডা ফাংশন পরীক্ষা করার পরিকল্পনা করেন তবে ডকার ইনস্টল করুন।
এই সরঞ্জাম এবং উপাদানগুলি প্রকল্পের ভিত্তি তৈরি করবে।
এই বিভাগে, আমরা AWS SAM ব্যবহার করে একটি স্টার্টার প্রকল্প তৈরি করার প্রক্রিয়া দেখতে পাব, যার মধ্যে হ্যান্ডলার ক্লাস সম্পূর্ণ করা, বিল্ডিং করা, AWS-এ স্থাপন করা এবং পোস্টম্যান ব্যবহার করে পরীক্ষা পরিচালনা করা।
পরিবেশ সেটআপ
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-এ পরিবর্তনগুলি তৈরি এবং স্থাপনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। প্রকল্পের জন্য ফাইল আপডেট করুন. এই ফাইলের মধ্যে ফোকাস করার মূল উপাদানগুলি হল 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 অ্যাক্সেস মঞ্জুর করুন।
এই ধাপটি নিশ্চিত করে যে Lambda ফাংশনের DynamoDB এর সাথে ইন্টারঅ্যাক্ট করার জন্য প্রয়োজনীয় অনুমতি রয়েছে।
API গেটওয়েতে নেভিগেট করুন, তারপর আপনার পরিষেবার URL পেতে এই পদক্ষেপগুলি অনুসরণ করুন:
AWS কনসোলে API গেটওয়েতে যান।
আপনার API নির্বাচন করুন.
বাম সাইডবারে, "পর্যায়ে" ক্লিক করুন।
"পর্যায়ের" অধীনে, "প্রোড" পর্যায় নির্বাচন করুন।
স্টেজ এডিটর বিভাগে, আপনি "ইনভোক ইউআরএল" পাবেন। এই URL কপি করুন.
Content-Type: application/json
)।
এই বিভাগে, আমরা 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 প্রকল্প সেট আপ করুন যা আপনার অ্যাপ্লিকেশনটি কীভাবে তৈরি করবেন তা নির্দিষ্ট করে। এর মধ্যে রয়েছে বিল্ড এনভায়রনমেন্ট, বিল্ড কমান্ড এবং নির্ভরতা সংজ্ঞায়িত করা।
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
স্থানীয় থেকে সংগ্রহস্থলে নতুন ফাইলটি পুশ করুন।
এর পরে, আপনি কোডটি রেপো থেকে টেনে নেওয়া হয়েছে এবং শিল্পকর্মগুলি তৈরি করা হয়েছে কিনা তা দেখতে প্রকল্পটি তৈরি করতে পারেন।
একটি কোড পাইপলাইন তৈরি করুন
পাইপলাইনটি স্বয়ংক্রিয়ভাবে গিট কমিটের উপর ভিত্তি করে কোড তৈরি এবং স্থাপন করবে।
পাইপলাইন পরীক্ষা করুন
$ 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
এটি আপনার কোডে পরিবর্তন করার প্রক্রিয়াকে অনুকরণ করবে, সেগুলিকে সংগ্রহস্থলে ঠেলে দেবে এবং CICD পাইপলাইন স্বয়ংক্রিয়ভাবে ট্রিগার করবে এবং আপডেট করা কোডটি স্থাপন করবে।
AWS API গেটওয়ে, Lambda, DynamoDB, CodeCommit, CodeBuild, এবং CodePipeline ব্যবহার করে, নিবন্ধটি দেখায় কিভাবে একটি স্থিতিস্থাপক এবং স্বয়ংক্রিয় স্থাপনা প্রক্রিয়ার স্থপতি করা যায়।
পড়ার জন্য আপনাকে ধন্যবাদ. আপনার সার্ভারহীন প্রচেষ্টা সফলতা এবং উদ্ভাবনের সাথে পূরণ হোক!