Introduction : Pourquoi Serverless et PHP ne sont pas un oxymore
Longtemps, on a cru que PHP et l'architecture serverless étaient incompatibles. PHP était associé aux processus permanents d'Apache ou Nginx, tandis que serverless l'était à Node.js ou Python. Cependant, avec l'apparition d'outils comme Bref et le support officiel des environnements d'exécution personnalisés (Custom Runtimes) dans AWS Lambda, PHP a connu un second souffle.
Les fonctions serverless permettent d'exécuter du code PHP sans gérer de serveur. Vous ne payez que pour le temps d'exécution réel (à la milliseconde près). C'est une solution idéale pour :
- Les gestionnaires de webhooks (Telegram, Stripe, Slack) ;
- Les microservices à faible charge ;
- Les tâches périodiques (cron) via CloudWatch Events ;
- Les proxys API et les backends légers.
Dans cet article, nous allons voir comment mettre PHP sur AWS Lambda de zéro : de la création des rôles IAM au déploiement d'une fonction fonctionnelle.
1. Architecture PHP dans AWS Lambda
Comment fonctionne Custom Runtime
AWS Lambda ne supporte nativement que Java, Go, PowerShell, Node.js, C#, Python et Ruby. Pour exécuter PHP, nous utilisons un Custom Runtime — un fichier exécutable spécial (bootstrap) qui communique avec l'API Lambda Runtime.
La méthode la plus populaire est le framework Bref. Il est livré avec une couche (Layer) prête à l'emploi contenant PHP 8.x, Composer et un ensemble d'extensions standard.
// Structure du projet pour Brefproject/├── index.php // Point d'entrée├── composer.json├── serverless.yml // Configuration de déploiement└── vendor/Trois méthodes de déploiement
- Bref (recommandé) — la plus simple. Utilise serverless.yml et des couches prêtes.
- Compilation manuelle — vous compilez PHP pour Amazon Linux 2 et le conditionnez dans un ZIP.
- Image Docker — vous utilisez Lambda Container Image (supporté depuis 2020).
Nous allons examiner la première option — elle convient à 90% des cas.
2. Configuration pas à pas : de l'installation à la première requête
Étape 1. Préparation de l'environnement
Assurez-vous d'avoir installé :
- PHP 8.0+ (localement)
- Composer
- Node.js et npm (pour Serverless Framework)
- L'utilitaire
aws-cliavec des credentials configurés
Installez Serverless Framework globalement :
npm install -g serverlessÉtape 2. Création du projet
composer create-project bref/bref my-php-lambdacd my-php-lambdaAprès l'initialisation, vous verrez le fichier serverless.yml. Modifions-le :
service: my-php-app
provider: name: aws region: eu-central-1 # Choisissez la région la plus proche runtime: provided.al2 # Amazon Linux 2
plugins: - ./vendor/bref/bref
functions: hello: handler: index.php description: 'Fonction PHP simple' layers: - ${bref:layer.php-80} # Couche avec PHP 8.0Étape 3. Écrire la fonction
Ouvrez index.php :
<?php
require __DIR__ . '/vendor/autoload.php';
/** * Gestionnaire de fonction Lambda * @param array $event Données d'entrée d'AWS (API Gateway, SQS, etc.) * @return array Réponse au format JSON */function handler(array $event): array{ // Journalisation dans CloudWatch error_log('Requête reçue : ' . json_encode($event));
$name = $event['queryStringParameters']['name'] ?? 'Invité';
return [ 'statusCode' => 200, 'headers' => [ 'Content-Type' => 'application/json', ], 'body' => json_encode([ 'message' => "Bonjour, {$name}!", 'timestamp' => time(), ]), ];}