Einleitung: Warum Serverless und PHP?
\n\nLange Zeit galt PHP als inkompatibel mit serverlosem Computing. Doch mit dem Aufkommen von benutzerdefinierten AWS Lambda Runtimes und der Entwicklung von Tools wie Bref hat sich die Situation grundlegend geändert. Heute können Sie PHP-Anwendungen in einer vollständig verwalteten AWS Lambda-Infrastruktur ausführen und nur für die tatsächliche Ausführungszeit des Codes bezahlen.
In diesem Artikel werden wir erläutern, wie man eine Serverless-Funktion in PHP mit AWS Lambda erstellt, konfiguriert und bereitstellt. Sie lernen die wichtigsten Konzepte, typische Probleme und bewährte Methoden kennen. Das Material richtet sich an PHP-Entwickler, die mit den Grundlagen von AWS vertraut sind, aber wir werden versuchen, alles so detailliert wie möglich zu erklären.
\n\nAm Ende dieses Leitfadens werden Sie in der Lage sein, Ihren ersten PHP-Endpunkt in der Cloud ohne einen einzigen dedizierten Server auszuführen.
\n\n1. Architektur von Serverless PHP auf AWS Lambda
\n\n1.1. Wie führt AWS Lambda PHP aus?
\n\nDie native Lambda-Umgebung unterstützt PHP nicht direkt. Zum Ausführen von PHP-Code wird eine spezielle Zwischenschicht verwendet – die Custom Runtime. Dabei handelt es sich um eine ausführbare Datei (normalerweise in Python oder Bash), die den PHP-Interpreter startet, das Ereignis (Event) an ihn übergibt und das Ergebnis zurückgibt.
\n\nDas beliebteste Tool hierfür ist Bref (Bare-metal PHP for AWS Lambda). Es bietet ein vorgefertigtes PHP-Image mit optimierten Einstellungen für die serverlose Umgebung.
\n\nDer grundlegende Prozess sieht wie folgt aus:
\n- \n
- Der Client sendet eine HTTP-Anfrage an API Gateway. \n
- API Gateway wandelt die Anfrage in ein JSON-Ereignis um und übergibt es an Lambda. \n
- Lambda startet die Custom Runtime, die PHP-FPM initialisiert. \n
- Das PHP-Skript verarbeitet das Ereignis und gibt eine Antwort zurück. \n
1.2. Schlüsselkomponenten des Stacks
\n- \n
- AWS Lambda – Recheneinheit. \n
- API Gateway – HTTP-Schnittstelle zum Aufrufen der Funktion. \n
- Bref – PHP-Runtime für Lambda. \n
- Serverless Framework (optional) – Tool für das Deployment. \n
- Amazon S3 / DynamoDB – Datenspeicherung (falls erforderlich). \n
2. Schritt-für-Schritt-Einrichtung: Vom Projekt bis zum Deployment
\n\n2.1. Installation der Tools
\nFür die Arbeit benötigen Sie:
\n- \n
- PHP 8.1+ mit den Erweiterungen
mbstring,curl,json. \n - Composer – Abhängigkeitsmanager. \n
- Node.js und npm (für das Serverless Framework). \n
- Ein AWS-Konto mit einem konfigurierten IAM-Benutzer. \n
Installieren Sie das Serverless Framework global:
\nnpm install -g serverless\n\n2.2. Erstellen des Projekts mit Bref
\nErstellen Sie ein Projektverzeichnis und initialisieren Sie es:
\nmkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref\n\nErstellen Sie die Datei index.php – dies wird unsere Funktion sein:
<?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\nBeachten Sie: Die Funktion muss ein Array mit den Schlüsseln statusCode, headers und body zurückgeben. Dies ist das Standardantwortformat für die Integration mit API Gateway.
2.3. Konfiguration von serverless.yml
\nErstellen Sie die Datei serverless.yml im Stammverzeichnis des Projekts:
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