🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

AWS Lambda টিউটোরিয়াল 2026: Python ফাংশন, SAM এবং FastAPI সার্ভারলেস

⏱️3 min read  ·  580 words

AWS Lambda হল 2026 সালের নির্দিষ্ট সার্ভারবিহীন কম্পিউট পরিষেবা। ইভেন্টগুলির প্রতিক্রিয়া হিসাবে কোড চালান — HTTP অনুরোধ, ডাটাবেস পরিবর্তন, ফাইল আপলোড, নির্ধারিত কাজ — সার্ভারগুলি পরিচালনা না করেই৷ এই নির্দেশিকাটি পাইথন এবং Node.js-এর সাথে প্রথম ফাংশন থেকে উৎপাদন-প্রস্তুত সার্ভারহীন আর্কিটেকচার পর্যন্ত Lambda কভার করে।

কেন সার্ভারহীন ল্যাম্বডা?

  • সার্ভার ব্যবস্থাপনা নেই— 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 বিবেচনা করুন।

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা