AWS Lambda সার্ভারলেস স্পেসের পথপ্রদর্শক। অনেক ডেভেলপার মনে করেন সার্ভারলেসই ডেভেলপমেন্টের ভবিষ্যৎ। এটি আপনাকে আসল পে-পার-ইউজ মডেল দেয়, ব্যাকএন্ড ইনফ্রাস্ট্রাকচারের রক্ষণাবেক্ষণ এবং স্কেলিং থেকে মুক্ত করে। কিন্তু এর চ্যালেঞ্জও আছে। 그중 একটি হলো এর স্টেটলেস প্রকৃতি। স্টেট এক্সটার্নাল ডেটা স্টোরে রাখতে হয়। দুর্ভাগ্য 익숙 ব্যাপক ডেটা স্টোরগুলো কানেকশন-ভিত্তিক। যেমন এই পোস্টে ব্যাখ্যা করা হয়েছে, সার্ভারলেসে কানেকশন ম্যানেজ করা যন্ত্রণাদায়ক হতে পারে। তাই আমরা Upstash Redis-এ হাই-পারফরম্যান্স REST API তৈরি করেছি। এই ব্লগ পোস্টে আমি AWS Lambda এবং Upstash Redis REST API ব্যবহার করে একটি বেসিক স্টেটফুল API (পেজ কাউন্টার) বানাবো।
লাইভ ডেমো: https://3jyz1n07o8.execute-api.us-east-1.amazonaws.com/count
কোড: GitHub রিপো
প্রজেক্ট সেটআপ
আমরা Serverless Framework ব্যবহার করব ডিপ্লয় করতে।
git:(master) ✗ serverless
Serverless: No project detected. Do you want to create a new one? Yes
Serverless: What do you want to make? AWS Node.js
Serverless: What do you want to call this project? aws-lambda-redis-rest
Project successfully created in 'aws-lambda-redis-rest' folder.
কোড
npm install node-fetch দিয়ে fetch ইনস্টল করুন। তারপর Upstash কনসোল থেকে ডেটাবেস তৈরি করুন। REST API বাটনে ক্লিক করে URL এবং টোকেন কপি করুন। handler.js আপডেট করুন নিচের মতো:
const fetch = require("node-fetch");
module.exports.hello = async (event) => {
const url = "https://us1-last-panther-33620.upstash.io/incr/counter?_token=AACQgMzYyNGM0OGMtZWQ3MC00OTRlLWFmOGEtODc3ZWQxYWQyZGJjZjgyOTlkM2JhNWIxE3OTJlNmE2NGVjNGM=";
let data = await fetch(url);
let result = await data.text();
return {
statusCode: 200,
body: result
};
};
serverless.yml-এ API এন্ডপয়েন্ট যোগ করুন:
service: aws-lambda-redis-rest
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
lambdaHashingVersion: 20201221
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /count
method: get
রান এবং ডিপ্লয়
লোকালি ফাংশন চালান:
serverless invoke local -f hello
ডিপ্লয় করুন:
serverless deploy
কম্যান্ড আউটপুটে URL পাবেন যা ব্রাউজারে চেক করতে পারবেন।
নোটস
- সর্বোত্তম পারফরম্যান্সের জন্য ডেটাবেস এবং AWS Lambda ফাংশন একই রিজনে রাখুন।
- REST API-এর কারণে ডেটাবেস কানেকশন ম্যানেজ করতে হয় না এবং কোনো Redis ক্লায়েন্ট লাগে না।
- API টোকেন পাবলিক শেয়ার করবেন না। যদি লিক হয়, ডেটাবেসের পাসওয়ার্ড রিসেট করে রিভোক করতে পারেন।
- একই ফাংশনে একাধিক কমান্ড রান করতে চাইলে সর্বোত্তম পারফরম্যান্সের জন্য Pipeline API ব্যবহার করুন।