Fonctions Serverless en Java avec AWS Lambda : de l'idée au déploiement
L'architecture Serverless (ou calcul sans serveur) est un modèle de cloud computing où le développeur est totalement abstrait de la gestion des serveurs. Vous écrivez simplement du code, vous le chargez dans le cloud, et le fournisseur (AWS, Google Cloud, Azure) met automatiquement à l'échelle l'infrastructure. AWS Lambda est le service phare d'Amazon dans ce domaine. Dans cet article, nous allons voir comment créer des fonctions serverless en Java, en utilisant AWS Lambda, de zéro jusqu'à un exemple prêt pour la production.
Qu'est-ce qu'AWS Lambda et pourquoi Java ?
AWS Lambda permet d'exécuter du code en réponse à des événements (requêtes HTTP, téléchargements de fichiers dans S3, modifications dans DynamoDB, etc.) sans allouer de machines virtuelles. Vous ne payez que pour le temps d'exécution réel et le nombre de requêtes.
Java est un langage mature, statiquement typé, avec un vaste écosystème de bibliothèques (Spring, Micronaut, Quarkus). Cependant, Java a des particularités pour le serverless : le démarrage à froid (temps de chargement de la JVM) peut être plus élevé qu'avec Node.js ou Python. Mais les frameworks modernes (par exemple, Quarkus ou Spring Cloud Function) et l'utilisation de GraalVM Native Image résolvent ce problème, faisant de Java un choix compétitif.
Configuration de l'environnement de développement
Pour travailler avec AWS Lambda en Java, vous aurez besoin de :
- JDK 11 ou 17 (17 recommandé pour de meilleures performances).
- Maven ou Gradle (nous utilisons Maven).
- Un compte AWS et AWS CLI installé.
- Un IDE (IntelliJ IDEA, Eclipse, VS Code).
Créez un projet Maven de base. Ajoutez dans pom.xml la dépendance pour AWS Lambda Java Core :
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.3</version></dependency>Ajoutez également le plugin de build :
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <phase>package</phase> <goals><goal>shade</goal></goals> </execution> </executions></plugin>Création de votre première fonction Lambda en Java
Créez la classe HelloLambda.java :
import com.amazonaws.services.lambda.runtime.Context;import com.amazonaws.services.lambda.runtime.RequestHandler;
public class HelloLambda implements RequestHandler<String, String> {
@Override public String handleRequest(String input, Context context) { context.getLogger().log("Input: " + input); return "Bonjour, " + input + "! Votre fonction Lambda en Java est exécutée."; }}Explication :
RequestHandler<String, String>— interface où le premier type est la donnée d'entrée, le second le type de retour.Context— objet fournissant des informations sur l'environnement d'exécution (logger, temps, nom de la fonction).
Compilez le projet : mvn clean package. Un fichier JAR apparaîtra dans le dossier target (par exemple, lambda-java-1.0-SNAPSHOT.jar).
Déploiement de la fonction dans AWS Lambda
Le déploiement peut être effectué via la console AWS ou la CLI. Considérons la CLI (la méthode la plus rapide) :
aws lambda create-function \ --function-name HelloJavaLambda \ --runtime java17 \ --role arn:aws:iam::YOUR_ACCOUNT_ID:role/lambda-basic-execution \ --handler HelloLambda::handleRequest \ --zip-file fileb://target/lambda-java-1.0-SNAPSHOT.jarParamètres importants :