Déployer ses fonctions et ses applications conteneurisées avec Scaleway Elements Serverless Platform et Serverless Framework ...
Tags: serverless, docker, scaleway, kubernetes
Published: 2020-04-07 23:53:15

![](https://telegra.ph/file/16cebec432a8ac0105861.png)

Scaleway Elements propose en version Beta la plate-forme Serverless qui permet de se concentrer sur l'écriture de son code sans se préoccuper de la gestion de l'infrastructure sous-jacente avec ces propriétés :

-   Scalabilité horizontale
-   Python, Go, NodeJS ou environnement spécifique
-   Déploiement de container Docker
-   Compatibilité AWS Lambda

La plate-forme permet donc de déployer ses fonctions (FaaS) et ses applications conteneurisées (CaaS) dans une infrastructure gérée. Scaleway Elements Serverless Platform s'appuie en effet sur Knative et Scaleway Elements Kapsule (qui propose des clusters Kubernetes managés, cf mon article à ce sujet : <https://dev.to/deep75/introduction-a-scaleway-elements-kubernetes-kapsule-avec-gloo-et-knative-db4> ).

![](https://telegra.ph/file/a1eacc5d02f66a5599f57.png)

Rapide test en commençant par la création d'une petite instance Ubuntu 18.04 LTS sur laquelle je vais installer Node.js. Au passage, on peut pour cela utiliser la version 2 (encore en Beta) de la ligne de commande SCW (Scaleway-CLI => <https://github.com/scaleway/scaleway-cli/tree/v2>) :

```bash
sudo curl -o /usr/local/bin/scw -L "https://github.com/scaleway/scaleway-cli/releases/download/v2.0.0-beta.2/scw-2-0-0-beta-2-linux-x86_64"
```

```bash
sudo chmod +x /usr/local/bin/scw

scw init
```

Puis création de l'instance Linux :

```bash
scw instance server create type=DEV1-S image=ubuntu-bionic zone=fr-par-1 name=serverless
```

![](https://telegra.ph/file/776282203054b3c22c762.png)

![](https://telegra.ph/file/eef43d6f0b6ddb5e2156c.jpg)

Puis après installation de la dernière version de Node.js (<https://github.com/nodesource/distributions/blob/master/README.md> ), installation du Framework Serverless :

```bash
curl -o- -L https://slss.io/install | bash
```

![](https://telegra.ph/file/2d4705b2c586565f03396.png)

![](https://telegra.ph/file/41ac5a058709e027984b8.png)

Je vais me baser sur le dépôt des exemples pour cette plate-forme dans GitHub :

<https://github.com/scaleway/serverless-scaleway-functions/tree/master/examples>

![](https://telegra.ph/file/312e8404c1a5d26b95f04.png)

En commençant par cet exemple d'une fonction avec Node.js 10 :

![](https://telegra.ph/file/db1d7c5dda5645bba6dd9.png)

qui comprend ce fichier de configuration YAML pour Serverless Framework dans lequel je rentre mon token et mon organisation (à récupérer par ce biais : <https://www.scaleway.com/en/docs/generate-an-api-token/>)

![](https://telegra.ph/file/34d4373b0803a88cc7a5a.png)

et ce fichier handler :

![](https://telegra.ph/file/0d0ffcb4d16f051f0ef41.png)

J'installe le plugin *serverless-scaleway-functions* dans le répertoire :

![](https://telegra.ph/file/a974e5bc2cd90dcd363ee.png)

Puis je déploie la fonction :

![](https://telegra.ph/file/1b1c7d86a37ba92c6dd5d.png)

Un endpoint m'est retourné que je peux requêter par l'intermédiaire de HTTPie :

![](https://telegra.ph/file/438388570ea650a8e8b88.png)

La fonction apparaît dans le dashboard de Scaleway :

![](https://telegra.ph/file/c86ffdfe438ce45f3b248.jpg)

![](https://telegra.ph/file/179ad61782e30ab0136cd.jpg)

Il est possible de modifier le code de cette fonction dans le dashboard :

![](https://telegra.ph/file/8e5a1e15610efa8de2bd5.jpg)

Autre exemple de fonction en Python cette fois-çi :

![](https://telegra.ph/file/b1d7b5d4b9bea6d4ff2d5.png)

via de fichier de configuration YAML pour Serverless framework :

![](https://telegra.ph/file/2a87e95a834b1febfa1c2.png)

et ce code pour la partie handler :

![](https://telegra.ph/file/3ec64158ae0d6049eae92.png)

J'installe le plugin comme précédemment :

![](https://telegra.ph/file/c588610ef610cceba54ce.png)

Puis je déploie cette fonction en Python :

![](https://telegra.ph/file/4793f22c31ad7a6986503.png)

et je peux invoquer l'endpoint retourné par HTTPie :

![](https://telegra.ph/file/9bb33e850918ceef0a4ec.png)

La fonction apparaît dans le dashboard avec ces détails :

![](https://telegra.ph/file/096c3fc0c72ae7a89f4d3.jpg)

![](https://telegra.ph/file/fd842f13e4117d9867aa0.jpg)

et il est là encore possible de modifier le code de cette fonction dans le dashboard :

![](https://telegra.ph/file/8a0fdaf2bff6839fa94f9.jpg)

ou les ressources qu'elle utilise :

![](https://telegra.ph/file/f87fc77d5eb6ef2c29e52.jpg)

Enfin pour terminer ce rapide tour de la plate-forme Scaleway Elements Serverless, un test du déploiement d'un conteneur Docker par l'intermédiaire de Serverless framework encore une fois. Je reprends le code proposé dans le dépôt GitHub :

![](https://telegra.ph/file/3da1fd600f59c244135e8.png)

qui comprend notamment ce Dockerfile :

![](https://telegra.ph/file/c6e76164206432ff173e1.png)

ce code en Python qui implémente un serveur avec Flask :

![](https://telegra.ph/file/99c9f862be7b6951e7e1c.png)

Ainsi que ce fichier de configuration YAML pour Serverless framework où l'on doit y insérer comme précédemment son token :

![](https://telegra.ph/file/808da9f775b22f334caca.png)

J'installe le plugin *serverless-scaleway-functions* :

![](https://telegra.ph/file/40e3cbb17eabc375679e8.png)

Et je déploie le tout :

![](https://telegra.ph/file/4b6a00326499a3ec1ef74.png)

Après avoir construit localement le conteneur Docker, ce dernier est expédié dans Scaleway Elements Container Registry ( <https://www.scaleway.com/fr/container-registry/> ) puis déployé dans la plate-forme Scaleway Elements Serverless :

![](https://telegra.ph/file/b87b8f6557b68aaa5ba39.jpg)

![](https://telegra.ph/file/dbbb1572eddcbb5c8024c.jpg)

![](https://telegra.ph/file/6ee2434e1dd809db51560.jpg)

![](https://telegra.ph/file/83ebcd1dd85339fabc514.jpg)

Au passage on voit les différents dépôts créés par ces fonctions dans Scaleway Elements Container Registry :

![](https://telegra.ph/file/707466f2079530dd60e11.jpg)

Je peux invoquer avec HTTPie le container par le biais de l'endpoint retourné qui me répond ce petit message de bienvenue (comme les précédents fonctions) :

![](https://telegra.ph/file/6c7678b1a003d4aa8e9eb.png)

Scaleway fournit une documentation détaillé de l'API derrière la plateforme Scaleway Elements Serverless ici :

<https://developers.scaleway.com/en/products/serverless/api/>

et ces différents tutoriels :

<https://www.scaleway.com/en/docs/scaleway-elements-serverless-getting-started/>

<https://www.scaleway.com/en/docs/scaleway-elements-serverless-managing-containers/>

<https://www.scaleway.com/en/docs/scaleway-elements-serverless-managing-functions/>

![](https://telegra.ph/file/466df9b4021c2c5ed68cd.png)

À suivre !