Serverless en PHP : AWS Lambda et alternatives pour un backend sans serveur

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 sans serveur : mythe ou réalité ?

\n\n

Quand on entend l'expression "Fonctions Serverless", la première association est généralement Node.js ou Python. PHP semble être un monolithe qui vit sur un éternel Apache ou Nginx. Mais les temps changent. Aujourd'hui, PHP dans une architecture serverless n'est pas une exotisme, mais un outil de travail pour des milliers de projets. Vous pouvez écrire des microservices, traiter des webhooks, redimensionner des images et même lancer des API complètes, sans vous soucier des serveurs, de la mise à l'échelle et du paiement des capacités inactives.

\n\n

Dans cet article, nous allons voir comment fonctionne PHP sur AWS Lambda, quelles sont les alternatives (Bref, OpenFaaS, Vercel), et surtout, nous allons écrire du code réel que vous pouvez exécuter immédiatement. Si vous êtes développeur PHP et que vous voulez faire un pas vers le développement moderne cloud-native, vous êtes au bon endroit.

\n\n

Qu'est-ce que Serverless et pourquoi un développeur PHP en a-t-il besoin ?

\n\n

Serverless (ou FaaS — Functions as a Service) est un modèle où vous chargez votre code, et le fournisseur décide lui-même quand et comment l'exécuter. Vous ne payez que pour le temps d'exécution réel. Pas de machines virtuelles, pas d'"Apache" qui consomme de la mémoire 24h/24 et 7j/7. Pour PHP, longtemps considéré comme un "langage pour hébergement avec FTP", c'est une bouffée d'air frais.

\n\n

Avantages pour les projets PHP :

\n
    \n
  • Économie — pas besoin de maintenir un serveur entier pour un seul script.
  • \n
  • Auto-mise à l'échelle — Lambda crée elle-même des copies de la fonction en cas d'augmentation de la charge.
  • \n
  • Simplicité de déploiement — vous chargez le code, et il fonctionne.
  • \n
  • Approche microservices — vous pouvez diviser un monolithe en petites fonctions.
  • \n
\n\n

Problème : PHP n'est pas conçu pour être Serverless par défaut

\n\n

Le PHP classique n'est pas un démon. Il se lance, exécute le script et s'arrête. Pour Lambda, c'est un problème : la fonction doit être "froide" et démarrer en quelques millisecondes. Le PHP standard démarre lentement (chargement du framework, autoloading, configurations). La solution est Bref.

\n\n

Bref — l'outil principal pour Serverless PHP

\n\n

Bref est un SDK open-source et un runtime qui transforme PHP en une fonction Lambda native. Il compile PHP en un binaire statique (via bref/bref), ce qui permet un démarrage à froid instantané. Bref prend en charge Laravel, Symfony, Slim et tout code personnalisé.

\n\n

Comment fonctionne Bref ?

\n

Vous écrivez une classe PHP standard, vous implémentez l'interface Bref\\Context\\Context, et Bref se charge du traitement HTTP. Pour une API, une seule fonction suffit.

\n\n

Exemple : API Serverless en PHP pour générer des codes QR

\n

Supposons que nous devions recevoir une requête POST avec du texte et retourner un code QR au format PNG. Écrivons la fonction :

\n\n
<?php\n// handler.php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\nuse chillerlan\\QRCode\\QRCode;\nuse chillerlan\\QRCode\\QROptions;\n\nclass QrGenerator extends HttpHandler\n{\n    public function handleRequest($request, Context $context): array\n    {\n        $body = json_decode($request->getBody()->getContents(), true);\n        $text = $body['text'] ?? 'Hello, Serverless!';\n        \n        $options = new QROptions([\n            'outputType' => QRCode::OUTPUT_IMAGE_PNG,\n            'imageBase64' => false,\n        ]);\n        \n        $qrcode = new QRCode($options);\n        $imageData = $qrcode->render($text);\n        \n        return [\n            'headers' => ['Content-Type' => 'image/png'],\n            'statusCode' => 200,\n            'body' => base64_encode($imageData),\n            'isBase64Encoded' => true,\n        ];\n    }\n}\n\nreturn new QrGenerator();
\n\n

Déploiement sur AWS Lambda avec Bref

\n

Installez Bref CLI et exécutez :

\n
composer require bref/bref\n./vendor/bin/bref init\n./vendor/bin/bref deploy
\n

Voilà. En une minute, vous aurez un endpoint HTTPS,

Blogs

Book Recommendations