VT2018 OpenWhisk Demo
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