PHP und Serverless: Eine unerwartete Allianz
\n\nWenn wir „Serverless“ (oder „serverloses Computing“) hören, denken wir zuerst an JavaScript, Python oder Go. PHP wirkt in diesem Kontext wie ein „Dinosaurier“, der im Zeitalter von Shared Hosting und monolithischen WordPress-Seiten feststeckt. Aber sehen wir der Wahrheit ins Auge: PHP lebt, ist gesund und flexibler, als Sie denken.
\n\nHeute schauen wir uns an, wie man PHP-Code in AWS Lambda und seinen Alternativen ausführt. Sie werden erfahren, warum Serverless PHP keine Magie ist, sondern ein praktisches Werkzeug für APIs, Webhook-Handler und Microservices. Spoiler: Sie müssen Ihre Lieblingssprache nicht aufgeben.
\n\nWas ist Serverless eigentlich?
\n\nRäumen wir gleich mit einem Mythos auf. „Serverless“ bedeutet nicht „ohne Server“. Es bedeutet, dass Sie sich nicht um den Server kümmern müssen. Die Plattform (AWS, Google Cloud, Vercel) verwaltet die Infrastruktur selbst: Sie skaliert, aktualisiert und repariert. Sie laden einfach Ihren Code hoch und zahlen für die Ausführungszeit.
\n\nFür PHP klingt das nach einer Herausforderung. Denn PHP benötigt traditionell einen Webserver (Apache, Nginx) und das PHP-FPM-Modul. Aber die Technologie steht nicht still.
\n\nWie funktioniert PHP in einer serverlosen Umgebung?
\n\nDas Hauptproblem: Lambda-Funktionen (und ihre Alternativen) sind zustandslose Container, die nur wenige Sekunden oder Minuten leben. Sie „halten“ keine Session im Speicher und betreiben keinen Apache. Daher muss ein standardmäßiges PHP-Skript, das auf $_GET wartet oder in $_SESSION schreibt, angepasst werden.
Die Lösung kam in Form von speziellen Runtimes. Sie wandeln ein Lambda-Ereignis (z. B. eine HTTP-Anfrage von API Gateway) in einen vertrauten PHP-Kontext um. Das beliebteste Werkzeug dafür ist Bref.
\n\nBref: PHP-Engine für AWS Lambda
\n\nBref ist ein Open-Source-Projekt, das es ermöglicht, PHP „out of the box“ auf AWS Lambda auszuführen. Es wird mit vorgefertigten Layern geliefert, die PHP 8.x und gängige Erweiterungen (PDO, Redis, gd, mbstring) enthalten.
\n\nInstallation und erster Start
\n\nFür die Arbeit benötigen Sie:
\n- \n
- Ein AWS-Konto \n
- Installiertes
composerundaws-cli\n - Node.js (für das Serverless Framework) \n
Erstellen wir eine einfache Funktion, die ein JSON mit der aktuellen Uhrzeit zurückgibt:
\n\n// index.php\n<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\n\nclass TimeHandler extends HttpHandler\n{\n public function handleRequest($request, Context $context): array\n {\n return [\n 'statusCode' => 200,\n 'headers' => ['Content-Type' => 'application/json'],\n 'body' => json_encode([\n 'server_time' => date('Y-m-d H:i:s'),\n 'php_version' => PHP_VERSION,\n 'message' => 'Hello from Serverless PHP!'\n ]),\n ];\n }\n}\n\nreturn new TimeHandler();\n\nJetzt konfigurieren wir das Deployment. Erstellen Sie eine Datei serverless.yml:
# serverless.yml\nservice: php-time-api\n\nprovider:\n name: aws\n region: eu-central-1\n runtime: provided.al2\n\nplugins:\n - ./vendor/bref/bref\n\nfunctions:\n api:\n handler: index.php\n timeout: 28\n layers:\n - ${bref:layer.php-81}\n events:\n - httpApi: 'GET /time'\n\nStarten Sie das Deployment:
\ncomposer require bref/bref\nserverless deploy\n\nNach einer Minute erhalten Sie eine URL wie: https://xxx.execute-api.eu-central-1.amazonaws.com/time. Öffnen Sie sie im Browser – Sie sehen ein JSON. Herzlichen Glückwunsch, Sie haben soeben eine Serverless PHP-Funktion auf AWS Lambda ausgeführt!
Alternativen zu AWS Lambda für PHP
\n\nSie möchten sich nicht an AWS binden? Es gibt Alternativen, die ebenfalls mit PHP kompatibel sind.
\n\nGoogle Cloud Functions (mit Anpassung)
\n\nGoogle unterstützt PHP nicht nativ, aber Sie können