Introduction au calcul Serverless et à AWS Lambda
\n\nL'architecture Serverless est devenue l'une des principales tendances du développement cloud moderne. Contrairement à son nom, les serveurs existent toujours, mais les développeurs n'ont plus besoin d'y penser. AWS Lambda est un service Amazon qui permet d'exécuter du code sans gérer de serveurs. Vous payez uniquement pour le temps de calcul lorsque votre code est réellement exécuté.
\n\nDans cet article, nous allons détailler comment créer des fonctions serverless en Java avec AWS Lambda. Vous apprendrez à configurer un projet, écrire votre premier handler, déployer la fonction et la déboguer dans des conditions réelles.
\n\nLes bases d'AWS Lambda pour le développeur Java
\n\nQu'est-ce qu'AWS Lambda ?
\n\nAWS Lambda est une plateforme Function-as-a-Service (FaaS) qui exécute votre code en réponse à des événements. Lambda prend en charge Java 8, 11, 17 et 21 (Corretto). La fonction s'exécute dans un conteneur isolé, reçoit en entrée un événement (event) et un contexte (context), et retourne un résultat.
\n\nConcepts clés
\n\n- \n
- Handler — point d'entrée de votre fonction. C'est généralement une méthode implémentant l'interface
RequestHandlerouRequestStreamHandler. \n - Event — données transmises à la fonction (JSON, chaîne de caractères, données binaires). \n
- Context — objet contenant des informations sur l'environnement d'exécution (ID de requête, timeout, nom de la fonction). \n
- Cold start — délai lors du premier appel de la fonction après une période d'inactivité. Pour Java, cela peut être de 1 à 5 secondes. \n
- Layer — archive contenant des bibliothèques pouvant être attachée à plusieurs fonctions. \n
Premier exemple : une Lambda simple en Java
\n\nCréons un projet Maven et ajoutons la dépendance :
\n\n<dependency>\n <groupId>com.amazonaws</groupId>\n <artifactId>aws-lambda-java-core</artifactId>\n <version>1.2.2</version>\n</dependency>\n\nÉcrivons maintenant le handler :
\n\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\n\npublic class HelloHandler implements RequestHandler<String, String> {\n\n @Override\n public String handleRequest(String input, Context context) {\n context.getLogger().log("Reçu : " + input);\n return "Bonjour, " + input + " !";\n }\n}\n\nCe handler reçoit une chaîne de caractères, la journalise et retourne un message de salutation. Pour déployer la fonction, empaquetez le projet en JAR et chargez-le dans la console AWS ou utilisez AWS CLI.
\n\nTechniques avancées pour AWS Lambda en Java
\n\nTravailler avec JSON via Jackson
\n\nDans les projets réels, vous traiterez des événements JSON. Ajoutez Jackson dans pom.xml :
<dependency>\n <groupId>com.fasterxml.jackson.core</groupId>\n <artifactId>jackson-databind</artifactId>\n <version>2.15.2</version>\n</dependency>\n\nExemple de handler pour travailler avec JSON :
\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.amazonaws.services.lambda.runtime.Context;\nimport com.amazonaws.services.lambda.runtime.RequestHandler;\nimport java.util.Map;\n\npublic class JsonHandler implements RequestHandler<Map<String, Object>, String> {\n\n private static final ObjectMapper mapper = new ObjectMapper();\n\n @Override\n public String handleRequest(Map<String, Object> event, Context context) {\n try {\n String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(event);\n context.getLogger().log("Événement : " + json);\n return "Traité avec succès";\n } catch (Exception e) {\n throw new RuntimeException("Erreur d'analyse JSON", e);\n }\n }\n}\n\n