Serverless-Funktionen in PHP: AWS Lambda von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum Serverless und PHP?

\n\n

Lange 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.

\n\n

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\n

Am Ende dieses Leitfadens werden Sie in der Lage sein, Ihren ersten PHP-Endpunkt in der Cloud ohne einen einzigen dedizierten Server auszuführen.

\n\n

1. Architektur von Serverless PHP auf AWS Lambda

\n\n

1.1. Wie führt AWS Lambda PHP aus?

\n\n

Die 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\n

Das 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\n

Der grundlegende Prozess sieht wie folgt aus:

\n
    \n
  1. Der Client sendet eine HTTP-Anfrage an API Gateway.
  2. \n
  3. API Gateway wandelt die Anfrage in ein JSON-Ereignis um und übergibt es an Lambda.
  4. \n
  5. Lambda startet die Custom Runtime, die PHP-FPM initialisiert.
  6. \n
  7. Das PHP-Skript verarbeitet das Ereignis und gibt eine Antwort zurück.
  8. \n
\n\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
\n\n

2. Schritt-für-Schritt-Einrichtung: Vom Projekt bis zum Deployment

\n\n

2.1. Installation der Tools

\n

Fü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
\n\n

Installieren Sie das Serverless Framework global:

\n
npm install -g serverless
\n\n

2.2. Erstellen des Projekts mit Bref

\n

Erstellen Sie ein Projektverzeichnis und initialisieren Sie es:

\n
mkdir php-lambda-demo\ncd php-lambda-demo\ncomposer require bref/bref
\n\n

Erstellen Sie die Datei index.php – dies wird unsere Funktion sein:

\n
<?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\n

Beachten 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.

\n\n

2.3. Konfiguration von serverless.yml

\n

Erstellen Sie die Datei serverless.yml im Stammverzeichnis des Projekts:

\n
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                

Blogs

Buchempfehlungen