https://d226lax1qjow5r.cloudfront.net/blog/blogposts/aws-lambda-with-php-using-bref-and-serverless-framework-dr/E_AWS-Lambda_1200x600.png

AWS Lambda mit PHP unter Verwendung von Bref und Serverless Framework

Zuletzt aktualisiert am March 16, 2020

Lesedauer: 8 Minuten

Die Verwendung von PHP in serverlosen Umgebungen war bisher eine Herausforderung, da die verschiedenen Cloud-Anbieter keine Standard-Laufzeiten zur Verfügung stellen. Dies hat sich jedoch in letzter Zeit mit zusätzlichen Bibliotheken und Funktionen geändert, die die Verwendung von PHP zugänglicher machen.

In diesem Beispiel wird ein AWS Lambda Funktion für PHP unter Verwendung von Bref. Der Zusatz von AWS Lambda Laufzeit-API und die Möglichkeit zum Hinzufügen von AWS Lambda-Schichten hat es einfacher gemacht, eine benutzerdefinierte PHP-Laufzeitumgebung zu erstellen. Daher sind Pakete wie Bref entstanden, die das Leben von PHP-Entwicklern einfacher machen.

Voraussetzungen

Hier sind die Dinge, die Sie für dieses Beispiel benötigen:

Serverloses Framework

Die Bref Werkzeug nutzt das Serverless Framework das eine "Komplettlösung für die Erstellung und den Betrieb serverloser Applications" darstellt. Unser erster Schritt besteht also darin, dieses Framework auf dem von Ihnen verwendeten Entwicklungssystem zu installieren. Wir empfehlen, es global zu installieren, um die Nutzung von überall aus über CLI zu ermöglichen.

npm install -g serverless

AWS-Anmeldeinformationen

Stellen Sie nach der Installation von Serverless sicher, dass Sie auch die AWS-Anmeldeinformationen eingerichtet haben, die Serverless für die Interaktion mit den verschiedenen AWS-Diensten benötigt. (S3, Lambda und möglicherweise EC2 oder Datenbanken nach Bedarf) In diesem Beispiel werden wir nur S3 und Lambda verwenden. Weitere Informationen dazu finden Sie unter serverless.com und bref.sh nachlesen, sodass wir hier nicht ins Detail gehen werden.

Bref installieren

Sie sollten Bref auch als Abhängigkeit in jedem Projekt installieren, das es verwendet. In diesem Sinne werden wir Composer verwenden, um es über die CLI aus dem Projektverzeichnis heraus zu installieren.

composer require bref/bref

Init Bref Projekt

Nachdem der Composer das Hinzufügen von Bref zum Projekt abgeschlossen hat, ist der beste Weg, damit zu beginnen init Bref für die Verwendung. Durch die Eingabe von init wird dann abgefragt, ob Sie eine Funktions-, HTTP- oder Konsolenfunktion wünschen, was zur Erstellung von serverless.yml und möglicherweise index.php abhängig von Ihrer Auswahl, die Sie bearbeiten können, um sie an die Bedürfnisse der Anwendung anzupassen.

vendor/bin/bref init

Beispiel YML-Datei

Im Folgenden finden Sie ein Beispiel für eine serverless.yml Datei:

service: app

provider:
    name: aws
    region: us-east-1
    runtime: provided

plugins:
    - ./vendor/bref/bref

functions:
    function:
        handler: index.php
        description: ''
        layers:
            - ${bref:layer.php-73}

# Exclude files from deployment
package:
    exclude:
        - 'tests/**'

Achten Sie in der Datei auf den Namen des Dienstes, den Sie an die gewünschten Namenskonventionen Ihrer Funktionen anpassen können. Standardmäßig heißt er app.

Anschließend sehen wir die Anbieterinformationen für AWS Lambda.

Es gibt einen Abschnitt für alle Plugins und die Einbeziehung von Bref.

Dann folgt der Abschnitt, in dem die Details der Funktion beschrieben werden. Dazu gehören der Handler, die gewünschte Beschreibung, die zu AWS hinzugefügt werden soll, und alle erforderlichen Schichten, wie PHP. Beachten Sie im obigen Beispiel, php-73 angegeben ist. Hätten Sie stattdessen HTTP ausgewählt, würde die Funktion php-73-fpm angeben und einen Webserver in der Ebene anstelle einer reinen CLI-Version von PHP bereitstellen. Das zu verwendende Bild ist der Grund, warum der init Prozess wichtig ist, um sicherzustellen, dass Lambda die richtige Schicht erstellt.

Bereitstellen auf AWS Lambda

Für Funktions- oder HTTP-Anwendungsfälle bietet der Standard init ein ausreichendes Skelett, um direkt in AWS Lambda bereitzustellen und mit Serverless zu testen. Unter Verwendung der zuvor hinzugefügten Konfiguration der AWS-Anmeldeinformationen stellt Serverless direkt für Lambda bereit und verwendet dabei den Inhalt von serverless.yml als Kriterien.

serverless deploy

WICHTIG! Die Beispielanwendung unterliegt in ihrer jetzigen Form keinerlei Authentifizierung oder Überprüfung. Jeder, der Zugriff auf die nach der Bereitstellung bereitgestellte URL hat, kann darauf zugreifen. Dies könnte zu unerwarteten Abbuchungen von Ihren Konten führen. Sichern Sie daher die Anwendung, wenn Sie sie aktiv lassen wollen.

Testen der Funktion

Im Falle einer Funktion gibt es zwei Möglichkeiten zum Testen. Eine Möglichkeit ist die Verwendung der AWS-Konsole, die zweite die Verwendung von Serverless über die Befehlszeilenschnittstelle (CLI) des für die Bereitstellung verwendeten Systems.

AWS-Konsole

Wählen Sie in der AWS-Konsole das Element Lambda aus der Liste der Compute-Services aus.

AWS Console-Lambda DashboardAWS Console-Lambda Dashboard

Auf dem Lambda-Dashboard können Sie die erstellte Funktion auswählen und einen neuen Test erstellen, indem Sie auf Configure test events. Alternativ können Sie auch auf die Schaltfläche Test klicken, um die gleiche Aufforderung zu erhalten.

Lambda Function Create Test ExampleLambda Function Create Test Example

Um das erstellte Skelett zu testen, fügen Sie einen Namen hinzu und ändern Sie das JSON im Body leicht ab.

Configure Lambda Test EventsConfigure Lambda Test Events

Nach einem Klick auf die Schaltfläche Create am unteren Ende des Dialogs können Sie dann auf die Schaltfläche Test klicken, um den Test auszuführen. Die Ausführung sollte zu einem grünen Dialogfeld führen, das Sie erweitern können, um die Ergebnisse anzuzeigen.

Lambda Test ResultsLambda Test Results

Serverlose Funktionsausführung

Wie oben erwähnt, können Sie die Funktion auch mit der Serverless-CLI testen, indem Sie den folgenden Befehl aus dem lokalen Anwendungsstamm heraus verwenden:

serverless invoke -f function --data='{"name": "Adam"}'

Beispielhaftes Ergebnis:

Serverless Lambda Function ExecutionServerless Lambda Function Execution

Testen einer HTTP-Funktion

Wenn Sie stattdessen eine HTTP-Funktion bereitstellen würden, würden die beiden oben genannten Testmethoden nicht funktionieren. Stattdessen können Sie einen HTTP-Client oder einen Standardbrowser zum Testen verwenden, indem Sie die von den Bereitstellungsergebnissen bereitgestellte URL verwenden.

Was nun?

Wenn Sie eine AWS Lambda-Funktion erstellt haben, können Sie weiteren Code hinzufügen und robustere PHP-Apps erstellen, die die heute verfügbaren serverlosen Technologien nutzen. In zukünftigen Beiträgen erfahren Sie, wie Sie nützliche Funktionen zur Nutzung von Vonage-APIs und -Services mit AWS Lambda erstellen können.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpVonage Ehemalige

Adam ist ein Entwickler und Berater, der gerne Ultraläufe absolviert, bloggt und anderen dabei hilft, Technologien zu zähmen, um erstaunliche Dinge zu erreichen, und der ein unstillbares Verlangen hat, Mentoren zu sein und zu helfen.