كيفية استخدام AWS Lambda API لتطبيقات Serverless في 2026

Ashley Innocent

Ashley Innocent

25 مارس 2026

كيفية استخدام AWS Lambda API لتطبيقات Serverless في 2026

Apidog للمؤسسات

نشر محلي

SSO & RBAC

متوافق مع SOC 2

استكشاف Apidog Enterprise

TL;DR

تُمكن واجهة برمجة تطبيقات AWS Lambda المطورين من نشر الدوال عديمة الخادم وإدارتها واستدعائها برمجياً. تستخدم مصادقة IAM، ونقاط نهاية RESTful لإدارة الدوال، وخيارات استدعاء غير متزامنة ومتزامنة، مع حدود التزامن على مستوى الحساب. يغطي هذا الدليل إعداد المصادقة، ونشر الدوال، وأنماط الاستدعاء، وتعيين مصادر الأحداث، واستراتيجيات بنية عديمة الخادم للإنتاج.

مقدمة

تعالج AWS Lambda تريليونات الطلبات شهرياً لأكثر من مليون مستخدم نشط. بالنسبة للمطورين الذين يبنون تطبيقات عديمة الخادم، أو أدوات أتمتة، أو بنى تعتمد على الأحداث، فإن تكامل Lambda API ليس اختيارياً - إنه ضروري للبنية التحتية كرمز وخطوط أنابيب CI/CD.

الواقع هو: أن الفرق التي تدير أكثر من 50 دالة Lambda يدوياً تخسر 10-15 ساعة أسبوعياً في عمليات النشر، وتحديثات التكوين، والمراقبة. تكامل Lambda API القوي يؤتمت عمليات النشر، وينفذ الإصدارات الزرقاء-الخضراء، ويمكّن من التوسع الديناميكي بناءً على الطلب.

يرشدك هذا الدليل خلال عملية تكامل AWS Lambda API الكاملة. ستتعلم مصادقة IAM، وإنشاء الدوال ونشرها، وأنماط الاستدعاء (متزامن/غير متزامن)، وتعيين مصادر الأحداث، والبنى الطبقية، واستراتيجيات النشر للإنتاج. بحلول النهاية، سيكون لديك تكامل Lambda جاهز للإنتاج.

button

ما هي واجهة برمجة تطبيقات AWS Lambda؟

توفر AWS Lambda واجهة برمجة تطبيقات RESTful لإدارة دوال الحوسبة عديمة الخادم. تتعامل واجهة برمجة التطبيقات مع:

الميزات الرئيسية

الميزة الوصف
واجهة برمجة تطبيقات RESTful نقاط نهاية HTTPS قياسية
مصادقة IAM توقيع AWS الإصدار 4
الاستدعاء غير المتزامن معالجة الأحداث بنمط "أطلق وانسَ"
الاستدعاء المتزامن نمط الطلب-الاستجابة
مصادر الأحداث أكثر من 200 تكامل خدمة AWS
الطبقات رمز مشترك وتوابع
الإصدارات/الأسماء المستعارة تحويل حركة المرور والتراجعات
التزامن المجهز القضاء على أوقات البدء الباردة

دعم وقت تشغيل Lambda

وقت التشغيل الإصدارات حالة الاستخدام
Node.js 18.x, 20.x خلفيات API، معالجة الأحداث
Python 3.9, 3.10, 3.11 معالجة البيانات، استنتاج تعلم الآلة
Java 11, 17, 21 تطبيقات المؤسسات
Go 1.x واجهات برمجة تطبيقات عالية الأداء
Rust 1.x دوال ذات زمن استجابة منخفض
.NET 6, 8 أعباء عمل Windows
Ruby 3.x تطبيقات الويب
مخصص أي أوقات تشغيل قائمة على الحاويات

نظرة عامة على بنية واجهة برمجة التطبيقات

تستخدم Lambda بنية واجهة برمجة تطبيقات خدمة AWS:

https://lambda.{region}.amazonaws.com/2015-03-31/

إصدارات واجهة برمجة التطبيقات

الإصدار الحالة حالة الاستخدام
2015-03-31 الحالي جميع عمليات Lambda
2018-01-31 واجهة برمجة تطبيقات وقت التشغيل واجهة وقت تشغيل مخصصة

البدء: إعداد المصادقة

الخطوة 1: إنشاء حساب AWS ومستخدم IAM

قبل الوصول إلى واجهة برمجة التطبيقات:

  1. زر AWS Console
  2. أنشئ حساب AWS
  3. انتقل إلى IAM Console > Users > Create User
  4. أرفق سياسات تنفيذ Lambda

الخطوة 2: إنشاء بيانات اعتماد IAM

أنشئ مفاتيح وصول للوصول البرمجي:

# طريقة AWS CLI
aws iam create-access-key --user-name lambda-deployer

# الإخراج: قم بتخزين هذه بأمان
{
  "AccessKey": {
    "AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
  }
}

ملاحظة أمنية: قم بتخزين بيانات الاعتماد بأمان:

# ~/.aws/credentials
[lambda-deployer]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

# أو استخدم متغيرات البيئة
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"

الخطوة 3: فهم توقيع AWS الإصدار 4

تتطلب جميع طلبات Lambda API توقيع SigV4:

const crypto = require('crypto');

class AWSSigner {
  constructor(accessKeyId, secretAccessKey, region, service = 'lambda') {
    this.accessKeyId = accessKeyId;
    this.secretAccessKey = secretAccessKey;
    this.region = region;
    this.service = service;
  }

  sign(request, body = null) {
    const now = new Date();
    const amzDate = now.toISOString().replace(/[:-]|\.\d{3}/g, '');
    const dateStamp = amzDate.slice(0, 8);

    // المهمة 1: إنشاء طلب قانوني (canonical request)
    const hashedPayload = body ? crypto.createHash('sha256').update(body).digest('hex') : 'UNSIGNED-PAYLOAD';
    const canonicalUri = request.path;
    const canonicalQuerystring = request.query || '';
    const canonicalHeaders = `host:${request.host}\nx-amz-date:${amzDate}\n`;
    const signedHeaders = 'host;x-amz-date';
    const canonicalRequest = `${request.method}\n${canonicalUri}\n${canonicalQuerystring}\n${canonicalHeaders}\n${signedHeaders}\n${hashedPayload}`;

    // المهمة 2: إنشاء سلسلة للتوقيع (string to sign)
    const algorithm = 'AWS4-HMAC-SHA256';
    const credentialScope = `${dateStamp}/${this.region}/${this.service}/aws4_request`;
    const hash = crypto.createHash('sha256').update(canonicalRequest).digest('hex');
    const stringToSign = `${algorithm}\n${amzDate}\n${credentialScope}\n${hash}`;

    // المهمة 3: حساب التوقيع
    const kDate = this.hmac(`AWS4${this.secretAccessKey}`, dateStamp);
    const kRegion = this.hmac(kDate, this.region);
    const kService = this.hmac(kRegion, this.service);
    const kSigning = this.hmac(kService, 'aws4_request');
    const signature = this.hmac(kSigning, stringToSign, 'hex');

    // المهمة 4: إضافة رأس المصادقة (authorization header)
    const authorizationHeader = `${algorithm} Credential=${this.accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;

    return {
      'Authorization': authorizationHeader,
      'X-Amz-Date': amzDate,
      'X-Amz-Content-Sha256': hashedPayload
    };
  }

  hmac(key, string, encoding = 'buffer') {
    return crypto.createHmac('sha256', key).update(string).digest(encoding);
  }
}

// الاستخدام
const signer = new AWSSigner(
  process.env.AWS_ACCESS_KEY_ID,
  process.env.AWS_SECRET_ACCESS_KEY,
  'us-east-1'
);

الخطوة 4: إنشاء عميل Lambda API

const LAMBDA_BASE_URL = 'https://lambda.us-east-1.amazonaws.com/2015-03-31';

const lambdaRequest = async (path, options = {}) => {
  const url = new URL(`${LAMBDA_BASE_URL}${path}`);
  const method = options.method || 'GET';
  const body = options.body ? JSON.stringify(options.body) : null;

  const signer = new AWSSigner(
    process.env.AWS_ACCESS_KEY_ID,
    process.env.AWS_SECRET_ACCESS_KEY,
    'us-east-1'
  );

  const headers = signer.sign({ method, host: 'lambda.us-east-1.amazonaws.com', path }, body);

  const response = await fetch(url.toString(), {
    method,
    headers: {
      'Content-Type': 'application/json',
      ...headers,
      ...options.headers
    },
    body
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`خطأ في Lambda API: ${error.Message}`);
  }

  return response.json();
};

// الاستخدام
const functions = await lambdaRequest('/functions');
console.log(`تم العثور على ${functions.Functions.length} دالة`);

بديل: استخدام AWS SDK

للاستخدام في الإنتاج، تتعامل AWS SDK مع التوقيع تلقائيًا:

const { LambdaClient, ListFunctionsCommand, CreateFunctionCommand, InvokeCommand } = require('@aws-sdk/client-lambda');

const lambda = new LambdaClient({ region: 'us-east-1' });

// سرد الدوال
const listCommand = new ListFunctionsCommand({});
const result = await lambda.send(listCommand);

// إنشاء دالة
const createCommand = new CreateFunctionCommand({
  FunctionName: 'my-function',
  Runtime: 'nodejs20.x',
  Role: 'arn:aws:iam::123456789012:role/lambda-execution-role',
  Handler: 'index.handler',
  Code: {
    S3Bucket: 'my-bucket',
    S3Key: 'function.zip'
  }
});

const fn = await lambda.send(createCommand);

إدارة الدوال

إنشاء دالة

إنشاء دالة Lambda عبر واجهة برمجة التطبيقات:

const createFunction = async (functionConfig) => {
  const response = await lambdaRequest('/functions', {
    method: 'POST',
    body: {
      FunctionName: functionConfig.name,
      Runtime: functionConfig.runtime || 'nodejs20.x',
      Role: functionConfig.roleArn,
      Handler: functionConfig.handler || 'index.handler',
      Code: {
        S3Bucket: functionConfig.s3Bucket,
        S3Key: functionConfig.s3Key
      },
      Description: functionConfig.description || '',
      Timeout: functionConfig.timeout || 3,
      MemorySize: functionConfig.memorySize || 128,
      Environment: {
        Variables: functionConfig.environment || {}
      },
      Tags: functionConfig.tags || {}
    }
  });

  return response;
};

// الاستخدام
const fn = await createFunction({
  name: 'order-processor',
  roleArn: 'arn:aws:iam::123456789012:role/lambda-execution-role',
  handler: 'index.handler',
  runtime: 'nodejs20.x',
  s3Bucket: 'my-deployments-bucket',
  s3Key: 'order-processor/v1.0.0.zip',
  description: 'معالجة الطلبات من قائمة انتظار SQS',
  timeout: 30,
  memorySize: 512,
  environment: {
    DB_HOST: 'db.example.com',
    LOG_LEVEL: 'info'
  }
});

console.log(`تم إنشاء الدالة: ${fn.FunctionArn}`);

تحميل الكود مباشرةً

للدوال الصغيرة (أقل من 50 ميغابايت مضغوطة):

const fs = require('fs');
const path = require('path');

const createFunctionWithZip = async (functionName, zipPath) => {
  const zipBuffer = fs.readFileSync(zipPath);
  const base64Code = zipBuffer.toString('base64');

  const response = await lambdaRequest('/functions', {
    method: 'POST',
    body: {
      FunctionName: functionName,
      Runtime: 'nodejs20.x',
      Role: 'arn:aws:iam::123456789012:role/lambda-execution-role',
      Handler: 'index.handler',
      Code: {
        ZipFile: base64Code
      }
    }
  });

  return response;
};

// حزمة الدالة
// zip -r function.zip index.js node_modules/
await createFunctionWithZip('my-function', './function.zip');

تحديث كود الدالة

نشر إصدار كود جديد:

const updateFunctionCode = async (functionName, updateConfig) => {
  const response = await lambdaRequest(`/functions/${functionName}/code`, {
    method: 'PUT',
    body: {
      S3Bucket: updateConfig.s3Bucket,
      S3Key: updateConfig.s3Key,
      Publish: updateConfig.publish || false
    }
  });

  return response;
};

// الاستخدام
const updated = await updateFunctionCode('order-processor', {
  s3Bucket: 'my-deployments-bucket',
  s3Key: 'order-processor/v1.1.0.zip',
  publish: true // إنشاء إصدار جديد
});

console.log(`تم التحديث إلى الإصدار: ${updated.Version}`);

تحديث إعدادات الدالة

تعديل المهلة والذاكرة والبيئة:

const updateFunctionConfig = async (functionName, config) => {
  const response = await lambdaRequest(`/functions/${functionName}/configuration`, {
    method: 'PUT',
    body: {
      Runtime: config.runtime,
      Handler: config.handler,
      Description: config.description,
      Timeout: config.timeout,
      MemorySize: config.memorySize,
      Environment: {
        Variables: config.environment
      }
    }
  });

  return response;
};

// الاستخدام
const updated = await updateFunctionConfig('order-processor', {
  timeout: 60,
  memorySize: 1024,
  environment: {
    DB_HOST: 'new-db.example.com',
    LOG_LEVEL: 'debug'
  }
});

حذف دالة

إزالة الدالة:

const deleteFunction = async (functionName, qualifier = null) => {
  const path = qualifier
    ? `/functions/${functionName}?Qualifier=${qualifier}`
    : `/functions/${functionName}`;

  await lambdaRequest(path, { method: 'DELETE' });
  console.log(`تم حذف الدالة ${functionName}`);
};

استدعاء الدوال

الاستدعاء المتزامن (الطلب-الاستجابة)

استدعاء دالة والانتظار للاستجابة:

const invokeFunction = async (functionName, payload, qualifier = null) => {
  const path = qualifier
    ? `/functions/${functionName}/invocations?Qualifier=${qualifier}`
    : `/functions/${functionName}/invocations`;

  const response = await lambdaRequest(path, {
    method: 'POST',
    headers: {
      'X-Amz-Invocation-Type': 'RequestResponse', // متزامن
      'X-Amz-Log-Type': 'Tail' // تضمين السجلات
    },
    body: payload
  });

  // تحليل الاستجابة
  const result = JSON.parse(Buffer.from(response.Payload).toString());
  const logs = Buffer.from(response.LogResult, 'base64').toString();

  return { result, logs };
};

// الاستخدام
const { result, logs } = await invokeFunction('order-processor', {
  orderId: 'ORD-12345',
  customerId: 'CUST-67890',
  items: [
    { sku: 'PROD-001', quantity: 2 },
    { sku: 'PROD-002', quantity: 1 }
  ]
});

console.log(`النتيجة: ${JSON.stringify(result)}`);
console.log(`السجلات:\n${logs}`);

الاستدعاء غير المتزامن (أطلق وانسَ)

استدعاء دالة دون انتظار:

const invokeAsync = async (functionName, payload) => {
  const response = await lambdaRequest(`/functions/${functionName}/invocations`, {
    method: 'POST',
    headers: {
      'X-Amz-Invocation-Type': 'Event', // غير متزامن
      'X-Amz-Log-Type': 'None'
    },
    body: payload
  });

  return {
    statusCode: response.StatusCode,
    executionId: response['X-Amz-Execution-Id']
  };
};

// الاستخدام - تشغيل معالجة غير متزامنة
const result = await invokeAsync('email-sender', {
  to: 'customer@example.com',
  template: 'order-confirmation',
  data: { orderId: 'ORD-12345' }
});

console.log(`معرف الاستدعاء غير المتزامن: ${result.executionId}`);

استدعاء تجريبي

اختبار الأذونات دون التنفيذ:

const dryRunInvocation = async (functionName) => {
  const response = await lambdaRequest(`/functions/${functionName}/invocations`, {
    method: 'POST',
    headers: {
      'X-Amz-Invocation-Type': 'DryRun'
    }
  });

  return response;
};

// الاستخدام - التحقق من أذونات IAM
try {
  await dryRunInvocation('order-processor');
  console.log('أذونات الاستدعاء سليمة');
} catch (error) {
  console.error('تم رفض الإذن:', error.message);
}

أنواع استجابات الاستدعاء

نوع الاستدعاء السلوك حالة الاستخدام
RequestResponse متزامن، ينتظر النتيجة استدعاءات API، أوامر CLI
Event غير متزامن، أطلق وانسَ معالجة الأحداث، الإشعارات
DryRun اختبار الأذونات فقط التحقق، التصحيح

إدارة الإصدارات والأسماء المستعارة

نشر الإصدارات

إنشاء إصدار دالة غير قابل للتغيير:

const publishVersion = async (functionName, description = null) => {
  const response = await lambdaRequest(`/functions/${functionName}/versions`, {
    method: 'POST',
    body: description ? { Description: description } : {}
  });

  return response;
};

// الاستخدام
const version = await publishVersion('order-processor', 'v1.2.0 - إضافة حساب الضريبة');
console.log(`الإصدار المنشور: ${version.Version}`);

إنشاء الأسماء المستعارة

إنشاء مؤشر مسمى للإصدار:

const createAlias = async (functionName, aliasName, version, description = null) => {
  const response = await lambdaRequest(`/functions/${functionName}/aliases`, {
    method: 'POST',
    body: {
      Name: aliasName,
      FunctionVersion: version,
      Description: description
    }
  });

  return response;
};

// الاستخدام - إنشاء اسم مستعار للإنتاج
const prodAlias = await createAlias('order-processor', 'prod', '5', 'إصدار الإنتاج');
console.log(`اسم المورد الخاص بالاسم المستعار (Alias ARN): ${prodAlias.AliasArn}`);

تحويل حركة المرور باستخدام تكوين التوجيه

تحويل حركة المرور تدريجياً إلى إصدار جديد:

const updateAliasWithRouting = async (functionName, aliasName, routingConfig) => {
  const response = await lambdaRequest(`/functions/${functionName}/aliases/${aliasName}`, {
    method: 'PUT',
    body: {
      RoutingConfig: {
        AdditionalVersionWeights: routingConfig
      }
    }
  });

  return response;
};

// الاستخدام - 10% من حركة المرور إلى الإصدار 6، 90% إلى الإصدار 5
await updateAliasWithRouting('order-processor', 'prod', {
  '6': 0.1
});

// بعد التحقق، تحويل 100%
await updateAliasWithRouting('order-processor', 'prod', {});

حالات استخدام الأسماء المستعارة

الاسم المستعار الإصدار الغرض
dev $LATEST اختبار التطوير
staging الأحدث المختبر التحقق من الجودة
prod إصدار مستقر حركة مرور الإنتاج
blue الإنتاج الحالي نشر أزرق-أخضر
green إصدار جديد نشر أزرق-أخضر

تعيين مصادر الأحداث

إنشاء محفز SQS

ربط قائمة انتظار SQS بـ Lambda:

const createSQSEventSource = async (functionName, queueArn, batchSize = 10) => {
  const response = await lambdaRequest('/event-source-mappings', {
    method: 'POST',
    body: {
      EventSourceArn: queueArn,
      FunctionName: functionName,
      BatchSize: batchSize,
      Enabled: true
    }
  });

  return response;
};

// الاستخدام
const mapping = await createSQSEventSource(
  'order-processor',
  'arn:aws:sqs:us-east-1:123456789012:orders-queue',
  10
);

console.log(`تم إنشاء مصدر الحدث: ${mapping.UUID}`);

إنشاء محفز تيار DynamoDB

ربط تيار DynamoDB بـ Lambda:

const createDynamoDBEventSource = async (functionName, streamArn, startingPosition = 'LATEST') => {
  const response = await lambdaRequest('/event-source-mappings', {
    method: 'POST',
    body: {
      EventSourceArn: streamArn,
      FunctionName: functionName,
      StartingPosition: startingPosition,
      BatchSize: 100,
      BisectBatchOnFunctionError: true,
      MaximumRetryAttempts: 3
    }
  });

  return response;
};

// الاستخدام
await createDynamoDBEventSource(
  'user-analytics',
  'arn:aws:dynamodb:us-east-1:123456789012:table/Users/stream/2026-03-25T00:00:00.000'
);

أنواع مصادر الأحداث

المصدر حالة الاستخدام دعم الدُفعات
SQS قوائم انتظار الرسائل نعم (1-10)
Kinesis تيارات في الوقت الفعلي نعم (1-10,000)
DynamoDB Streams تغييرات قاعدة البيانات نعم (1-1,000)
S3 أحداث الكائنات لا (1 لكل حدث)
EventBridge توجيه الأحداث نعم
API Gateway واجهات HTTP API لا
Schedule مهام Cron لا

إدارة الطبقات

إنشاء طبقة

تعبئة الكود المشترك/التوابع:

const createLayer = async (layerName, layerConfig) => {
  const response = await lambdaRequest('/layers', {
    method: 'POST',
    body: {
      LayerName: layerName,
      Description: layerConfig.description,
      CompatibleRuntimes: layerConfig.runtimes,
      Content: {
        S3Bucket: layerConfig.s3Bucket,
        S3Key: layerConfig.s3Key
      }
    }
  });

  return response;
};

// الاستخدام
const layer = await createLayer('shared-utils', {
  description: 'أدوات وتوابع مشتركة',
  runtimes: ['nodejs20.x', 'nodejs18.x'],
  s3Bucket: 'my-layers-bucket',
  s3Key: 'shared-utils/v1.zip'
});

console.log(`اسم المورد الخاص بالطبقة (Layer ARN): ${layer.LayerArn}`);

استخدام الطبقات في الدوال

إرفاق الطبقات بالدالة:

const createFunctionWithLayers = async (functionConfig) => {
  const response = await lambdaRequest('/functions', {
    method: 'POST',
    body: {
      FunctionName: functionConfig.name,
      Runtime: functionConfig.runtime,
      Role: functionConfig.roleArn,
      Handler: functionConfig.handler,
      Code: {
        S3Bucket: functionConfig.s3Bucket,
        S3Key: functionConfig.s3Key
      },
      Layers: functionConfig.layers // مصفوفة من أسماء موارد الطبقات (Layer ARNs)
    }
  });

  return response;
};

// الاستخدام
await createFunctionWithLayers({
  name: 'api-handler',
  roleArn: 'arn:aws:iam::123456789012:role/lambda-execution-role',
  handler: 'index.handler',
  runtime: 'nodejs20.x',
  s3Bucket: 'my-deployments-bucket',
  s3Key: 'api-handler/v1.0.0.zip',
  layers: [
    'arn:aws:lambda:us-east-1:123456789012:layer:shared-utils:1',
    'arn:aws:lambda:us-east-1:123456789012:layer:aws-sdk:3'
  ]
});

التزامن والتوسع

تحديد التزامن المحجوز

حجز السعة للدوال الحيوية:

const putFunctionConcurrency = async (functionName, reservedConcurrentExecutions) => {
  const response = await lambdaRequest(`/functions/${functionName}/concurrency`, {
    method: 'PUT',
    body: {
      ReservedConcurrentExecutions: reservedConcurrentExecutions
    }
  });

  return response;
};

// الاستخدام - حجز 100 تنفيذ متزامن
await putFunctionConcurrency('order-processor', 100);

حدود التزامن على مستوى الحساب

نوع الحساب الحد الافتراضي زيادة متاحة
الطبقة المجانية 1,000 نعم
الدفع حسب الاستخدام 1,000 نعم
المؤسسات 1,000+ حدود مخصصة

قائمة التحقق من نشر الإنتاج

قبل النشر إلى الإنتاج:

حالات الاستخدام الحقيقية

الواجهة الخلفية لـ API

تقوم شركة SaaS ببناء واجهة REST API عديمة الخادم:

التنفيذ الرئيسي:

خط أنابيب معالجة الأحداث

منصة تجارة إلكترونية تعالج الطلبات:

التنفيذ الرئيسي:

الخلاصة

توفر واجهة برمجة تطبيقات AWS Lambda إمكانيات حوسبة عديمة الخادم شاملة. النقاط الرئيسية:

button

قسم الأسئلة الشائعة

كيف أقوم بالمصادقة باستخدام Lambda API؟

استخدم بيانات اعتماد AWS IAM مع توقيع الإصدار 4. تتعامل AWS SDK مع التوقيع تلقائيًا.

ما الفرق بين الاستدعاء المتزامن وغير المتزامن؟

الاستدعاء المتزامن (RequestResponse) ينتظر اكتمال الدالة ويعيد النتائج. الاستدعاء غير المتزامن (Event) يضع الطلب في قائمة الانتظار ويعود فورًا.

كيف تعمل إصدارات Lambda؟

كل إصدار منشور هو لقطة غير قابلة للتغيير لدالتك. استخدم الأسماء المستعارة للإشارة إلى إصدارات محددة وتمكين تحويل حركة المرور.

ما هي طبقات Lambda؟

طبقات Lambda تقوم بتعبئة الكود والتوابع بشكل منفصل عن كود الدالة، مما يتيح استخدام مكتبات مشتركة عبر دوال متعددة.

كيف أقلل من أوقات البدء الباردة؟

استخدم التزامن المجهز، حزم نشر أصغر، ولغات مجمعة (Go, Rust) للدوال الحساسة للزمن.

ما هو التزامن المحجوز؟

التزامن المحجوز يضمن فتحات تنفيذ لدوال محددة، مما يمنع مشكلات "الجار المزعج".

هل يمكنني تشغيل Lambda من S3؟

نعم، قم بتكوين إشعارات أحداث S3 لاستدعاء Lambda عند إنشاء/حذف الكائنات.

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات