مقدمة: لماذا Serverless و PHP؟
\n\nلوقت طويل، كان يُعتقد أن PHP والحوسبة بدون خوادم غير متوافقة. لكن مع ظهور بيئات التشغيل المخصصة لـ AWS Lambda وتطور أدوات مثل Bref، تغير الوضع جذريًا. اليوم يمكنك تشغيل تطبيقات PHP في بنية تحتية مُدارة بالكامل من AWS Lambda، وتدفع فقط مقابل وقت التنفيذ الفعلي للكود.
في هذه المقالة، سنشرح كيفية إنشاء وإعداد ونشر دالة Serverless بلغة PHP باستخدام AWS Lambda. ستتعرف على المفاهيم الأساسية والمشكلات النموذجية وأفضل الممارسات. المادة موجهة لمطوري PHP الملمين بأساسيات AWS، لكننا سنحاول شرح كل شيء بأقصى قدر من التفصيل.
\n\nبنهاية هذا الدليل، ستتمكن من تشغيل أول نقطة نهاية PHP لك في السحابة دون خادم مخصص واحد.
\n\n1. بنية PHP Serverless على AWS Lambda
\n\n1.1. كيف ينفذ AWS Lambda كود PHP؟
\n\nلا تدعم بيئة Lambda الأصلية PHP بشكل مباشر. لتشغيل كود PHP، يتم استخدام طبقة وسيطة خاصة — Custom Runtime. وهي عبارة عن ملف تنفيذي (عادةً بلغة Python أو Bash) يقوم بتشغيل مترجم PHP، ويمرر إليه الحدث (event)، ويعيد النتيجة.
\n\nالأداة الأكثر شيوعًا لذلك هي Bref (Bare-metal PHP for AWS Lambda). وهي توفر صورة PHP جاهزة مع إعدادات محسّنة للبيئة الخالية من الخوادم.
\n\nالعملية الأساسية تبدو كالتالي:
\n- \n
- يرسل العميل طلب HTTP إلى API Gateway. \n
- يحول API Gateway الطلب إلى حدث JSON ويمرره إلى Lambda. \n
- تقوم Lambda بتشغيل Custom Runtime، الذي يقوم بتهيئة PHP-FPM. \n
- يعالج سكريبت PHP الحدث ويعيد الرد. \n
1.2. المكونات الرئيسية للمكدس
\n- \n
- AWS Lambda — وحدة الحوسبة. \n
- API Gateway — واجهة HTTP لاستدعاء الدالة. \n
- Bref — بيئة تشغيل PHP لـ Lambda. \n
- Serverless Framework (اختياري) — أداة للنشر. \n
- Amazon S3 / DynamoDB — تخزين البيانات (إذا لزم الأمر). \n
2. الإعداد خطوة بخطوة: من المشروع إلى النشر
\n\n2.1. تثبيت الأدوات
\nللعمل، ستحتاج إلى:
\n- \n
- PHP 8.1+ مع الإضافات
mbstring،curl،json. \n - Composer — مدير التبعيات. \n
- Node.js و npm (لـ Serverless Framework). \n
- حساب AWS مع مستخدم IAM مُعد. \n
قم بتثبيت Serverless Framework عالميًا:
\nnpm install -g serverless\n\n2.2. إنشاء مشروع مع Bref
\nأنشئ دليل المشروع وقم بتهيئته:
\nmkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref\n\nأنشئ ملف index.php — ستكون هذه هي الدالة الخاصة بنا:
<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nreturn function ($event) {\n $name = $event['queryStringParameters']['name'] ?? 'World';\n \n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'text/plain'],\n 'body' => "Hello, {$name}! This is Serverless PHP on AWS Lambda."\n ];\n};\n\nلاحظ: يجب أن تعيد الدالة مصفوفة بالمفاتيح statusCode و headers و body. هذا هو التنسيق القياسي للرد للتكامل مع API Gateway.
2.3. تكوين serverless.yml
\nأنشئ ملف serverless.yml في جذر المشروع:
service: php-lambda-demo\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunction