Serverless-Funktionen in PHP: AWS Lambda – von der Theorie zur Praxis
Die moderne Webentwicklung entfernt sich zunehmend von traditionellen monolithischen Servern hin zum Cloud Computing. Die Serverless-Architektur ermöglicht es Entwicklern, sich ausschließlich auf den Code zu konzentrieren, ohne sich um die Verwaltung der Infrastruktur kümmern zu müssen. AWS Lambda ist einer der beliebtesten Dienste zur Umsetzung dieses Ansatzes. Lange Zeit galt PHP jedoch als ungeeignet für Serverless. Das ist ein Mythos. In diesem Artikel schauen wir uns an, wie man PHP-Funktionen auf AWS Lambda ausführt, welche Werkzeuge dafür benötigt werden und wie man die Leistung optimiert.
Was ist AWS Lambda und wie passt PHP hinein?
AWS Lambda ist ein Rechendienst, der Ihren Code als Reaktion auf Ereignisse ausführt und die Rechenressourcen automatisch verwaltet. Sie zahlen nur für die tatsächliche Ausführungszeit und die Anzahl der Anfragen. Lambda unterstützt nativ Node.js, Python, Java, Go und .NET, aber PHP gehört nicht zu dieser "Out-of-the-Box"-Liste. Das ist jedoch kein Problem: Wir können benutzerdefinierte Laufzeitumgebungen (Custom Runtime) oder vorgefertigte Wrapper wie Bref verwenden.
Bref ist ein Open-Source-Projekt, das eine fertige Runtime für PHP auf AWS Lambda sowie eine Integration mit Frameworks (Laravel, Symfony) bereitstellt. Damit können Sie Event-Handler, API-Endpunkte oder sogar vollwertige Webanwendungen schreiben, die im Serverless-Modus laufen.
Hauptkomponenten für die Ausführung von PHP auf Lambda:
- Bref Runtime – eine Schicht, die den PHP-Interpreter und notwendige Erweiterungen enthält.
- Ereignis (Event) – ein Auslöser, der die Funktion startet (HTTP-Anfrage, Datei-Upload in S3, Änderung in DynamoDB).
- Handler – eine PHP-Funktion oder Klassenmethode, die das Ereignis empfängt und verarbeitet.
Einrichtung der Umgebung und erstes Beispiel
Für die Arbeit benötigen wir Composer, Docker (für den Build) und ein AWS-Konto. Installieren wir Bref:
composer require bref/brefBref verwendet ein Docker-Image für lokale Tests und den Build. Nach der Installation erstellen wir eine Datei serverless.yml – die Konfiguration für das Deployment auf AWS Lambda.
Beispielkonfiguration serverless.yml:
service: my-php-function
provider: name: aws region: us-east-1 runtime: provided.al2
plugins: - ./vendor/bref/bref
functions: hello: handler: index.php layers: - ${bref:layer.php-81} events: - httpApi: 'GET /hello'Jetzt schreiben wir einen einfachen Handler – die Datei index.php:
<?php
require __DIR__ . '/vendor/autoload.php';
return function ($event) { $name = $event['queryStringParameters']['name'] ?? 'World'; return [ 'statusCode' => 200, 'body' => "Hello, $name!", ];};Dieser Code gibt eine JSON-Antwort mit einer Begrüßung zurück. Um ihn lokal auszuführen, verwenden wir den Befehl:
vendor/bin/bref local helloDeployment und Trigger: Von HTTP bis S3
Nach dem lokalen Test kann die Funktion in der Cloud bereitgestellt werden. Stellen Sie sicher, dass Ihre AWS Credentials konfiguriert sind (über die AWS CLI oder Umgebungsvariablen). Führen Sie aus:
serverless deployIn der Konsole sehen Sie die URL Ihres API Gateway (falls ein HTTP-Trigger konfiguriert ist). Jetzt können Sie über den Browser oder curl auf die Funktion zugreifen.
Weitere beliebte Trigger für PHP-Funktionen:
- S3 Events – Verarbeitung von Datei-Uploads/-Löschungen.
- SQS/SNS – asynchrone Verarbeitung von Nachrichtenwarteschlangen.
- CloudWatch Events – zeitgesteuerter Start (cron).
- DynamoDB Streams – Reaktion auf Änderungen in