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