🌐 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، وتغييرات قاعدة البيانات، وتحميل الملفات، والمهام المجدولة – دون إدارة الخوادم. يغطي هذا الدليل Lambda بدءًا من الوظيفة الأولى وحتى البنية بدون خادم الجاهزة للإنتاج باستخدام Python وNode.js.

لماذا لامدا بدون خادم؟

  • لا توجد إدارة الخادم– تتعامل AWS مع القياس والتصحيح والتوفر
  • الدفع لكل استخدام— يتم إصدار الفاتورة لكل 1 مللي ثانية من التنفيذ (أول مليون طلب مجاني/شهريًا)
  • تحجيم لانهائي– المقياس التلقائي من 0 إلى 10000 عملية تنفيذ متزامنة
  • يحركها الحدث— مشغلات من API Gateway، وS3، وDynamoDB، وSQS، وEventBridge
  • يبدأ البرد– تهيئة أقل من ثانية لـ Python/Node.js باستخدام SnapStart

مرحبا العالم لامدا (بيثون)

# 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

FastAPI على Lambda (Mangum)

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()

أفضل ممارسات لامدا

  • حافظ على تركيز الوظائف– وظيفة واحدة وهدف واحد
  • إعادة استخدام الاتصالات– تهيئة اتصالات DB/Redis خارج المعالج (تستمر عبر الاستدعاءات الدافئة)
  • استخدم طبقات لامدا– مشاركة التبعيات عبر الوظائف، مما يقلل من حجم حزمة النشر
  • ضبط الذاكرة المناسبة– ذاكرة أكبر = وحدة معالجة مركزية أكبر، وغالبًا ما تكون أسرع + أرخص (الاختبار 128-3008 ميجابايت)
  • تمكين سناب ستارت(جافا) /استخدم جرافيتون2(سعر أفضل-أداء أفضل)
  • مراقبة بدايات البرد— استخدم تقنية التتبع بالأشعة السينية، وحافظ على دفء الوظائف للمسارات الحرجة
  • وظائف عاجزة– يمكن لـ Lambda استدعاء عدة مرات (مرة واحدة على الأقل)، والتصميم وفقًا لذلك

تُعد AWS Lambda في عام 2026 الطريقة الأكثر فعالية من حيث التكلفة لتشغيل أحمال العمل المستندة إلى الأحداث وواجهة برمجة التطبيقات (API) والمجدولة. استخدم SAM للتطوير والنشر المحلي، وFastAPI+Mangum لواجهات برمجة تطبيقات REST، وقم بتكوين الذاكرة المناسبة لأعباء العمل لديك. للحصول على واجهات برمجة التطبيقات (APIs) الدافئة باستمرار، فكر في استخدام Lambda مع Provisioned Concurrency أو Fargate للخدمات التي تعمل دائمًا.

✍️ Leave a Comment

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

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