A la découverte de Webtask
Dans l’univers des Function as a Service, il existe un fournisseur qui commence à être connu. Il se nomme auth0 et propose sa propre solution d’exécution de fonction : Webtask.
Très orienté webhook, ce service offre quelques fonctionnalités intéressantes et la mise en œuvre semble plutôt simple. Les langages supportés sont Node.js, Express et C#. Reprenons l’exemple simple utilisé pour découvrir Serverless Framework.
Sommaire
Installation
L’installation du Webtask CLI nécessite NPM et s’exécute avec la ligne de commande suivante :
$ npm install wt-cli -g
Dans un premier temps, il faut initialiser Webtask CLI afin d’activer son environnement d’exécution distant (via un code transmis par mail ou SMS) :
$ wt init pnom@company.com Please enter the verification code we sent to pnom@company.com below. Verification code: 123654 Welcome to webtasks! Create your first one as follows: $ echo "module.exports = function (cb) { cb(null, 'Hello'); }" > hello.js $ wt create hello.js
Une fois déployée, la fonction est éditable en ligne. Pour connaitre l’URL d’édition de la fonction, il faut exécuter la commande suivante :
$ wt edit hello Attempting to open the following url in your browser: https://webtask.it.auth0.com/edit/wt-host-id-0#/hello/...
Implémentation
Au lieu de prendre l’exemple proposé, nous allons reprendre notre précédent exemple en l’adaptant au prototype de Webtask que nous allons mettre dans un fichier hello.js
:
console.log('Loading function'); module.exports = function (context, callback) { console.log('Received event:', JSON.stringify(context, null, 2)); callback(null, 'Hello'); };
Déploiement
Le déploiement se fait en une seule ligne de commande et sans fichier de configuration :
$ wt create hello.js Webtask created You can access your webtask at the following url: https://wt-host-id-0.run.webtask.io/hello
La fonction est déployée et exposée via un endpoint HTTP (ici host-id remplace l’identifiant de l’hôte de notre environnement).
Exécution
Pour exécuter la fonction, il est donc nécessaire d’utiliser votre client HTTP préféré. Voici un exemple avec curl :
$ curl -i https://wt-host-id-0.run.webtask.io/hello HTTP/1.1 200 OK x-auth0-proxy-stats: {"proxy_host":"172.31.200.42","proxy_pid":28,"container_id":"8624ced6-9b59-41f9-8258-c9ee88ff9fbb","latency":52,"uptime":449193.942,"memory":{"rss":110329856,"heapTotal":71334240,"heapUsed":68038808},"req_id":"1486510226315.15966"} content-type: application/json x-wt-response-source: webtask x-auth0-stats: {"worker_pid":1,"response":{"200":1},"time":36,"uptime":78.386,"memory":{"rss":38936576,"heapTotal":19779936,"heapUsed":12368992}} date: Tue, 07 Feb 2017 23:30:26 GMT transfer-encoding: chunked Connection: keep-alive "Hello"
Il est possible d’afficher en temps réel les logs de la fonction avec la commande ci-dessous :
$ wt logs [23:30:26.443Z] INFO wt: new webtask request 1486510226315.15966 [23:30:26.483Z] INFO wt: Loading function [23:30:26.488Z] INFO wt: Received event: { "data": {}, "params": {}, "query": {}, "secrets": {}, "headers": { "host": "wt-host-id-0.run.webtask.io", "user-agent": "curl/7.44.0", "accept": "*/*", "accept-version": "2.0.0", "x-wt-params": "...", "x-forwarded-for": "::ffff:172.31.20.161", "x-forwarded-proto": "https", "x-forwarded-port": "8721", "connection": "close" }, "token": "...", "id": "1486510226315.15966", "storage": {} } [23:30:26.490Z] INFO wt: finished webtask request 1486510226315.15966 with HTTP 200 in 52ms
Nettoyage
A priori, il n’y a pas d’accès aux logs. Il est simplement possible de supprimer la fonction de cette façon :
$ wt rm hello Removed webtask: hello
Conclusion
Ce qui saute aux yeux avec Webtask, c’est sa simplicité d’utilisation. Avec une simple ligne de commande, il est possible d’exposer en HTTP une Webtask. L’éditeur de code est plutôt bien réalisé. Il propose l’auto-complétion et la validation syntaxique. Un client HTTP est également intégré.
Webtask possède de nombreuses fonctionnalités intéressante comme l’exécution en local, le stockage de données (un seul document de 500Ko maximum), un ordonnanceur, un bac à sable pour exécuter du code dynamique, …
Le dernier point fort de ce service est son intégration avec le service d’authentification auth0.
Il est regrettable de ne pas pouvoir consulter les logs à posteriori. Les Webtask peuvent implémenter 3 interfaces différentes, ce qui peut se révéler un peu perturbant au départ. De plus, il n’y a aucune notion d’événement. D’ailleurs, Webtask se revendique comme un service d’exécution de fonction synchrone contrairement à toutes les autres alternatives qui sont généralement asynchrones. Ceci afin d’obtenir des latences plus réduites.
De même, les webstasks sont toujours exécutées dans le même containeur. Il est donc possible de réutiliser des ressources telles qu’un pool de connexion. Très pratique, cette fonctionnalit » semble contraire au caractère multi-tenant et stateless de ce genre de service…
Dernier point négatif : je n’ai pas réussi à récupérer le payload d’un POST. Et la documentation n’est pas complète sur ces fonctionnalités.
Même si cette solution présente quelques défauts, certaines fonctionnalités méritent de s’y attarder. En première approche, Webtask donne l’impression d’être orienté webhook et être une solution d’intégration de auth0 avec d’autres API.
https://blog.lecacheur.com/2017/02/08/a-la-decouverte-de-webtask/https://blog.lecacheur.com/wp-content/uploads/2017/02/webtask-io-logo.pnghttps://blog.lecacheur.com/wp-content/uploads/2017/02/webtask-io-logo-150x150.pngDéveloppementnodejs,serverless,webtask.ioDans l'univers des Function as a Service, il existe un fournisseur qui commence à être connu. Il se nomme auth0 et propose sa propre solution d'exécution de fonction : Webtask. Très orienté webhook, ce service offre quelques fonctionnalités intéressantes et la mise en œuvre semble plutôt simple. Les langages supportés...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Laisser un commentaire