Création d'un projet OpenFaas (Express)

Ce document s'intéresse uniquement à la partie création du projet openfaas et pas à la partie « création de la stack inital openfaas ».

Création dossier pour le projet

mkdir exempleValentin && cd exempleValentin

Création du projet

Faas-cli intègre un système de template qui vas nous permettre d'initialiser simplement un projet. Dans notre cas, nous allons créer un projet de type « Docker ».

faas-cli new --lang dockerfile --prefix c4software exempleValentin

--prefix ?

Le prefix vas nous permettre de faire une image privée sur le DockerHub, vous devez donc le remplacer par votre nom d'utilisateur Docker.

Et c'est tout ! Votre stack est maintenant prête, nous allons créer un petit projet NodeJS + Express pour constater la simplicité.

Init projet Express

cd exempleValentin
npm init -y
pnpm i --save express

Nous allons créer un projet, celui-ci va contenir notre code source JavaScript

Création index.js

const express = require("express");
const app = express();
const port = 8080;

app.get("/ping", (req, res) => {
  res.send("Ceci est un pong");
});

app.get("/", (req, res) => {
  res.send("YO ! ");
});

app.listen(port, () => {
  console.log("Ready");
});

Docker à modifier

FROM --platform=${TARGETPLATFORM:-linux/amd64} node:12.13.0-alpine as ship

RUN apk --no-cache add curl ca-certificates \
    && addgroup -S app && adduser -S -g app app
WORKDIR /root/
ENV NPM_CONFIG_LOGLEVEL warn

RUN mkdir -p /home/app

WORKDIR /home/app
COPY package.json ./
RUN npm i

COPY . .

RUN chown app:app -R /home/app && chmod 777 /tmp

USER app

CMD ["node", "index.js"]

Lancer dans openfaas

faas-cli up -f exempleValentin.yml

🎉 La fonction est maintenant disponible pour répondre aux requêtes des clients.

Source : https://www.openfaas.com/blog/serverless-nodejs/

Créer une image pour ARM

Dans le premier cas nous avons réalisé une image à destination de la même architecture, si vous souhaitez déployer sur une architecture de processeur différente il faut :

# Compiler
faas-cli publish -f exempleValentin.yml --platforms linux/arm/v7 # ARM 32bits
faas-cli publish -f exempleValentin.yml --platforms linux/arm64 # ARM 64Bits
faas-cli publish -f exempleValentin.yml --platforms linux/arm64,linux/arm/v7,linux/amd64 # ARM 64Bits, 32Bts, x86

# Déployer
faas-cli deploy -f exempleValentin.yml