Dans l’article du mois dernier, j’ai fait une brève introduction au Serverless ainsi qu’à ses principes.

Aujourd’hui je souhaite vous présenter un Framework utilisé dans de grandes entreprises telles que : Nordstorm, Coca-Cola, Expedia, EA …).

Serveless Framework est un outil permettant d’accélérer et de structurer le développement de fonctions ainsi que d’en faciliter les tests et le déploiement.

Le projet est Open-Source mais la société qui l’a créé (Serverless Inc.) propose également une offre entreprise plutôt orientée pour les utilisateurs de solutions cloud qui permet de faciliter la gestion du cycle de vie des applications. Nous nous concentrerons dans cet article sur l’offre Open-Source.

Les langages supportés par le projet incluent Node.js, Python, Java, Golang, C#, Ruby, Swift, Kotlin, PHP, Scala et F# (source).

Comment se présente ce Framework

Il s’agit d’une application qui peut s’exécuter sur n’importe quel OS (Mac, Linux ou Windows). Elle peut être installée rapidement de différentes manières : brew, choco, npm

Sa commande principale est serverless (ou sls). Cette commande est le point d’entrée pour toutes les fonctions, tant en matière de génération de code, démarrage de serveur local, debug, mais également de déploiement dans le cloud.

En effet, comme dit précédemment, ce Framework permet de procéder jusqu’au déploiement du code dans les plus grands providers cloud comme AWS, Azure ou GCP.

Comme abordé dans le dernier article, les ressources nécessaires au bon fonctionnement de votre application (espace disque, bases de données, ressources réseau, etc…) sont gérées par votre provider Cloud.

C’est donc à lui de mettre à disposition de votre application les ressources dont elle aurait besoin pour fonctionner correctement. Seulement, avant le déploiement de votre application vous devez lui déclarer vos besoins. Le Framework répond à cette problématique grâce au fichier serverless.yml.

Comment se compose un projet Serverless

Un projet Serverless est composé d’un fichier serverless.yml, source de vos décisions d’infrastructure (dépendances, ressources CPU, RAM …). La structure de ce fichier doit respecter les contraintes du format YAML.

Voici un exemple simple pour une Lambda AWS :

service: aws-node-rest-api

provider:
  name: aws
  runtime: nodejs12.x

functions:
  user:
    name: ${opt:stage, self:provider.stage, 'dev'}-user
    description: GET user
    handler: handler.user
    memorySize: 512
    reservedConcurrency: 5
    provisionedConcurrency: 3
    timeout: 10
    logRetentionInDays: 14
    role: arn:aws:iam::XXXXXX:role/role
    environment:
      functionEnvVar: 12345678
    tags:
      foo: bar
    package:
      include:
        - src/**
        - handler.js
      exclude:
        - .git/**
        - .travis.yml
      artifact: path/to/my-artifact.zip
      individually: true
    events:
      - http:
          path: user/{id}
          method: GET
          cors: true
          authorizer:
            name: someJwtAuthorizer
            scopes:
              - user.id
              - user.email

D’autres exemples sont disponibles ici

Debug local

Le plugin serverless-offline est l’un des plugins les plus importants de Serverless, permettant aux utilisateurs de démarrer un serveur sur leur poste local afin de tester leurs développements localement avant déploiement sur des infrastructures distantes.

Pour être plus clair, voici une simplification du fonctionnement de ce plugin :

  • Les fonctions du projet, ainsi que toutes les déclarations des ressources nécessaires à son fonctionnement sont définies dans le fichier serverless.yml. Les fonctions sont définies sous la forme dossier/fichier.fonction (module Javascript),

  • Au lancement, Serverless démarre un serveur local, teste et émule les ressources nécessaires à l’application (serveur web, rpc, websockets si nécessaire, etc…),

  • Lorsqu’un événement vient “trigger” une fonction, le fichier dans lequel se trouve la fonction est chargé, la fonction est exécutée puis le fichier est déchargé.

Conclusion

Serverless est un projet intéressant et populaire plébiscité par de nombreux développeurs et entreprises de toutes tailles.

Le gain en maintenabilité des applications développées avec/sans est indéniable.

Il s’agit d’un projet est très vaste avec beaucoup de fonctionnalités qui n’ont pas pu être abordées ici, alors n’hésitez pas à aller voir leur site internet. Leur base de tutoriaux est très fournie et leur communauté très ouverte à aider les novices.