VT2018 OpenWhisk Demo

From air
Jump to navigation Jump to search

Description

Ceci est la demonstration qui va avec la fiche de synthèse sur OpenWhisk dans le cadre de la veille technologique 2018.

Nous allons utiliser la technologie OpenWhisk présente sur le Cloud d'IBM pour créer une action/fonction, l'envoyer sur le Cloud et l'appeler grâce à une API.

Préparation

Il faut d'abord créer un compte sur le Cloud IBM Bluemix pour avoir accès au dashboard qui permet de gérer les actions et les API.

La majorité des fonctionnalités sont disponibles sur le dashboard, mais l'on va avoir besoin de certaines qui n'y sont pas. Il faut donc installer l'interface de ligne de commande IBM Cloud Functions. Il s'agit d'une surcouche aux commandes de base d'OpenWhisk, avec le nécessaire pour lier notre compte IBM Cloud au terminal.

Déroulement

Développement

On commence par écrire l'action qui nous intéresse, ici en Java (mais d'autres langages sont utilisables).

import com.google.gson.JsonObject;

public class fact {

	public static double myfact(double n) {
		if (n == 0)
			return 1.0;
		else
			return n * myfact(n - 1);
	}

	public static JsonObject main(JsonObject args) {
		double num;
		double result;

		try {
			num = args.getAsJsonPrimitive("num").getAsDouble();
		} catch (Exception e) {
			num = 0;
		}

		result = myfact(num);

		JsonObject response = new JsonObject();
		response.addProperty("YourNumber", num);
		response.addProperty("result", result);
		return response;
	}
}

Cette action est toute simple : Elle prend un objet JSON en paramètre, renvoie une objet JSON en sortie, et exécute une factorielle.

Compilation

On la compile avec la commande suivante :

javac -classpath $PATH/gson-2.8.5.jar fact.java

Ici, la valeur PATH est à remplacer par le chemin où vous avez rangé la librairie Gson qui est nécessaire pour utiliser du Java avec OpenWhisk.

On crée ensuite une archive jar de notre action compilée :

jar cvf fact.jar fact.class

Utilisation

On envoie ensuite notre action sur le cloud avec la commande suivante :

bx wsk action create fact fact.jar --main fact --web true

Il est important de spécifier le nom de la classe principale avec l'option --main MainClass.

L'option --web true permet de créer une web action, qui peut être déclenchée par une API (ce n'est pas la cas par défaut). A noter que cela peut être fait ultérieurement sur le dashboard.

Même si notre action n'est pour le moment liée à aucune API, on peux déjà la tester sur le dashboard ou avec la commande suivant :

bx wsk action invoke fact --result --param num 10

Ce qui doit nous retourner le résultat suivant :

{
    "YourNumber": 10.0,
    "result": 3628800.0
}

On a la possibilité de récupérer un lien sur le dashboard pour pouvoir l’exécuter dans un navigateur ou avec curl. Il faudra ajouter les paramètres suivants à ce lien :

lien?num=10

On ajoute ensuite notre action à une API (ce qui crée l'API si elle n'existe pas déjà). Cela peut être fait depuis le dashboard ou en utilisant la commande suivante :

bx wsk api create /fact GET fact

Cette commande nous indique que l'API à été crée et nous donne sa route :

ok: created API /fact GET for action /_/fact
https://service.eu.apiconnect.ibmcloud.com/gws/apigateway/api/d11b1723f811a8252e0f99cbc363d55547a42626ea62d836a2f4e0844dc944b4/fact

On peut maintenant appeler cette API dans un navigateur ou avec curl avec les paramètres suivants :

route?num=10