Aujourd'hui c'est les vacances qui démarrent, et j'ai décidé d'enfin m'atteler à tester le projet OpenFAAS d'Alex Ellis qui fait fureur dans la communauté Docker depuis sa présentation à la DockerCon 2017 en Europe (Copenhague).

Pour ce faire, rendez-vous sur la documentation en ligne ou encore sur le Github d'Alex Ellis, le développeur du projet qui a désormais fédéré une communauté active sur OpenFaas.

prom-stars

Raspberry ou VPS ?

J'ai longtemps hésité avant de me lancer sur ce test, et après avoir suivi la documentation, j'ai effectué un premier test sur Play With Docker, ce qui m'a permis de vérifier la facilité de déploiement de cette application Openfaas. Toutefois j'ai orienté dans un premier temps mon choix vers un VPS plutôt qu'un cluster de Raspberry Pi. Pourquoi ? ces derniers temps j'ai eu trop de soucis avec Docker sur les Raspberry, je choisi donc la stabilité.

Capture-d-e-cran-2017-12-29-a--09.45.39

On crée une nouvelle instance et on lance la série de commandes suivante :

Capture-d-e-cran-2017-12-29-a--09.45.48

Et tadam !!!

Capture-d-e-cran-2017-12-29-a--09.50.17

Vos deux applications OpenFass et Prometheus servent sur les ports 9090 et 8080. Docker Playground c'est facile donc, maintenant attaquons le dur.

Déployer en production OpenFaas

On se connecte à son VPS et on installe (si besoin) Docker en version 17.09.

Une fois que Docker vous renvoi...

root@vps485213:~# docker version
Client:
 Version:      17.09.0-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:42:38 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.0-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   afdb6d4
 Built:        Tue Sep 26 22:41:20 2017
 OS/Arch:      linux/amd64
 Experimental: false

...On peut passer à la suite.

Je lance la commande suivante à la racine de mon serveur linux Ubuntu 16.04 avec Docker 17.09 et Docker-Compose installés en pré-requis :

docker swarm init --advertise-addr eth0 && \
  git clone https://github.com/openfaas/faas && \
  cd faas && \
  git checkout master && \
  ./deploystack.sh && \
  docker service ls

Une fois fait, vos services sont lancés comme vu précédemment.

  • Prometheus sur le port 9090
  • OpenFaas sur le port 8080

On se connecte donc depuis son navigateur avec ipduserveur:8080

Capture-d-e-cran-2017-12-28-a--15.18.35

Et à ipduserveur:9090

Capture-d-e-cran-2017-12-28-a--15.18.47

On va ensuite finaliser l'installation des outils en installant depuis la racine toujours, la cli du projet OpenFaas.

$ curl -sL cli.openfaas.com | sh

Puis $ faas-cli --help pour chercher de l'aide.

La suite...

C'est bien joli mais à quoi cela va bien pouvoir nous servir ? OpenFaas est un outil conçu pour Dockeriser nos fonctions, quelles soient basiques ou plus complexes, et ce depuis n'importe quel langage de programmation (Python, Go, Nodejs ...)

Un article intéressant sur la question : Severless, la révolution.

"Severless" est un terme impropre - nous parlons d'un nouveau modèle architectural pour les systèmes axés sur les événements. Pour cette raison, les fonctions severless sont souvent utilisées comme un lien entre les autres services ou dans une architecture événementielle. Dans les temps anciens, nous appelions cela un bus de service.

evolution

Fonctions severless

Une fonction severless est un petit bloc de code discret et réutilisable qui:

  • est de courte durée
  • n'est pas un démon (à long terme)
  • ne publie pas de services TCP
  • n'est pas dynamique
  • utilise vos services existants ou des ressources tierces
  • s'exécute en quelques secondes (en fonction de la valeur par défaut d'AWS Lambda)

Maintenant tentons de lancer une fonction existante au catalogue puis d'en déployer une nouvelle depuis la CLI.

Je lance func_nodeinfo depuis l'Open Faas portal en cliquant sur "invoke" et voici ce que l'on me répond :

Capture-d-e-cran-2017-12-29-a--18.53.25

Maintenant plus corsé, on va nous-même déployer une fonction sur notre portail à ipduserveur:8080 mais depuis notre console, pour ce faire on se rend sur Github et on sélectionne Youtube-dl.

On suit les consignes et on lance :

$ git clone https://github.com/faas-and-furious/youtube-dl \
  cd youtube-dl

$ faas-cli deploy

ce qui nous déploie la fonction dans notre portail :

Capture-d-e-cran-2017-12-29-a--19.03.23

et via curl ou depuis l'interface web en tapant la fonction dans la zone adéquate puis en cliquant sur "invoke" :

$ curl localhost:8080/function/youtubedl \
 -d "https://www.youtube.com/watch?v=BJDJFMlvV_8" > cat_purr.mov

On peut ainsi télécharger des vidéos youtube via le lien, au format voulu depuis la console ou le portail.

Autre exemple

Edit

Alex Ellis a publié une nouvelle fonction intéressante sur le store OpenFaas : Nmap.

Le puissant outil réseau linux fait donc son apparition sur OpenFaas, je l'attendais depuis un moment sur Docker. Là c'est très simple, depuis mon instance OpenFaas en ligne à ipduserveur:8080, je lance nmap depuis la catalogue.

Capture-d-e-cran-2018-01-03-a--08.49.44

A partir de là c'est facile, on utilise les commandes de Nmap pour scanner les ports réseaux des sites web/serveurs que l'on veut avec les zones dédiées à cet effet sur OpenFaas :

Capture-d-e-cran-2018-01-02-a--19.11.22

Et voilà pour mon blog :)