Commencez avec Java sans serveur avec le framework léger Micronaut!

Le sans serveur est très excitant. Certaines personnes ont dit que Java ne convient pas au serveur sans serveur en raison du soi-disant problème de démarrage à froid, mais la situation a changé en raison de l'apparition de microframes telles que Micronaut introduit cette fois et de la fonction de création d'image native (Substrate VM) de Graal VM. Cela a beaucoup changé.

En ce qui concerne le flux ici, il y a de merveilleux supports de conférence à "JJUG CCC 2019 Fall" par @_kensh et @jyukutyo, alors soyons ravis de les voir.

Maintenant, faisons du Java sans serveur avec Micronaut!

Pourquoi Micronaut?

Micronaut prétend être un "framework pour serverless" dans sa copie catch. Nous avons également organisé une session sur Micronaut et Lambda à "re: Invent 2019". Comparé à d'autres frameworks, je me suis concentré sur le serverless, et personnellement je l'ai trouvé très attractif, j'ai donc choisi cette fois.

Existe-t-il un autre cadre?

Je pense qu'il existe trois micro-frameworks majeurs qui peuvent être utilisés par Java (langages JVM tels que).

Tous sont des cadres que j'attends avec impatience à l'avenir. J'ai comparé la copie de capture, etc., veuillez donc vous y référer.

copie de capture

Cadre copie de capture Traduction gratuite
Micronaut A modern, JVM-based, full-stack framework for building modular, easily testable microservice and serverless applications. C'est un framework full-stack moderne pour les microservices et sans serveur
Quarkus A Kubernetes Native Java stack tailored for OpenJDK HotSpot and GraalVM. Framework natif Kubernetes optimisé pour OpenJDK HotSpot et GraalVM
Helidon Lightweigt. Fast. Crafted for Microservices. C'est un framework léger et rapide conçu pour les microservices.

Google Trends (États-Unis, l'année dernière)

Screen Shot 2019-12-04 at 23.01.22.png

Nombre d'étoiles GitHub

Screen Shot 2019-12-04 at 22.59.19.png https://www.githubcompare.com/

Autre

Configuration de Micronaut

Maintenant, configurons Micronaut. Le Site officiel recommande l'installation avec SDKMAN, alors installons-le selon cette procédure.

Installation de SDKMAN

$ curl -s https://get.sdkman.io | bash

Redémarrez le terminal ou exécutez le shell suivant

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

OK si la commande sdk réussit

$ sdk version
SDKMAN 5.7.4+362

Installation de Micronaut

$ sdk install micronaut

OK si la commande mn passe

$ mn -V
| Micronaut Version: 1.2.7
| JVM Version: 11.0.5

Création de fonctions Lambda dans Micronaut

Le modèle de projet est créé via la commande mn. Vous pouvez le démarrer en mode interactif en entrant seulement mn. C'est pratique car vous pouvez également exécuter des commandes. Vous pouvez également retracer l'historique des commandes.

$ mn
| Starting interactive mode...
| Enter a command name to run. Use TAB for completion:
mn> 

Vous pouvez vérifier comment utiliser la commande avec mn> help.

mn> help
Usage: mn [-hnvVx] [COMMAND]
Micronaut CLI command line interface for generating projects and services.
Commonly used commands are:
  create-app NAME
  create-cli-app NAME
  create-federation NAME --services SERVICE_NAME[,SERVICE_NAME]...
  create-function NAME
・ ・ ・

Cette fois, je veux créer une fonction Lambda, alors utilisons create-function.

mn> create-function hello-world
| Generating Java project...
| Function created at /Users/cojohnny/micronaut/hello-world
| Initializing application. Please wait...

Quittez le mode interactif une fois et vérifiez le projet généré.

mn> exit
$ cd hello-world/
$ tree
.
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── micronaut-cli.yml
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── hello
    │   │       └── world
    │   │           ├── Application.java
    │   │           ├── HelloWorld.java
    │   │           └── HelloWorldFunction.java
    │   └── resources
    │       ├── application.yml
    │       └── logback.xml
    └── test
        └── java
            └── hello
                └── world
                    ├── HelloWorldClient.java
                    └── HelloWorldFunctionTest.java

Jetons un coup d'œil à la source générée. La méthode apply de HelloWorldFunction.java est la fonction Lambda. L'implémentation actuelle est simplement un processus qui renvoie la valeur définie du nom JSON d'entrée.

HelloWorldFunction.java


package hello.world;

import io.micronaut.function.executor.FunctionInitializer;
import io.micronaut.function.FunctionBean;
import javax.inject.*;
import java.io.IOException;
import java.util.function.Function;

@FunctionBean("hello-world")
public class HelloWorldFunction extends FunctionInitializer implements Function<HelloWorld, HelloWorld> {

    @Override
    public HelloWorld apply(HelloWorld msg) {
         return msg;
    }

    /**
     * This main method allows running the function as a CLI application using: echo '{}' | java -jar function.jar 
     * where the argument to echo is the JSON to be parsed.
     */
    public static void main(String...args) throws IOException {
        HelloWorldFunction function = new HelloWorldFunction();
        function.run(args, (context)-> function.apply(context.get(HelloWorld.class)));
    }    
}

Construisons avec gradlew.

$ ./gradlew assemble

Deux types de Jar sont terminés.

$ tree build/libs/
build/libs/
├── hello-world-0.1-all.jar
└── hello-world-0.1.jar

Celui avec -all à la fin du nom de fichier est" Fat Jar "qui contient les bibliothèques dépendantes, alors téléchargez-le sur Lambda.

Configuration de la fonction Lambda

Importons le fichier "hello-world-0.1-all.jar" créé sur AWS. Définissez "hello.world.HelloWorldFunction :: apply" dans Handler.

image.png

Exécution de la fonction Lambda

Exécutons maintenant la fonction Lambda. Définissez le JSON de la requête à partir du bouton "Test" en haut de la console Lambda. Spécifiez ce qui suit pour JSON.

{
  "name": "Lambda"
}

image.png

Exécutez "Test"! Ça a marché!

image.png

Résumé

Cette fois, ce n'était qu'un processus simple, mais vous pouvez facilement créer et exécuter une fonction Lambda qui inclut un framework. En utilisant un framework léger tel que Micronaut, il sera possible de construire Lambda tout en utilisant les riches fonctionnalités du framework, il semble donc que l'application de l'architecture sans serveur aux applications à grande échelle continuera à se développer.

En ce qui concerne le démarrage à froid, qui était la plus grande préoccupation, les obstacles pour l'application à l'environnement de production sont de plus en plus bas car une solution puissante appelée «accès concurrentiel provisionné» annoncée à re: Invent 2019 a été présentée l'autre jour.

J'ai vraiment hâte de voir le monde sans serveur qui devrait se développer davantage en 2020! En particulier, même ceux qui n'avaient pas trop familier à moins de serveur ont été impliqués dans le système à grande échelle de Java, je pense qu'il est en avance au début est maintenant. Commençons ensemble avec Java sans serveur!

référence

Essayez les derniers frameworks Java, Helidon, Micronaut, Quarkus ensemble jusqu'à native-image Micronaut User Guide AWS Lambda announces Provisioned Concurrency

Recommended Posts

Commencez avec Java sans serveur avec le framework léger Micronaut!
[Java] [Play Framework] Jusqu'à ce que le projet soit démarré avec Gradle
[Java] Obtenez la date avec la classe LocalDateTime
Comprendre le framework MVC avec Java 1/4 View côté serveur
Comprendre le framework MVC avec le contrôleur Java 3/4 côté serveur
Comprendre le framework MVC avec le modèle Java 2/4 côté serveur
Commencez avec Gradle
Comment déployer Java sur AWS Lambda avec Serverless Framework
Les utilisateurs Java expérimentés se lancent dans le développement d'applications Android
[Java] Obtenez la date 10 jours plus tard avec la classe Calendar
Démarrez avec Spring Boot
Premiers pas avec les bases de Java
Un développeur Java de première année chez udemy a essayé de se lancer avec PHP
Il est maintenant temps de commencer avec l'API Stream
Commençons par la programmation parallèle
Revenir au début, démarrer avec Java ② Instructions de contrôle, instructions de boucle
[Java1.8 +] Obtenez la date du jour × suivant avec LocalDate
Ajouter une validation de bean avec Micronaut (Java)
Considération sur le framework de persistance Java 2017 (1)
J'ai essayé le framework Java "Quarkus"
Suivez le lien avec Selenium (Java)
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
Obtenez le résultat de POST en Java
[Java] Obtenir des éléments List / Map avec Iterator
Devinez le cadre de persistance Java 2017 (3) Reladomo
Premiers pas avec Ruby pour les ingénieurs Java
[Java] Obtenez le jour d'un jour spécifique
[Note] Comment démarrer avec Rspec
Introduction à Java à partir de 0 Partie 1
[Java] Comment obtenir le répertoire actuel
Démarrez avec le fonctionnement de JVM GC
Comment obtenir la date avec Java
[Java8] Recherchez le répertoire et récupérez le fichier
Essayez d'utiliser la télécommande Wii en Java
framework java
Commençons par Java - Créez un environnement de développement ②
Commençons par Java - Créez un environnement de développement ①
Liens et mémos pour démarrer avec Java (pour moi-même)
[LeJOS] Contrôlons le moteur EV3 avec Java
[Java] Réglez l'heure depuis le navigateur avec jsoup
[Java] Obtenir la longueur de la chaîne de paire de substitution
Comment utiliser le framework Java avec AWS Lambda! ??
[JAVA] Récupère uniquement le nom du fichier, à l'exclusion de l'extension
Premiers pas avec les sous-requêtes utilisant Doma avec l'API Criteria
Calculer le score de similarité des chaînes de caractères avec JAVA
[Java] Obtenez des images avec l'API Google Custom Search
Comment démarrer avec Eclipse Micro Profile
Peut-être que ça marche! Commençons avec Docker!
Premiers pas avec Doma-Using Joins avec l'API Criteira
Trouvez le numéro de Fibonacci avec le Framework Fork / Join
Les débutants de Rails ont essayé de se lancer avec RSpec
[Java] Comment obtenir l'URL redirigée finale
Premiers pas avec Doma - Introduction à l'API Criteria
Java commençant par JShell-Un aperçu du monde Java
[LeJOS] Obtenez la valeur du capteur EV3 à distance avec Java
S'entendre avec les conteneurs Java dans Cloud Run
Revenir au début et démarrer avec Java ① Types de données et modificateurs d'accès
[DDD] Quelle est l'architecture la plus accessible pour démarrer avec la conception pilotée par domaine?