এই ব্লগ পোস্টে, আপনি শিখবেন কিভাবে AWS Lambda এবং Redis Enterprise Cloud ইন্টিগ্রেট করতে হয়। একটি স্যাম্পল মুভি-ডেটাবেস অ্যাপ্লিকেশন ব্যবহার করে, আপনি খুঁজে পাবেন কিভাবে দুটি Lambda ফাংশন বিল্ড এবং ডিপ্লয় করতে হয়, একটি Node.js-এ, অন্যটি Python-এ। এই দুটি Lambda ফাংশন Redis ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয় ইনসার্ট, আপডেট, ডিলিট এবং কোয়েরি করার জন্য। অ্যাপ্লিকেশনটি RediSearch API ব্যবহার করে যা রিচ কোয়েরি এবং সার্চ ফাংশনালিটি প্রদান করে। সার্ভারলেস, AWS Lambda ব্যবহার করে, মাইক্রোসার্ভিস আর্কিটেকচারর দিকে বৃদ্ধিমান ট্রেন্ডে ফিট করে কারণ এটি ডেভেলপারদের একটি বিজনেস "সার্ভিস"-র স্কোপ একটি ছোট প্রজেক্টে কমাতে দেয় যেটি তাদের পছন্দের প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে ইমপ্লিমেন্ট করা যায়। আরও জানতে, নিচের ভিডিওটি দেখুন এবং AWS Lambda-র একটি কুইক ওভারভিউ এবং Redis Enterprise Cloud এবং Lambda ব্যবহার করে অ্যাপ্লিকেশন বানানোর গভীর গোता পড়ুন:
AWS Lambda-র একটি দ্রুত নজর
যদি আপনি ইতিমধ্যে AWS Lambda-র সাথে পরিচিত ন हों—কোম্পানির সার্ভারলেস কম্পিউট রানটাইম, যাকে Function-as-a-Service (FaaS)-ও বলা হয়—এখানে বেসিকগুলো আছে যা আপনাকে জানা দরকার। (Lambda এক্সপার্টরা নেক্সট সেকশনে যেতে পারেন।) AWS Lambda অ্যাপ্লিকেশনগুলোর একটি ফাংশন অন-ডিমান্ড রান করতে দেয় একটি নির্দিষ্ট ইভেন্টের রেসপন্সে, যা ইভেন্ট-ড্রিভেন আর্কিটেকচার (EDA) অ্যাপ্লিকেশন বানাতে একটি ভালো উপায়। AWS Lambda ফাংশনগুলো, AWS দ্বারা ফুলি ম্যানেজড, বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করে তৈরি করা যায়। সম্ভবত AWS Lambda-র সেরা অংশ হলো ডেভেলপারদের সাধারণত অ্যাপ্লিকেশন লাইফসাইকেল পুরোপুরি বুঝতে হয় না এটি ব্যবহার করতে।
AWS Lambda কয়েকটি ভিন্ন মেথড ব্যবহার করে ইনভোক করা যায়: সরাসরি AWS Console থেকে, অন্যান্য AWS সার্ভিসের ইভেন্ট ব্যবহার করে যেমন SNS, SQS, বা Kinesis, অথবা AWS Console, CloudWatch, বা S3 ইভেন্ট থেকে। আমাদের স্যাম্পল মুভি-ডেটাবেস অ্যাপ্লিকেশনে, Lambda ফাংশনগুলো HTTP REST এন্ডপয়েন্ট ব্যবহার করে ইনভোক করা হবে, এটি AWS API Gateway ব্যবহার করে করা হয়। (AWS Lambda ফাংশন ইনভোকেশন সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।)
AWS Lambda HTTP এক্সিকিউশন প্রসেস
নির্দিষ্টভাবে, HTTP ভিয়া রিকোয়েস্টগুলো AWS-এর API Gateway ম্যানেজমেন্ট টুলে রাউট করা হয়, যা বডি, হেডার এবং প্যারামিটার পার্স করে, এবং তারপর আমাদের Lambda ফাংশনকে এই পেলোডসহ ট্রিগার করে:
একজন ডেভেলপার হিসেবে, আপনি শুধু কোড লিখেন REST এন্ডপয়েন্ট এক্সপোজ করতে এবং ডিপ্লয়মেন্ট কনফিগার করতে AWS API Gateway-এ এক্সপোজ করার জন্য। (আমরা এর সম্পর্কে নেক্সট সেকশনে আরও আলোচনা করব আমাদের স্যাম্পল মুভি-ডেটাবেস অ্যাপ্লিকেশন কভার করে।)
সার্ভারলেস অ্যাপ্লিকেশন-এ স্টেট এবং ডেটা ম্যানেজমেন্ট
AWS Lambda একটি স্টেটলেস এনভায়রনমেন্ট। কিন্তু অনেক অ্যাপ্লিকেশনে, আপনি এখনও সার্ভিস বা কলের মধ্যে স্টেট শেয়ার করতে চান, এবং Redis সাহায্য করতে পারে। সহজ স্টেট ম্যানেজমেন্টের জন্য, AWS ডেভেলপাররা často ElastiCache ব্যবহার করে, কিন্তু অনেক অ্যাপ্লিকেশনের অধিক দরকার, তাদের পার্সিস্টেন্স, রিচ ডেটা, হাই পারফরম্যান্স এবং একটি কোয়েরি মডেলও দরকার। Redis Enterprise Cloud AWS-এ একটি ফুলি ম্যানেজড সার্ভিস প্রদান করে (Google Cloud এবং Microsoft Azureও সাপোর্টেড)।
Redis মুভি-ডেটাবেস স্যাম্পল অ্যাপ্লিকেশন
এখন আমরা আমাদের স্যাম্পল মুভি-ডেটাবেস অ্যাপ্লিকেশন দেখতে প্রস্তুত যাতে Redis Enterprise Cloud এবং AWS Lambda ব্যবহার করে অ্যাপ্লিকেশন বানানোর কী স্টেপগুলো দেখি।
অ্যাপ্লিকেশনটি ডেটাসেট ব্যবহার করে যা RediSearch Getting Started টিউটোরিয়ালে ডকুমেন্ট করা হয়েছে, যেটি একটি মুভি ক্যাটালগ, Redis Hashes-র তৈরি। নিচের চার্টে দেখানো যেন, ফ্রন্টএন্ড Vue.js ব্যবহার করে বিল্ট, যা REST এন্ডপয়েন্ট কল করে:
- মুভি লিস্ট, সোর্ট এবং ফিল্টার করা
- মুভি এডিট করা এবং কমেন্ট যোগ/ডিলিট করা
- ফুল-টেক্সট সার্চ এবং ফেসেটেড সার্চ ব্যবহার করে মুভি সার্চ করা
উপরোক্ত উল্লেখ অনুযায়ী, অ্যাপ্লিকেশনটি AWS API Gateway, AWS Lambda, এবং Redis Enterprise Cloud লিভারেজ করে ডেটাস্টোর হিসেবে। পাশাপাশি, Python সার্ভিস AWS Key Management Service ব্যবহার করে Redis ডেটাবেস পাসওয়ার্ড স্টোর এবং এনক্রিপ্ট করতে।
ডেমো অ্যাপ্লিকেশন ইনস্টল এবং রান করুন
শুরু করতে, আপনাকে কিছু পূর্বশর্ত প্রয়োজন:
- একটি AWS অ্যাকাউন্ট সেটআপ, ক্রেডেনশিয়ালস, CLI ইনস্টলড
- একটি Redis Enterprise Cloud অ্যাকাউন্ট এবং ডেটাবেস, RediSearch মডিউল সক্ষম
- Git
- Node.js
- Python
- Redis কমান্ড লাইন ইন্টারফেস (CLI)
একবার সবকিছু জমা হলে, আসুন স্যাম্পল অ্যাপ্লিকেশন ইনস্টল এবং রান করার প্রসেসের মাধ্যমে যাই।
স্টেপ ১: Redis Enterprise Cloud ডেটাবেস ইনফরমেশন পান
যদি আপনি এখনও Redis Enterprise Cloud-এ ডেটাবেস তৈরি না করে থাকেন, অনুগ্রহ করে আমাদের Get Started with Redis Modules গাইডের ইনফরমেশন ব্যবহার করে করুন।
যখন আপনি Redis Enterprise Cloud-এ সংযুক্ত হবেন, আপনি ওয়েব কনসোলে ডেটাবেস কানেকশন ইনফরমেশন পাবেন; নিশ্চিত করুন আপনি মডিউল "RediSearch 2" ডেটাবেসে যোগ করেছেন।
আপনাকে Lambda ফাংশনগুলো আপনার Redis ডেটাবেসের সাথে সংযুক্ত করার জন্য নিচের প্রপার্টিগুলো দরকার:
- REDIS_HOST: redis-18541.xxx.xxxx.xxx.cloud.redis.com
- REDIS_PORT: 18541
- REDIS_PASSWORD : <স্ক্রিনে দেখানো পাসওয়ার্ড>
স্টেপ ২: GitHub থেকে প্রজেক্ট পান
রিপোজিটরি ক্লোন করুন আপনার লোকাল এনভায়রনমেন্টে, এবং প্রজেক্ট ডিরেক্টরিতে যান
> git clone https://github.com/redis-developer/aws-redis-cloud-demo.git > cd aws-redis-cloud-demo
প্রজেক্ট ডিরেক্টরি কাঠামো এখানে দেখানো হলো:
aws-redis-cloud-demo ├── README.md ├── front-end => Vue.js project │ ├── .env.development => ডেভ মোডে Lambda URLs সেট করতে │ ├── .env.production => প্রোডাকশন মোডে Lambda URLs সেট করতে │ ├── ... │ └── vue.config.js │ └── ... ├── movie-comments-microservice => The Python, comments service │ ├── .chalice │ │ └── config.json => Lambda & Service configuration │ ├── app.py │ ├── chalicelib => Contains application code and lib │ │ └── …. │ ├── readme.md │ └── requirements.txt └── movies-list-microservice => The Node.js, movie service ├── import_movies.redis => Dataset file ├── ... ├── serverless.yml => Lambda & Service configuration ├── src │ └── ... └── ...
স্টেপ ৩: মুভি-ডেটাবেস ডেটাসেট আপনার অ্যাপ্লিকেশনে ইম্পোর্ট করুন
ফাইল aws-redis-cloud-demo/movies-list-microservice/import_movies.redis এ সকল Redis কমান্ড রয়েছে মুভি ডেটাবেসে ইনসার্ট করার জন্য। ব্যবহৃত কমান্ডগুলো:
- প্রতিটি মুভির জন্য HSET
- RediSearch ইন্ডেক্স তৈরি করতে FT.CREATE
ডেটাসেট ইম্পোর্ট করতে, একটি টার্মিনাল খুলুন এবং নিচের কমান্ড চালান:
> export REDISCLI_AUTH=<YOUR_DB_PASSWORD> > redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \ -p 18541 < movies-list-microservice/import_movies.redis
স্টেপ ৪: অ্যাপ্লিকেশন কনফিগার করুন আপনার Redis Enterprise Cloud ইনস্ট্যান্স ব্যবহার করতে
অ্যাপ্লিকেশন টেস্ট করার আগে, আপনাকে Node.js এবং Python সার্ভিসগুলো কনফিগার করতে হবে আপনার Redis Enterprise Cloud ডেটাবেস ইনস্ট্যান্সের সাথে। এই ফাইলগুলো খুলুন:
- ./movies-list-microservice/serverless.yml
- ./movie-comments-microservice/.chalice/config.json
তারপর Redis হোস্ট, পোর্ট এবং পাসওয়ার্ড সেট করুন: (REDIS_HOST, REDIS_PORT, REDIS_PASSWORD)
স্টেপ ৫: মুভি মাইক্রোসার্ভিস বিল্ড এবং রান করুন (Node.js)
এখানে লিস্ট করা স্টেপগুলো ফলো করুন প্রজেক্ট বিল্ড এবং রান করতে। (আপনি প্রজেক্টের Readme ফাইলে সকল ইনফরমেশন পাবেন।)
- Serverless framework ইনস্টল করুন
> npm install -g serverless
2. movies-list-microservice ডিরেক্টরিতে যান
> cd movies-list-microservice
3. ডিপেন্ডেন্সি ইনস্টল করুন
> npm install
4. Lambda ফাংশন লোকালি রান করুন
> npm start
5. ব্রাউজার থেকে REST সার্ভিস কল করে সার্ভিস টেস্ট করুন: https://localhost:3000/api/movies/1
6. সার্ভিসটি AWS-এ ডিপ্লয় করুন, নিচের কমান্ড চালিয়ে আপনার AWS এনভায়রনমেন্টে ফাংশন ডিপ্লয় করতে:
> serverless deploy ................................ Serverless: Stack update finished... Service Information service: movies-list-microservice stage: api region: us-east-1 stack: movies-list-microservice-api resources: 33 api keys: None endpoints: GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/search GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/group_by/{field} GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id} POST - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id} functions: listMovies: movies-list-microservice-api-listMovies searchMovies: movies-list-microservice-api-searchMovies getMovie: movies-list-microservice-api-getMovie saveMovie: movies-list-microservice-api-saveMovie layers: None
7. API টেস্ট করুন ব্রাউজার পয়েন্ট করিয়ে https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/1
নোট: আপনি যদি এরর পান, AWS CloudWatch-এ ফাংশন লগ চেক করুন কী হয়েছে।
কোডে গভীর নজর:
- package.json ফাইলটি এই Node.js প্রজেক্টে ব্যবহৃত ডিপেন্ডেন্সি ধারণ করে। এই প্রজেক্টটি খুব সহজ, এবং নিচের ডিপেন্ডেন্সি ব্যবহার করে:
- redis এবং redis-redisearch লাইব্রেরি Redis-এ সংযোগ করতে এবং RediSearch কমান্ড এক্সপোজ করতে ব্যবহৃত হয়।
- aws-lambda লাইব্রেরি সকল AWS Lambda ফাংশন কল করতে ব্যবহৃত হয় একটি node অ্যাপ্লিকেশন আপনার AWS এনভায়রনমেন্টে ডিপ্লয় করতে।
- serverless.yml ফাইলটি সার্ভারলেস ফাংশন ডিফাইন করে HTTP অ্যাকশনকে জাভাস্ক্রিপ্ট ফাংশন যেটি কল হবে ( handler.ts-এ ডিফাইন করা) ম্যাপ করে, এবং এনভায়রনমেন্ট ভেরিয়েবল ধারণ করে (প্রায়শই এই ডেমোstration-এ একটি Redis কানেকশন স্ট্রিং)।
- handler.ts ফাইলটি ক্লাস যা AWS Gateway থেকে আসা ইভেন্ট ক্যাপচার করে এবং অ্যাপ্লিকেশন লাইব্রেরি SearchService কল করে, যা Redis ডেটাবেসের সাথে সকল কল করে।
- SearchService.ts ফাইলটি সকল মেথড ধারণ করে Redis ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে এবং Redis এবং RediSearch API ব্যবহার করতে: client.ft_search(), client.aggregate(), client.hmset(), এবং আরও অনেক কিছু। (আপনি Redis University এবং GitHub-এ Getting Started with RediSearch 2.0 টিউটোরিয়ালে Redis এবং RediSearch কমান্ড সম্পর্কে আরও জানতে পারেন।
স্টেপ ৬: কমেন্টস মাইক্রোসার্ভিস বিল্ড এবং রান করুন (Python)
এখানে প্রজেক্ট বিল্ড এবং রান করার স্টেপগুলো। (আপনি প্রজেক্টের Readme ফাইলে সকল ইনফরমেশন পাবেন।)
- Python প্রজেক্টে যান এবং একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন:
> cd movie-comments-microservice > python3 -m venv chalice-env > source chalice-env/bin/activate
2. ডিপেন্ডেন্সি ইনস্টল করুন:
> pip install -r requirements.txt
3. AWS এনভায়রনমেন্ট সেট আপ করুন, নিচের কমান্ড চালান, এবং আপনার ID এবং Secret কনফিগার করুন:
> aws configure AWS Access Key ID [None]: ****************ABCD AWS Secret Access Key [None]: ****************abCd Default region name [None]: us-west-2 Default output format [None]:
4. সার্ভিসটি AWS-এ ডিপ্লয় করুন, নিচের কমান্ড চালিয়ে আপনার AWS এনভায়রনমেন্টে ফাংশন ডিপ্লয় করতে:
> chalice deploy Reusing existing deployment package. Updating policy for IAM role: movie-comments-microservice-dev Creating lambda function: movie-comments-microservice-dev Creating Rest API Resources deployed: - Lambda ARN: arn:aws:lambda:us-east-1:11111111111:function:movie-comments-microservice-dev - Rest API URL: https://XXXXXXX.execute-api.us-east-1.amazonaws.com/api/
কোডে গভীর নজর:
- requirements.txt ফাইলটি এই Python প্রজেক্টে ব্যবহৃত ডিপেন্ডেন্সি ধারণ করে। এই প্রজেক্টটি খুব সহজ, এবং নিচের ডিপেন্ডেন্সি ব্যবহার করে:
- Chalice হলো AWS ফ্রেমওয়ার্ক পাইথনে সার্ভারলেস অ্যাপ্লিকেশন তৈরি করতে
- redis এবং redisearch Redis অ্যাক্সেস করতে এবং RediSearch API ব্যবহার করতে
- config.json ফাইলটি সার্ভারলেস অ্যাপ্লিকেশন ডিফাইন করে এবং এনভায়রনমেন্ট ভেরিয়েবল ডিফাইন করতে ব্যবহৃত হয়—এই অ্যাপ্লিকেশনে, Redis ডেটাবেস কানেকশন ইনফরমেশন।
- app.py ফাইলটি অ্যাপ্লিকেশন এন্ট্রি পয়েন্ট যা সকল REST এন্ডপয়েন্ট ডিফাইন করে বিভিন্ন রুট ব্যবহার করে। অ্যাপ্লিকেশন বিভিন্ন ডিপেন্ডেন্সি ইম্পোর্ট করে, বিশেষ করে CommentService যা Redis-এ ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়। আপনি যখন একাধিক ফাইল ব্যবহার করতে চান তবে আপনাকে ফাইলগুলো chalicelib ফোল্ডারে রাখতে হবে।
- comment_service.py ফাইলটি Redis-এ সকল ইন্টারঅ্যাকশন ধারণ করে কমেন্ট তৈরি, কোয়েরি এবং ডিলিট করার জন্য। কমেন্ট ফিচারের জন্য একটি আকর্ষণীয় পয়েন্ট হলো search() মেথড। এই মেথডটি একটি মুভির কমেন্টগুলো ক্রিয়েশন তারিখ অনুযায়ী সোর্ট করে রিট্রিভ করতে ব্যবহৃত হয় search_client.search() কল ব্যবহার করে।
ঐচ্ছিকভাবে, আপনি Redis ডেটাবেস পাসওয়ার্ড সংরক্ষণ করতে পারেন AWS Key Management Service-এ। কনফিগারেশন স্টেপগুলো প্রজেক্ট ডকুমেন্টেশন-এ পাবেন।
স্টেপ ৭: ফ্রন্টএন্ড অ্যাপ্লিকেশন রান করুন
- ফ্রন্টএন্ড ডিরেক্টরিতে যান এবং ডিপেন্ডেন্সি ইনস্টল করুন:
> cd front-end > npm install
2. .env.development ফাইলটি এডিট করুন মুভি এবং কমেন্ট সার্ভিসের URL সেট করতে:
VUE_APP_MOVIES_SERVICE=https://<xxx>.execute-api.<reg>.amazonaws.com/api VUE_APP_COMMENTS_SERVICE=https://<xxx>..execute-api.<reg>.amazonaws.com/api
3. অ্যাপ্লিকেশন রান করুন:
> npm run serve
4. আপনার ব্রাউজার খুলুন, এবং যান https://localhost:8084-এ
আপনি এখন অ্যাপ্লিকেশনে নেভিগেট করতে পারেন, মুভি আপডেট এবং সার্চ করতে পারেন, এবং কমেন্ট যোগ/ডিলিট করতে পারেন।
ঐচ্ছিকভাবে, আপনি S3 এবং CloudFront ব্যবহার করতে পারেন Vue অ্যাপ্লিকেশন আপনার AWS এনভায়রনমেন্টে ডিপ্লয় করতে এবং পাবলিকলি আপনার ব্যবহারকারীদের সার্ভ করতে। এটি প্রজেক্ট ডকুমেন্টেশন-এ ব্যাখ্যা করা হয়েছে।
উপসংহার
AWS Lambda এবং Redis Enterprise Cloud-র সাথে কাজ করা আপনার সার্ভিসগুলোর ডিপ্লয়মেন্ট সহজ করে তোলে। Redis Enterprise Cloud RediSearch-এর সাথে ব্যবহার করে, আপনি সহজে Redis ডেটা কোয়েরি করতে পারেন ভ্যালু ব্যবহার করে, যা আপনাকে আপনার সার্ভিসের মেইন ডেটাবেস হিসেবে Redis ব্যবহার করতে দেয়।
Redis Enterprise Cloud Redis-র সাথে কম্প্যাটিবল, যা আপনাকে আপনার বিদ্যমান Redis ডিপ্লয়মেন্ট সহজে মাইগ্রেট করতে দেয়, OSS এবং ম্যানেজড সার্ভিস দুটোই। আপনার শুধু কানেকশন প্যারামিটার চেঞ্জ করতে হবে (যেমন ডেটাবেস এন্ডপয়েন্ট)। লাইভ মাইগ্রেশন পারফর্ম করার একাধিক উপায় রয়েছে, যার মধ্যে:
- Blue-green ডিপ্লয়মেন্ট
- Amazon ElastiCache এবং Redis Enterprise Cloud সিঙ্ক্রোনাইজ করা Active Passive Geo-Distribution ব্যবহার করে
- আমাদের ওপেন সোর্স RIOT টুল ব্যবহার করে আপনার ডেটা মাইগ্রেট করা
RediSearch-এর পাশাপাশি, Redis Enterprise Cloud আপনাকে অন্যান্য প্রতিশ্রুতিবহুল ডেটা মডেল ব্যবহার করতে দেয় যেমন গ্রাফ, JSON, টাইম সিরিজ, এবং ব্লুম ফিল্টার, এবং প্রোডাকশন এনভায়রনমেন্টে অত্যন্ত গুরুত্বপূর্ণ অন্যান্য ডেটাবেস ফিচারের واسعة রেঞ্জ অফার করে, যার মধ্যে হাই অভেইলেবিলিটি, স্কেলেবিলিটি, পার্সিস্টেন্স, সিকিউরিটি, এবং Active-Active জিও-ডিস্ট্রিবিউশন।
আরও জানতে চান? আমাদের AWS re:Invent হোম পেজ চেক আউট করুন এবং এই টিউটোরিয়াল এবং ব্লগ পোস্ট পড়ুন:
- Get Started with Redis Modules on AWS
- 6 Key Features to Consider When Choosing a DBaaS Provider
- How Redis Enterprise Cloud Meets the Needs of Maturing Enterprise Customers on AWS