PHP sur des serveurs sans serveur : AWS Lambda pour les développeurs web

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

PHP et Serverless : une alliance inattendue

\n\n

Quand on entend « Serverless » (ou « calcul sans serveur »), la première association qui vient à l'esprit, c'est JavaScript, Python ou Go. PHP dans ce contexte semble être un « dinosaure » coincé à l'époque des hébergements mutualisés et des WordPress monolithiques. Mais regardons la vérité en face : PHP est vivant, en bonne santé et plus flexible que vous ne le pensez.

\n\n

Aujourd'hui, nous allons voir comment exécuter du code PHP dans AWS Lambda et ses alternatives. Vous découvrirez pourquoi le PHP serverless n'est pas de la magie, mais un outil de travail pour les API, les gestionnaires de webhooks et les microservices. Spoiler : vous n'aurez pas à abandonner votre langage préféré.

\n\n

Qu'est-ce que le Serverless en réalité ?

\n\n

Dissipons tout de suite le mythe. « Serverless » ne signifie pas « sans serveur ». Cela signifie que vous ne pensez pas au serveur. La plateforme (AWS, Google Cloud, Vercel) gère elle-même l'infrastructure : mise à l'échelle, mises à jour, réparations. Vous téléchargez simplement votre code et payez pour le temps d'exécution.

\n\n

Pour PHP, cela ressemble à un défi. En effet, PHP nécessite traditionnellement un serveur web (Apache, Nginx) et le module PHP-FPM. Mais les technologies ne restent pas figées.

\n\n

Comment PHP fonctionne-t-il dans un environnement sans serveur ?

\n\n

Le problème clé : les fonctions Lambda (et leurs équivalents) sont des conteneurs sans état (stateless) qui vivent quelques secondes ou minutes. Ils ne « conservent » pas de session en mémoire, ne font pas tourner Apache. Par conséquent, un script PHP standard qui attend $_GET ou écrit dans $_SESSION doit être adapté.

\n\n

La solution est venue sous la forme d'exécutions spécialisées (runtimes). Ils transforment un événement Lambda (par exemple, une requête HTTP d'API Gateway) en un contexte PHP familier. L'outil le plus populaire pour cela est Bref.

\n\n

Bref : le moteur PHP pour AWS Lambda

\n\n

Bref est un projet open-source qui permet d'exécuter PHP sur AWS Lambda « prêt à l'emploi ». Il est livré avec des couches (layers) prêtes à l'emploi qui incluent PHP 8.x et des extensions populaires (PDO, Redis, gd, mbstring).

\n\n

Installation et premier lancement

\n\n

Pour travailler, vous aurez besoin de :

\n
    \n
  • Un compte AWS
  • \n
  • composer et aws-cli installés
  • \n
  • Node.js (pour Serverless Framework)
  • \n
\n\n

Créons une fonction simple qui renvoie un JSON avec l'heure actuelle :

\n\n
// index.php\n<?php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\n\nclass TimeHandler extends HttpHandler\n{\n    public function handleRequest($request, Context $context): array\n    {\n        return [\n            'statusCode' => 200,\n            'headers' => ['Content-Type' => 'application/json'],\n            'body' => json_encode([\n                'server_time' => date('Y-m-d H:i:s'),\n                'php_version' => PHP_VERSION,\n                'message' => 'Hello from Serverless PHP!'\n            ]),\n        ];\n    }\n}\n\nreturn new TimeHandler();
\n\n

Configurons maintenant le déploiement. Créez un fichier serverless.yml :

\n\n
# serverless.yml\nservice: php-time-api\n\nprovider:\n    name: aws\n    region: eu-central-1\n    runtime: provided.al2\n\nplugins:\n    - ./vendor/bref/bref\n\nfunctions:\n    api:\n        handler: index.php\n        timeout: 28\n        layers:\n            - ${bref:layer.php-81}\n        events:\n            - httpApi: 'GET /time'
\n\n

Lancez le déploiement :

\n
composer require bref/bref\nserverless deploy
\n\n

Dans une minute, vous obtiendrez une URL du type : https://xxx.execute-api.eu-central-1.amazonaws.com/time. Ouvrez-la dans votre navigateur — vous verrez du JSON. Félicitations, vous venez de lancer une fonction PHP serverless sur AWS Lambda !

\n\n

Alternatives à AWS Lambda pour PHP

\n\n

Vous ne voulez pas vous lier à AWS ? Il existe des alternatives qui s'entendent aussi avec PHP.

\n\n

Google Cloud Functions (avec adaptation)

\n\n

Google ne supporte pas PHP nativement, mais vous pouvez

Blogs

Book Recommendations