Comment utiliser le framework Java avec AWS Lambda! ??

TL;DR

Vous avez toujours voulu utiliser un framework Java tel que Spring Boot avec AWS Lambda?

En conclusion, il est relativement facile de placer un framework de proxy appelé aws-serverless-java-container au-dessus d'AWS Lambda. Est faisable.

Aujourd'hui, j'aimerais écrire à ce sujet tout en traduisant légèrement ce blog AWS.

AWS Open Source Blog Running APIs Written in Java on AWS Lambda

Contexte

Les développeurs Java développent souvent avec des frameworks familiers tels que Spring et Spring Boot, Jersey et Spark.

Ces frameworks peuvent être utilisés pour déployer des Wars et Jars construits à l'aide d'un conteneur de servlet tel que Tomcat, ou pour être utilisés comme un Jar exécutable contenant une application.

Avec AWS sans serveur, vous pouvez créer un backend Web avec AWS Lambda et Amazon API Gateway, mais Lambda est responsable du calcul et API Gateway est responsable de la gestion REST.

Dans cet article, je présenterai le framework aws-serverless-java-container qui peut être utilisé avec Lambda.

Comment ça fonctionne

En termes simples, aws-serverless-java-container est fait avec des frameworks tels que Spring, Spring Boot, Jersey et Spark. Il vous permet d'exécuter facilement votre application dans AWS Lambda avec des changements de code minimes.

フレームワーク間のプロキシ

aws-serverless-java-container agit comme un proxy entre le moteur d'exécution Lambda et le framework sélectionné, se faisant passer pour un moteur de servlet. Convertit l'événement de API Gateway en un objet de requête que l'infrastructure peut comprendre et l'objet de réponse de l'application dans un format que API Gateway peut comprendre.

Si vous souhaitez créer votre propre application avec Spring Boot 2 sur Lambda, voici la méthode d'installation détaillée. Quick start Spring Boot2

Téléchargement de l'exemple d'application

Clonons aws-serverless-java-container depuis awslab. Il contient des proxys et des exemples de code pour divers frameworks Java.

$ git clone https://github.com/awslabs/aws-serverless-java-container.git

Cliquez ici pour obtenir un proxy pour votre propre application

Vous pouvez les utiliser pour créer vos propres applications, mais par souci de simplicité, j'aimerais utiliser l'exemple Spring Boot 2 dans cet article.

Présentation de Spring Boot 2 à Lambda

Échantillons de Spring Boot2 Pet Shop

Tout d'abord, remplissons les conditions préalables suivantes.

Commençons par créer une application Java à l'aide de la commande mvn.

$ cd aws-serverless-java-container/samples/springboot2/pet-store/
$ mvn package

Si la commande mvn réussit, vous devriez avoir un serverless-spring-boot-example-1.0-SNAPSHOT.jar dans le répertoire target.

Ensuite, utilisez AWS SAM pour créer un package à déployer sur Lambda. Pour <VOTRE NOM DE BUCKET S3>, spécifiez un nom de compartiment S3 approprié.

$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket <YOUR S3 BUCKET NAME>

Une fois que vous avez un package à déployer, il est temps de le déployer sur Lambda. Ce déploiement déploie AWS Lambda, qui gère la logique, et API Gateway, qui reçoit les demandes HTTPS et appelle Lambda.

$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringBootSample --capabilities CAPABILITY_IAM

Si le déploiement réussit, vous pouvez trouver le point de terminaison de l'API qui a été réellement créé avec la commande suivante.

$ aws cloudformation describe-stacks --stack-name ServerlessSpringBootSample
{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", 
            "Description": "Example Pet Store API written with spark with the aws-serverless-java-container library", 
            "Tags": [], 
            "Outputs": [
                {
                    "Description": "URL for application", 
                    "OutputKey": "SpringBootPetStoreApi", 
                    "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets"
                }
            ], 
            "CreationTime": "2016-12-13T22:59:31.552Z", 
            "Capabilities": [
                "CAPABILITY_IAM"
            ], 
            "StackName": "JerseySample", 
            "NotificationARNs": [], 
            "StackStatus": "UPDATE_COMPLETE"
        }
    ]
}

Le point de terminaison de l'API spécifié dans ʻOutputValue` sera l'URI de l'API déployée et lancée cette fois.

Vérifions l'opération.

$ curl https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets

Si le JSON résultant est renvoyé, vous avez réussi!

Comment était-ce? C'était si simple d'installer l'exemple d'application.


Comment passer à l'étape suivante?

Spring Boot 2 est un excellent framework qui peut être facilement exécuté sur Lambda en suivant les étapes ci-dessus, mais si vous souhaitez introduire un framework plus petit avec un tour plus petit, vous pouvez également utiliser Spark ou Micronaut. Essayez-le.

En outre, pour les charges de travail préoccupées par la latence lorsque Lambda est démarré pour la première fois, une exécution native à l'aide de GraalVM fourni par Oracle est également possible.

Cliquez ici pour un exemple de conversion native utilisant Micronaut et GraalVM Micronaut X Graal VM Sample Pet Shop

Veuillez vous référer au matériel de présentation du JJUG CCC 2019 Fall comme information connexe dans cet article.

[À propos de Java à l'ère sans serveur](https://www.slideshare.net / AmazonWebServicesJapan / serverlessjava-199195000) À propos de Java à l'ère sans serveur

Recommended Posts

Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser l'API Java avec des expressions lambda
Comment utiliser les expressions Java lambda
Comment utiliser BootStrap avec Play Framework
Utiliser des couches Lambda avec Java
[Java] Comment utiliser Map
Comment utiliser java Facultatif
Comment utiliser la classe Java
[Java] Comment utiliser removeAll ()
Comment utiliser Java Map
Comment utiliser les variables Java
Comment utiliser HttpClient de Java (Get)
[Java] Comment utiliser la méthode de jointure
[Traitement × Java] Comment utiliser les variables
Comment utiliser mssql-tools avec Alpine
[JavaFX] [Java8] Comment utiliser GridPane
Comment utiliser les méthodes de classe [Java]
[Java] Comment utiliser List [ArrayList]
Comment utiliser les classes en Java?
[Traitement × Java] Comment utiliser les tableaux
[Java] Comment utiliser la classe Math
Comment utiliser le type enum Java
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
[Java] Comment utiliser la classe File
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
Comment utiliser la méthode de soumission (Java Silver)
[Explication facile à comprendre! ] Comment utiliser l'instance Java
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
AWS Lambda (Lambda) Partie 1 avec Java pour démarrer maintenant
Comment utiliser et définir les classes Java, importer
[Explication facile à comprendre! ] Comment utiliser le polymorphisme Java
[Java] [Maven3] Résumé de l'utilisation de Maven3
[Traitement × Java] Comment utiliser la classe
Comment utiliser la classe Java Scanner (Remarque)
[Traitement × Java] Comment utiliser la fonction
[Explication facile à comprendre! ] Comment utiliser ArrayList [Java]
[Java] Comment utiliser la classe Calendar
[Java] Découvrez comment utiliser correctement Optional
[Explication facile à comprendre! ] Comment utiliser la surcharge Java
gestion des exceptions try-catch-finally Comment utiliser java
[Explication facile à comprendre! ] Comment utiliser l'encapsulation Java
[Java] Comment tester s'il est nul dans JUnit
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for