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

AWS Lambda avec PHP en utilisant Bref et Serverless Framework

Publié le March 16, 2020

Temps de lecture : 9 minutes

L'utilisation de PHP dans les environnements sans serveur était auparavant difficile en raison du manque de runtimes par défaut fournis par les différents fournisseurs de cloud. Cependant, cela a changé récemment avec l'ajout de bibliothèques et de fonctionnalités, rendant l'utilisation de PHP plus abordable.

Cet exemple va créer un fichier AWS Lambda pour PHP en utilisant Bref. L'ajout de l AWS Lambda Runtime API et la possibilité d'ajouter des couches AWS Lambda Layers a facilité la création d'un runtime PHP personnalisé. C'est pourquoi des packages comme Bref ont vu le jour pour faciliter la vie des développeurs PHP.

Conditions préalables

Voici ce dont vous aurez besoin pour cet exemple :

Cadre sans serveur

Les Bref s'appuie sur le Serverless Framework foundation, qui est une "solution complète pour construire et exploiter des applications sans serveur". Ainsi, notre première étape consiste à installer ce framework sur le système de développement que vous utilisez. Nous recommandons de l'installer globalement, pour permettre une utilisation depuis n'importe où via CLI.

npm install -g serverless

Références AWS

Une fois Serverless installé, assurez-vous que vous avez également configuré les informations d'identification AWS nécessaires pour que Serverless interagisse avec les différents services AWS. (S3, Lambda, et potentiellement EC2 ou des bases de données si nécessaire) Dans cet exemple, nous n'utiliserons que S3 et Lambda. Vous pouvez en savoir plus à ce sujet sur serverless.com et bref.sh de sorte que nous n'entrerons pas dans les détails ici.

Installer Bref

Vous devez également installer Bref en tant que dépendance dans chaque projet qui l'utilise. Dans cette optique, nous allons utiliser Composer pour l'installer à l'aide de l'interface de programmation depuis le répertoire du projet.

composer require bref/bref

Projet Init Bref

Une fois que Composer a finalisé l'ajout de Bref au projet, la meilleure façon de commencer est de le faire. init Bref pour l'utiliser. En faisant le init vous demandera alors si vous souhaitez une fonction Function, HTTP ou Console, ce qui entraînera la création de serverless.yml et éventuellement index.php en fonction de votre choix, que vous pouvez modifier pour l'adapter aux besoins de l'application.

vendor/bin/bref init

Exemple de fichier YML

A titre d'exemple, voici un exemple de serverless.yml fichier :

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/**'

Dans le fichier, observez le nom du service, que vous pouvez modifier pour qu'il corresponde aux conventions de dénomination de vos fonctions. Par défaut, il est nommé app.

Suite à cela, nous pouvons voir les informations sur le fournisseur pour AWS Lambda.

Il y a une section pour les plugins et l'inclusion de Bref.

Vient ensuite la section décrivant les détails de la fonction. On y trouve le gestionnaire, la description souhaitée à ajouter à AWS et toutes les couches requises, telles que PHP. Notez que dans l'exemple ci-dessus, php-73 est spécifié. Si vous aviez choisi HTTP à la place, vous auriez spécifié php-73-fpm et fournira un serveur web dans la couche au lieu d'une version CLI de PHP. L'image à utiliser est la raison pour laquelle le processus init est essentiel pour s'assurer que Lambda crée la bonne couche.

Déploiement sur AWS Lambda

Pour les cas d'utilisation Function ou HTTP, la valeur par défaut init fournit un squelette suffisant pour être déployé directement sur AWS Lambda et testé avec Serverless. En s'appuyant sur la configuration des identifiants AWS ajoutée précédemment, Serverless se déploiera directement sur Lambda en utilisant le contenu de serverless.yml comme critères.

serverless deploy

IMPORTANT : L'exemple d'application, tel quel, ne comporte aucune authentification ou vérification. Toute personne ayant accès à l'URL fournie après le déploiement peut y accéder. Cela pourrait entraîner des frais inattendus sur vos comptes. Par conséquent, veuillez sécuriser l'application si vous avez l'intention de la laisser active.

Test de la fonction

Dans le cas d'une fonction, il y a deux façons de tester. La première consiste à utiliser la console AWS, tandis que la seconde consiste à utiliser Serverless via CLI à partir du système utilisé pour le déploiement.

Console AWS

En naviguant dans la console AWS, sélectionnez l'élément Lambda dans la liste des services Compute.

AWS Console-Lambda DashboardAWS Console-Lambda Dashboard

Sur le tableau de bord Lambda, vous pouvez sélectionner la fonction créée et créer un nouveau test en cliquant sur Configure test events. Vous pouvez également cliquer sur le bouton Test pour recevoir la même invite.

Lambda Function Create Test ExampleLambda Function Create Test Example

Pour tester le squelette créé, ajoutez un nom et modifiez légèrement le JSON dans le corps.

Configure Lambda Test EventsConfigure Lambda Test Events

En cliquant sur le bouton Create au bas de la boîte de dialogue, vous pouvez alors cliquer sur le bouton Test pour exécuter le test. L'exécution devrait se traduire par l'apparition d'une zone de dialogue verte que vous pouvez développer pour afficher les résultats.

Lambda Test ResultsLambda Test Results

Exécution de fonctions sans serveur

Comme indiqué ci-dessus, vous pouvez également utiliser la CLI Serverless pour également tester la fonction en utilisant la commande suivante depuis la racine de l'application locale :

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

Exemple de résultat :

Serverless Lambda Function ExecutionServerless Lambda Function Execution

Test d'une fonction HTTP

Si vous avez déployé une fonction HTTP à la place, les deux méthodes de test ci-dessus ne fonctionneront pas. En revanche, vous pouvez utiliser un client HTTP ou un navigateur standard pour effectuer des tests en utilisant l'URL fournie par les résultats du déploiement.

Et ensuite ?

Avec une fonction AWS Lambda créée, vous pouvez continuer à ajouter plus de code et à créer des applications PHP plus robustes en tirant parti des technologies sans serveur disponibles aujourd'hui. Surveillez les prochains articles montrant comment créer des fonctions utiles pour exploiter les API et les services de Vonage à l'aide d'AWS Lambda.

Partager:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAnciens de Vonage

Adam est un développeur et un consultant qui aime l'ultra-course, les blogs, et qui aide les autres à apprivoiser la technologie pour accomplir des choses étonnantes avec un désir insatiable de mentorat et d'aide.