وظائف Serverless بلغة PHP: AWS Lambda من الألف إلى الياء – دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا Serverless و PHP ليسا متناقضين



لفترة طويلة، كان يُعتقد أن PHP وبنية serverless غير متوافقتين. ارتبطت PHP بعمليات Apache أو Nginx الدائمة، بينما ارتبطت serverless بـ Node.js أو Python. ومع ذلك، مع ظهور أدوات مثل Bref والدعم الرسمي لبيئات التشغيل المخصصة (Custom Runtimes) في AWS Lambda، حصلت PHP على فرصة جديدة للحياة.



تتيح وظائف Serverless تشغيل كود PHP دون إدارة خادم. أنت تدفع فقط مقابل وقت التنفيذ الفعلي (بدقة تصل إلى الميلي ثانية). هذا هو الحل المثالي لـ:

  • معالجات Webhooks (Telegram، Stripe، Slack)؛
  • الخدمات المصغرة ذات الأحمال المنخفضة؛
  • المهام الدورية (cron) عبر CloudWatch Events؛
  • وكلاء API والخلفيات الخفيفة.


في هذه المقالة، سنشرح كيفية تشغيل PHP على AWS Lambda من الصفر: من إنشاء أدوار IAM إلى نشر وظيفة عاملة.



1. بنية PHP في AWS Lambda



كيف يعمل Custom Runtime

يدعم AWS Lambda أصلاً فقط Java، Go، PowerShell، Node.js، C#، Python و Ruby. لتشغيل PHP، نستخدم Custom Runtime – وهو ملف تنفيذي خاص (bootstrap) يتواصل مع Lambda Runtime API.



الطريقة الأكثر شيوعًا هي إطار العمل Bref. يأتي مع طبقة جاهزة (Layer) تحتوي على PHP 8.x و Composer ومجموعة من الإضافات القياسية.



// هيكل المشروع لـ Brefproject/├── index.php          // نقطة الدخول├── composer.json├── serverless.yml     // تكوين النشر└── vendor/


ثلاث طرق للنشر

  1. Bref (موصى به) – الأسهل. يستخدم serverless.yml وطبقات جاهزة.
  2. التجميع اليدوي – تقوم بتجميع PHP تحت Amazon Linux 2 وتعبئته في ملف ZIP.
  3. صورة Docker – تستخدم Lambda Container Image (مدعوم منذ 2020).


سننظر في الخيار الأول – وهو مناسب لـ 90% من المهام.



2. الإعداد خطوة بخطوة: من التثبيت إلى أول طلب



الخطوة 1. تحضير البيئة

تأكد من تثبيت ما يلي:

  • PHP 8.0+ (محليًا)
  • Composer
  • Node.js و npm (لـ Serverless Framework)
  • أداة aws-cli مع بيانات اعتماد (credentials) مهيأة


نقوم بتثبيت Serverless Framework عالميًا:

npm install -g serverless


الخطوة 2. إنشاء المشروع

composer create-project bref/bref my-php-lambdacd my-php-lambda


بعد التهيئة، سترى ملف serverless.yml. سنقوم بتعديله:



service: my-php-app

provider: name: aws region: eu-central-1 # اختر أقرب منطقة runtime: provided.al2 # Amazon Linux 2

plugins: - ./vendor/bref/bref

functions: hello: handler: index.php description: 'دالة PHP بسيطة' layers: - ${bref:layer.php-80} # طبقة PHP 8.0


الخطوة 3. كتابة الدالة نفسها

افتح index.php:



<?php

require __DIR__ . '/vendor/autoload.php';

/** * معالج دالة Lambda * @param array $event بيانات الإدخال من AWS (API Gateway، SQS، إلخ.) * @return array الرد بتنسيق JSON */function handler(array $event): array{ // تسجيل في CloudWatch error_log('تم استلام الطلب: ' . json_encode($event));

$name = $event['queryStringParameters']['name'] ?? 'ضيف';

return [ 'statusCode' => 200, 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode([ 'message' => "مرحبًا، {$name}!", 'timestamp' => time(), ]), ];}


المدونات

توصيات الكتب