Fonctions Serverless en PHP : AWS Lambda de A à Z — guide complet

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

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

  1. Bref (recommandé) — la plus simple. Utilise serverless.yml et des couches prêtes.
  2. Compilation manuelle — vous compilez PHP pour Amazon Linux 2 et le conditionnez dans un ZIP.
  3. 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-cli avec 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-lambda


Aprè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(), ]), ];}


Blogs

Book Recommendations