AWS Lambda হল 2026 সালের নির্দিষ্ট সার্ভারবিহীন কম্পিউট পরিষেবা। ইভেন্টগুলির প্রতিক্রিয়া হিসাবে কোড চালান — HTTP অনুরোধ, ডাটাবেস পরিবর্তন, ফাইল আপলোড, নির্ধারিত কাজ — সার্ভারগুলি পরিচালনা না করেই৷ এই নির্দেশিকাটি পাইথন এবং Node.js-এর সাথে প্রথম ফাংশন থেকে উৎপাদন-প্রস্তুত সার্ভারহীন আর্কিটেকচার পর্যন্ত Lambda কভার করে।
📋 Table of Contents
কেন সার্ভারহীন ল্যাম্বডা?
- সার্ভার ব্যবস্থাপনা নেই— AWS স্কেলিং, প্যাচিং, প্রাপ্যতা পরিচালনা করে
- ব্যবহার প্রতি অর্থ প্রদান— প্রতি 1ms সম্পাদনের জন্য বিল করা হয় (প্রথম 1M অনুরোধ বিনামূল্যে/মাস)
- অসীম স্কেলিং— 0 থেকে 10,000 সমবর্তী মৃত্যুদন্ডের স্বয়ংক্রিয় স্কেল
- ঘটনা-চালিত— API গেটওয়ে, S3, DynamoDB, SQS, EventBridge থেকে ট্রিগার
- ঠান্ডা শুরু হয়— SnapStart সহ Python/Node.js-এর জন্য সাব-সেকেন্ড ইনিশিয়ালাইজেশন
হ্যালো ওয়ার্ল্ড ল্যাম্বডা (পাইথন)
# lambda_function.py
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event: dict, context) -> dict:
logger.info(f"Event: {json.dumps(event)}")
# context has: function_name, remaining_time_in_millis, memory_limit_in_mb
logger.info(f"Remaining time: {context.get_remaining_time_in_millis()}ms")
name = event.get("queryStringParameters", {}).get("name", "World")
return {
"statusCode": 200,
"headers": {
"Content-Type": "application/json",
"Access-Control-Allow-Origin": "*",
},
"body": json.dumps({
"message": f"Hello, {name}!",
"requestId": context.aws_request_id,
})
}
AWS SAM দিয়ে স্থাপন করুন
# Install AWS SAM CLI
pip install aws-sam-cli
# Initialize project
sam init --runtime python3.12 --app-template hello-world
# Build
sam build
# Local test
sam local invoke HelloWorldFunction --event events/event.json
sam local start-api # runs locally on port 3000
# Deploy to AWS
sam deploy --guided # first time (interactive)
sam deploy # subsequent deploys
# template.yaml (SAM template)
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Runtime: python3.12
Timeout: 30
MemorySize: 256
Environment:
Variables:
ENVIRONMENT: !Ref Environment
Layers:
- !Ref DependenciesLayer
Parameters:
Environment:
Type: String
AllowedValues: [dev, staging, production]
Resources:
ApiFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/
Handler: api.handler
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref UsersTable
- S3ReadPolicy:
BucketName: !Ref AssetsBucket
Events:
Api:
Type: Api
Properties:
Path: /{proxy+}
Method: ANY
Schedule:
Type: Schedule
Properties:
Schedule: rate(5 minutes)
DependenciesLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: dependencies/
CompatibleRuntimes: [python3.12]
UsersTable:
Type: AWS::DynamoDB::Table
Properties:
BillingMode: PAY_PER_REQUEST
AttributeDefinitions:
- AttributeName: pk
AttributeType: S
- AttributeName: sk
AttributeType: S
KeySchema:
- AttributeName: pk
KeyType: HASH
- AttributeName: sk
KeyType: RANGE
Lambda (Mangum) এর উপর FastAPI
pip install fastapi mangum
# Package: put in layer or zip with requirements.txt
# main.py
from fastapi import FastAPI, Depends, HTTPException
from mangum import Mangum
from pydantic import BaseModel
app = FastAPI(
title="My API",
root_path="/production" # API Gateway stage
)
class User(BaseModel):
id: int
name: str
email: str
@app.get("/users/{user_id}")
async def get_user(user_id: int) -> User:
user = await db.get_user(user_id)
if not user:
raise HTTPException(404, "User not found")
return user
@app.post("/users")
async def create_user(user: User) -> User:
return await db.create_user(user)
# Lambda handler
handler = Mangum(app, lifespan="off")
ঘটনা সূত্র
# S3 trigger — process uploaded files
def handle_s3_upload(event: dict, context) -> None:
for record in event.get('Records', []):
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
size = record['s3']['object']['size']
print(f"Processing {key} ({size} bytes) from {bucket}")
process_file(bucket, key)
# SQS trigger — process messages
def handle_sqs_messages(event: dict, context) -> dict:
batch_failures = []
for record in event.get('Records', []):
try:
body = json.loads(record['body'])
process_message(body)
except Exception as e:
# Return failed message IDs for retry
batch_failures.append({"itemIdentifier": record['messageId']})
return {"batchItemFailures": batch_failures}
# DynamoDB Streams trigger
def handle_db_changes(event: dict, context) -> None:
for record in event.get('Records', []):
if record['eventName'] == 'INSERT':
new_item = record['dynamodb']['NewImage']
on_user_created(new_item)
elif record['eventName'] == 'MODIFY':
old = record['dynamodb']['OldImage']
new = record['dynamodb']['NewImage']
on_user_updated(old, new)
# EventBridge scheduled task
def run_nightly_report(event: dict, context) -> None:
print(f"Running nightly report at {event['time']}")
generate_and_email_report()
Lambda সেরা অভ্যাস
- ফাংশন ফোকাস রাখুন– একটি ফাংশন, একটি উদ্দেশ্য
- সংযোগগুলি পুনরায় ব্যবহার করুন– হ্যান্ডলারের বাইরে ডিবি/রেডিস সংযোগগুলি শুরু করুন (তারা উষ্ণ আহ্বান জুড়ে থাকে)
- ল্যাম্বডা লেয়ার ব্যবহার করুন— ফাংশন জুড়ে নির্ভরতা ভাগ করে, ডিপ্লোয় প্যাকেজের আকার হ্রাস করে
- উপযুক্ত মেমরি সেট করুন— আরও মেমরি = আরও CPU, প্রায়শই দ্রুত + সস্তা (পরীক্ষা 128-3008MB)
- স্ন্যাপস্টার্ট সক্ষম করুন(জাভা) /Graviton2 ব্যবহার করুন(ভাল দাম-পারফ)
- ঠান্ডা শুরু হয় নিরীক্ষণ— এক্স-রে ট্রেসিং ব্যবহার করুন, গুরুত্বপূর্ণ পথের জন্য ফাংশন উষ্ণ রাখুন
- অদম্য ফাংশন— Lambda একাধিকবার (কমপক্ষে-একবার) আহ্বান করতে পারে, সেই অনুযায়ী ডিজাইন করুন
2026 সালে AWS Lambda হল ইভেন্ট-চালিত, API এবং নির্ধারিত কাজের চাপ চালানোর সবচেয়ে সাশ্রয়ী উপায়। স্থানীয় উন্নয়ন এবং স্থাপনার জন্য SAM, REST API-এর জন্য FastAPI+Mangum ব্যবহার করুন এবং আপনার কাজের চাপের জন্য সঠিক মেমরি কনফিগার করুন। ধারাবাহিকভাবে উষ্ণ APIগুলির জন্য, সর্বদা-অন-অন পরিষেবাগুলির জন্য প্রভিশনড কনকারেন্সি বা ফার্গেট সহ Lambda বিবেচনা করুন।
🔗 Share this article
✍️ Leave a Comment