Einleitung: Warum Serverless und PHP kein Widerspruch sind
Lange Zeit galt PHP als inkompatibel mit Serverless-Architekturen. PHP wurde mit dauerhaften Prozessen wie Apache oder Nginx assoziiert, Serverless hingegen mit Node.js oder Python. Doch mit dem Aufkommen von Tools wie Bref und der offiziellen Unterstützung von Custom Runtimes in AWS Lambda hat PHP neuen Auftrieb erhalten.
Serverless-Funktionen ermöglichen die Ausführung von PHP-Code ohne Serververwaltung. Sie zahlen nur für die tatsächliche Ausführungszeit (auf die Millisekunde genau). Dies ist die ideale Lösung für:
- Webhook-Handler (Telegram, Stripe, Slack);
- Mikroservices mit geringer Last;
- Periodische Aufgaben (Cron) über CloudWatch Events;
- API-Proxys und leichte Backends.
In diesem Artikel zeigen wir Ihnen, wie Sie PHP von Grund auf in AWS Lambda zum Laufen bringen: von der Erstellung von IAM-Rollen bis zum Deployment einer funktionsfähigen Funktion.
1. Architektur von PHP in AWS Lambda
Wie Custom Runtime funktioniert
AWS Lambda unterstützt nativ nur Java, Go, PowerShell, Node.js, C#, Python und Ruby. Um PHP auszuführen, verwenden wir eine Custom Runtime – eine spezielle ausführbare Datei (Bootstrap), die mit der Lambda Runtime API kommuniziert.
Die beliebteste Methode ist das Framework Bref. Es wird mit einer fertigen Schicht (Layer) geliefert, die PHP 8.x, Composer und eine Reihe von Standarderweiterungen enthält.
// Projektstruktur für Brefproject/├── index.php // Einstiegspunkt├── composer.json├── serverless.yml // Deployment-Konfiguration└── vendor/Drei Möglichkeiten des Deployments
- Bref (empfohlen) – die einfachste Methode. Verwendet serverless.yml und vorgefertigte Schichten.
- Manueller Build – Sie kompilieren PHP für Amazon Linux 2 und packen es in eine ZIP-Datei.
- Docker-Image – Sie verwenden ein Lambda-Container-Image (seit 2020 unterstützt).
Wir betrachten die erste Option – sie ist für 90 % der Aufgaben geeignet.
2. Schritt-für-Schritt-Einrichtung: Von der Installation bis zur ersten Anfrage
Schritt 1. Vorbereitung der Umgebung
Stellen Sie sicher, dass Folgendes installiert ist:
- PHP 8.0+ (lokal)
- Composer
- Node.js und npm (für Serverless Framework)
- Das Tool
aws-climit konfigurierten Credentials
Installieren Sie das Serverless Framework global:
npm install -g serverlessSchritt 2. Projekt erstellen
composer create-project bref/bref my-php-lambdacd my-php-lambdaNach der Initialisierung sehen Sie die Datei serverless.yml. Bearbeiten wir sie:
service: my-php-app
provider: name: aws region: eu-central-1 # Wählen Sie die nächstgelegene Region runtime: provided.al2 # Amazon Linux 2
plugins: - ./vendor/bref/bref
functions: hello: handler: index.php description: 'Einfache PHP-Funktion' layers: - ${bref:layer.php-80} # Schicht mit PHP 8.0Schritt 3. Die Funktion selbst schreiben
Öffnen Sie index.php:
<?php
require __DIR__ . '/vendor/autoload.php';
/** * Lambda-Funktions-Handler * @param array $event Eingabedaten von AWS (API Gateway, SQS usw.) * @return array Antwort im JSON-Format */function handler(array $event): array{ // In CloudWatch protokollieren error_log('Anfrage erhalten: ' . json_encode($event));
$name = $event['queryStringParameters']['name'] ?? 'Gast';
return [ 'statusCode' => 200, 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode([ 'message' => "Hallo, {$name}!", 'timestamp' => time(), ]), ];}