Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Quarkus
  3. Funqy : des fonctions portables
Extrait - Quarkus Développer des applications microservices en Java pour le cloud et Kubernetes
Extraits du livre
Quarkus Développer des applications microservices en Java pour le cloud et Kubernetes Revenir à la page d'achat du livre

Funqy : des fonctions portables

Développer une fonction événementielle avec Funqy

Quarkus Funqy fournit une API Java portable pour écrire des fonctions déployables dans divers environnements serverless ou Function-as-a-Service (FaaS) comme AWS Lambda, Azure Functions, Google Cloud Functions, Knative et Knative Events (qui utilise Cloud Events).

Comme l’API de Funqy est agnostique du fournisseur cloud, donc de l’environnement dans lequel elle sera déployée, c’est une API très simple et, par conséquent, qui peut ne pas disposer de toutes les fonctionnalités offertes par l’utilisation du SDK propriétaire d’un fournisseur cloud.

Une fonction Funqy est une méthode annotée par @Funq, qui peut avoir zéro ou un paramètre et qui peut retourner une réponse :

public class GreetingFunction { 
    @Funq 
    public String greet(String name) { 
       return "Hello " + name; 
    } 
} 

Le paramètre et le retour d’une fonction Funqy peuvent être un POJO qui obéit à la norme Java Bean. Ces POJO seront automatiquement sérialisés et désérialisés en JSON par Funqy via le framework Jackson :

public class GreetingFunction { 
    @Funq ...

Développer une fonction HTTP avec Funqy

Quarkus Funqy HTTP fournit une API Java portable pour écrire des fonctions HTTP déployables dans divers environnements serverless ou Function-as-a-Service (FaaS) ou comme un service autonome.

Funqy HTTP n’est pas un remplaçant pour les extensions HTTP de Quarkus comme RESTEasy, Spring Web ou Reactive Routes. Son support du protocole HTTP est minimaliste : il est impossible de manipuler un seul des concepts du protocole HTTP. En utilisant Funqy HTTP, on peut uniquement annoter une méthode avec l’annotation @Funq qui sera alors le point d’entrée de l’application et ne pourra être appelée que via le protocole HTTP.

Cette simplicité en fait une API idéale pour le développement de petites fonctions HTTP qui font très peu de choses, et induit un surcoût minimal à l’exécution.

Il est possible d’avoir plusieurs méthodes annotées par @Funq dans une application. Chaque méthode sera disponible au chemin HTTP correspondant au nom de la fonction Funqy, qui est par défaut le nom de la méthode. Il est possible de personnaliser le nom d’une fonction Funqy via l’attribut value de l’annotation @Funq.

Une fonction Funqy HTTP peut être appelée via les méthodes HTTP GET ou POST.

Quand elle est appelée via la méthode HTTP...

Déployer une fonction Funqy dans AWS

1. Déployer une fonction Funqy événementielle dans AWS

Pour déployer une fonction Funqy événementielle dans AWS, il faut ajouter l’extension Funqy Amazon Lambda Binding. Cette dernière utilise l’extension Amazon Lambda ; assurez-vous d’avoir lu le chapitre Déployer dans Amazon Web Services, section AWS Lambda avant celui-ci. Assurez-vous également d’avoir créé un projet en Java 11, AWS Lambda ne supportant pas encore Java 17.

Vous pouvez ajouter l’extension Funqy Amazon Lambda Binding via :

  • la CLI Quarkus :

quarkus extension add funqy-amazon-lambda 
  • le plugin Maven :

mvn quarkus:add-extension -Dextensions="funqy-amazon-lambda" 

Ceci va ajouter la dépendance Maven suivante :

<dependency> 
  <groupId>io.quarkus</groupId> 
  <artifactId>quarkus-funqy-amazon-lambda</artifactId> 
</dependency> 

Dans cette section, nous allons reprendre la fonction ProcessingLambda développée dans le chapitre Déployer dans Amazon Web Services, section AWS Lambda et la réécrire avec Funqy, ce qui nous donnera le code suivant :

public class FunqyProcessingLambda { 
 
    @Funq 
    public Output process(Input input) { 
        Output output = new Output(); 
        output.greeting = "Hello " + input.name; 
        return output; 
    } 
 
    public static class Input { 
        public String name; 
    } 
 
    public static class Output { 
        public...

Déployer une fonction Funqy dans Google Cloud

1. Déployer une fonction Funqy événementielle dans Google Cloud

Pour déployer une fonction Funqy événementielle dans Google Cloud, il faut ajouter l’extension Funqy Google Cloud Functions. Cette extension utilise l’extension Google Cloud Functions ; assurez-vous donc d’avoir lu le chapitre Déployer dans Google Cloud Platform, section Google Cloud Functions.

Vous pouvez ajouter l’extension Funqy Google Cloud Functions via :

  • la CLI Quarkus :

quarkus extension add funqy-google-cloud-functions 
  • le plugin Maven :

mvn quarkus:add-extension -Dextensions="funqy-google-cloud-
functions" 

Ceci va ajouter la dépendance Maven suivante :

<dependency> 
  <groupId>io.quarkus</groupId> 
  <artifactId>quarkus-funqy-google-cloud-functions</artifactId> 
</dependency> 

Dans cette section, nous allons reprendre les fonctions développées dans le chapitre Déployer dans Google Cloud Platform, section Google Cloud Functions et les réécrire avec Funqy, ce qui nous donnera le code suivant :

public class FunqyFunctions { 
    @Funq 
    public void helloWorldBackgroundFunction(StorageEvent event) { 
        System.out.println("Receive event on object: " 
                +...

Funqy Knative Eventing

Knative Eventing est une collection d’API qui permettent d’implémenter une architecture événementielle dans Kubernetes. Knative Eventing utilise des requêtes HTTP POST standards pour envoyer et recevoir des événements entre les producteurs d’événements et les consommateurs. Ces événements sont conformes à la spécification Cloud Events.

Cloud Events est une spécification agnostique du fournisseur cloud et du moteur d’événement qui définit un format de description d’événements cloud.

La mise en place de Knative Eventing dans un cluster Kubernetes est complexe, elle nécessite l’installation de plusieurs CRD (Custom Resource Definition) Kubernetes et de plusieurs composants, dont un broker de messages. Pour cette raison, ce chapitre ne donnera pas les étapes pas à pas d’installation et d’appels de fonction Knative Eventing. Pour l’installation et le fonctionnement de Knative Eventing, il faut se référer à sa documentation en ligne : https://knative.dev/docs/eventing

Funqy Knative Events est l’extension Quarkus qui permet de créer des fonctions Funqy utilisables avec Knative Eventing.

Vous pouvez ajouter l’extension Funqy Knative Events via :

  • la CLI Quarkus :

quarkus extension add quarkus-funqy-knative-events...