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

كيفية نشر تطبيق Python على AWS Lambda في عام 2026: دليل بدون خادم

⏱️2 min read  ·  403 words

أوس لامدا يقوم بتشغيل التعليمات البرمجية الخاصة بك دون إدارة الخوادم – أنت تدفع فقط مقابل وقت التنفيذ، ويتوسع تلقائيًا من صفر إلى آلاف الطلبات المتزامنة. ينشر هذا الدليل واجهة برمجة تطبيقات Python إلى Lambda باستخدام بوابة API من البداية.

متى تستخدم لامدا

  • مناسبا جيدا: واجهات برمجة التطبيقات ذات حركة المرور المتغيرة، والوظائف المجدولة، ومعالجة الأحداث، وخطافات الويب، والخدمات الصغيرة خفيفة الوزن
  • سوء اللياقة : عمليات طويلة الأمد (حد أقصى 15 دقيقة)، وحركة مرور عالية باستمرار (أرخص على الخوادم التي تعمل دائمًا)، والتطبيقات التي تحتاج إلى اتصالات مستمرة (تحتاج WebSockets إلى API Gateway v2)

الطريقة الأولى: وظيفة Lambda البسيطة (وحدة التحكم)

# handler.py — the entry point
import json

def lambda_handler(event, context):
    # event contains the request data
    name = event.get('queryStringParameters', {}).get('name', 'World')

    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'application/json'},
        'body': json.dumps({'message': f'Hello, {name}!'})
    }

تبعيات التغليف

تحتاج Lambda إلى تجميع تبعياتك. لحزم مثلrequests:

# Install dependencies into a package directory
mkdir package
pip install requests -t package/

# Add your handler
cp handler.py package/

# Zip it
cd package
zip -r ../deployment.zip .
cd ..

# Upload deployment.zip to Lambda

الطريقة الثانية: إطار عمل بدون خادم (مستحسن)

npm install -g serverless
serverless create --template aws-python3 --path my-api
cd my-api
npm install serverless-python-requirements
# serverless.yml
service: my-api

provider:
  name: aws
  runtime: python3.12
  region: us-east-1
  environment:
    STAGE: ${sls:stage}
    DB_URL: ${env:DB_URL}

functions:
  api:
    handler: handler.lambda_handler
    events:
      - httpApi:
          path: /hello
          method: get
      - httpApi:
          path: /users/{id}
          method: get
    timeout: 29
    memorySize: 256

plugins:
  - serverless-python-requirements

custom:
  pythonRequirements:
    dockerizePip: true   # builds native deps in a Lambda-compatible container
# requirements.txt
requests==2.32.0
boto3==1.34.0

# Deploy
serverless deploy

# Output gives your API Gateway URL:
# endpoint: GET - https://abc123.execute-api.us-east-1.amazonaws.com/hello

التعامل مع أحداث بوابة API

import json

def lambda_handler(event, context):
    # httpApi (v2) event structure
    method = event['requestContext']['http']['method']
    path   = event['requestContext']['http']['path']
    params = event.get('pathParameters') or {}
    query  = event.get('queryStringParameters') or {}
    body   = json.loads(event['body']) if event.get('body') else {}

    if path.startswith('/users/'):
        user_id = params.get('id')
        return respond(200, {'userId': user_id})

    return respond(404, {'error': 'Not found'})

def respond(status, data):
    return {
        'statusCode': status,
        'headers': {'Content-Type': 'application/json'},
        'body': json.dumps(data)
    }

إدارة البدايات الباردة

Lambda “يبدأ على البارد” عندما تدور حاوية جديدة (الطلب الأول أو بعد الخمول). تقليل التأثير:

  • أبقِ العبوة صغيرة: تبعيات أقل = بداية باردة أسرع. قم باستيراد ما تستخدمه فقط.
  • التهيئة خارج المعالج: يتم تحميل عملاء قاعدة البيانات والتكوين مرة واحدة لكل حاوية، ويتم إعادة استخدامها عبر الاستدعاءات الدافئة
  • استخدم التزامن المقدم لنقاط النهاية الحرجة لزمن الاستجابة (يحافظ على دفء الحاويات، ويكلف المزيد)
  • زيادة الذاكرة: المزيد من الذاكرة يعني أيضًا المزيد من وحدة المعالجة المركزية (CPU)، مما يقلل من وقت البدء
# ✅ Initialize clients OUTSIDE the handler (reused across invocations)
import boto3
dynamodb = boto3.resource('dynamodb')  # created once per container
table = dynamodb.Table('users')

def lambda_handler(event, context):
    # table is already initialized — no per-request setup cost
    return table.get_item(Key={'id': '1'})

متغيرات البيئة وأسرارها

# Non-sensitive config: environment variables (serverless.yml)
environment:
  LOG_LEVEL: info

# Sensitive secrets: use AWS Secrets Manager or SSM Parameter Store
import boto3
ssm = boto3.client('ssm')

def get_secret(name):
    resp = ssm.get_parameter(Name=name, WithDecryption=True)
    return resp['Parameter']['Value']

DB_PASSWORD = get_secret('/myapp/db_password')  # loaded once per container

الأسئلة المتداولة

س: كم تكلفة لامدا؟
ج: تتضمن الطبقة المجانية مليون طلب و400000 جيجابايت في الثانية شهريًا. علاوة على ذلك، فإنك تدفع مقابل كل طلب ولكل جيجابايت في الثانية من التنفيذ. بالنسبة لواجهات برمجة التطبيقات ذات حركة المرور المتغيرة، غالبًا ما تكون أرخص بكثير من الخادم الذي يعمل دائمًا.

س: ما هو الحد الأقصى لوقت التنفيذ؟
ج: 15 دقيقة. بالنسبة للمهام الأطول، استخدم AWS Step Functions لتنسيق Lambdas المتعددة، أو انتقل إلى ECS/Fargate للعمليات طويلة الأمد.

س: كيف أقوم بتوصيل Lambda بقاعدة بيانات؟
ج: بالنسبة لقواعد البيانات التي لا يمكن الوصول إليها بواسطة خادم، استخدم DynamoDB أو Aurora Serverless. بالنسبة إلى Postgres/MySQL التقليدية، استخدم RDS Proxy لإدارة تجميع الاتصالات (بخلاف ذلك، يمكن أن يؤدي قياس Lambda إلى استنفاد اتصالات قاعدة البيانات).

س: هل يمكنني تشغيل إطار ويب كامل على Lambda؟
ج: نعم – استخدم Mangum (لـ FastAPI/Starlette) أو Zappa (لـ Flask/Django) لتكييف تطبيقات WSGI/ASGI مع Lambda. جيد لترحيل التطبيقات الموجودة، على الرغم من أن المعالجات الأصلية أخف وزنًا.

س: كيف يمكنني تصحيح أخطاء Lambda محليًا؟
ج: استخدمserverless invoke local أو AWS SAM CLI’ssam local start-api لتشغيل الوظائف محليًا. تقوم CloudWatch Logs بالتقاط جميع سجلات تنفيذ الإنتاج.

الخلاصة

تتيح لك AWS Lambda نشر واجهات برمجة تطبيقات Python التي تتوسع تلقائيًا ولا تكلف شيئًا عندما تكون في وضع الخمول. نهج الإطار بدون خادم —serverless.yml زائدserverless-python-requirements – يتعامل مع التعبئة والتغليف وبوابة API والنشر في أمر واحد. قم بتهيئة العملاء خارج المعالج لتقليل تكلفة البداية الباردة، واستخدم SSM/Secrets Manager لبيانات الاعتماد، والوصول إلى Provisioned Concurrency فقط عندما يكون زمن الاستجابة مهمًا حقًا. إنه مناسب تمامًا لواجهات برمجة التطبيقات ذات حركة المرور المتغيرة وأحمال العمل المستندة إلى الأحداث.

✍️ Leave a Comment

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

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