परिचय: सर्वरलेस और PHP — यह कोई विरोधाभास क्यों नहीं है
\n\nलंबे समय तक यह माना जाता था कि PHP और सर्वरलेस आर्किटेक्चर असंगत हैं। PHP Apache या Nginx की स्थायी प्रक्रियाओं से जुड़ा था, जबकि सर्वरलेस Node.js या Python से। हालांकि, Bref जैसे टूल और AWS Lambda में कस्टम रनटाइम एनवायरनमेंट (Custom Runtimes) के आधिकारिक समर्थन के साथ, PHP को दूसरी जान मिल गई।
\n\nसर्वरलेस फंक्शन आपको सर्वर प्रबंधित किए बिना PHP कोड चलाने की अनुमति देते हैं। आप केवल वास्तविक निष्पादन समय (मिलीसेकंड तक सटीक) के लिए भुगतान करते हैं। यह इसके लिए एक आदर्श समाधान है:
\n- \n
- वेबहुक हैंडलर (Telegram, Stripe, Slack); \n
- कम लोड वाले माइक्रोसर्विसेज; \n
- CloudWatch Events के माध्यम से आवधिक कार्य (cron); \n
- API-प्रॉक्सी और हल्के बैकएंड। \n
इस लेख में, हम शुरू से AWS Lambda पर PHP चलाने का तरीका समझेंगे: IAM-रोल बनाने से लेकर एक कार्यशील फंक्शन को डिप्लॉय करने तक।
\n\n1. AWS Lambda में PHP की आर्किटेक्चर
\n\nCustom Runtime कैसे काम करता है
\nAWS Lambda मूल रूप से केवल Java, Go, PowerShell, Node.js, C#, Python और Ruby का समर्थन करता है। PHP चलाने के लिए, हम Custom Runtime का उपयोग करते हैं — यह एक विशेष निष्पादन योग्य फ़ाइल (bootstrap) है जो Lambda Runtime API के साथ संवाद करती है।
\n\nसबसे लोकप्रिय तरीका Bref फ्रेमवर्क है। यह PHP 8.x, Composer और मानक एक्सटेंशन के सेट के साथ तैयार लेयर (Layer) प्रदान करता है।
\n\n// Bref के लिए प्रोजेक्ट संरचना\nproject/\n├── index.php // प्रवेश बिंदु\n├── composer.json\n├── serverless.yml // डिप्लॉय कॉन्फ़िगरेशन\n└── vendor/\n\nडिप्लॉय के तीन तरीके
\n- \n
- Bref (अनुशंसित) — सबसे आसान। serverless.yml और तैयार लेयर का उपयोग करता है। \n
- मैन्युअल बिल्ड — आप Amazon Linux 2 के लिए PHP कंपाइल करते हैं और ZIP में पैक करते हैं। \n
- Docker इमेज — आप Lambda Container Image का उपयोग करते हैं (2020 से समर्थित)। \n
हम पहले विकल्प पर विचार करेंगे — यह 90% कार्यों के लिए उपयुक्त है।
\n\n2. चरण-दर-चरण सेटअप: इंस्टॉलेशन से पहले अनुरोध तक
\n\nचरण 1. एनवायरनमेंट तैयार करना
\nसुनिश्चित करें कि आपके पास इंस्टॉल हैं:
\n- \n
- PHP 8.0+ (स्थानीय रूप से) \n
- Composer \n
- Node.js और npm (Serverless Framework के लिए) \n
- कॉन्फ़िगर किए गए credentials के साथ
aws-cliउपयोगिता \n
Serverless Framework को वैश्विक रूप से इंस्टॉल करें:
\nnpm install -g serverless\n\nचरण 2. प्रोजेक्ट बनाएं
\ncomposer create-project bref/bref my-php-lambda\ncd my-php-lambda\n\nइनिशियलाइज़ेशन के बाद, आपको serverless.yml फ़ाइल दिखाई देगी। इसे संपादित करें:
service: my-php-app\n\nprovider:\n name: aws\n region: eu-central-1 # निकटतम क्षेत्र चुनें\n runtime: provided.al2 # Amazon Linux 2\n\nplugins:\n - ./vendor/bref/bref\n\nfunctions:\n hello:\n handler: index.php\n description: 'सरल PHP फंक्शन'\n layers:\n - ${bref:layer.php-80} # PHP 8.0 के साथ लेयर\n\nचरण 3. फंक्शन लिखें
\nindex.php खोलें:
<?php\n\nrequire __DIR__ . '/vendor/autoload.php';\n\n/**\n * Lambda-फंक्शन हैंडलर\n * @param array $event AWS (API Gateway, SQS आदि) से इनपुट डेटा\n * @return array JSON प्रारूप में उत्तर\n */\nfunction handler(array $event): array\n{\n // CloudWatch में लॉग करें\n error_log('अनुरोध प्राप्त हुआ: ' . json_encode($event));\n\n $name = $event['queryStringParameters']['name'] ?? 'अतिथि';\n\n return [\n 'statusCode' => 200,\n 'headers' => [\n 'Content-Type' => 'application/json',\n ],\n 'body' => json_encode([\n 'message' => "नमस्ते, {$name}!",\n 'timestamp' => time(),\n ]),\n ];\n}\n