IBM Cloud Code Engine : vers le serverless 2.0 !

Alain Airom (IBM)

IBM Cloud Code Engine est une plate-forme entièrement gérée et sans serveur (serverless, FaaS 1 ) qui exécute vos workloads conteneurisées, y compris les applications Web, les micro-services, les fonctions événementielles ou les travaux par lots (batch). Code Engine crée même des images de conteneurs à partir de votre code. Étant donné que ces workloads sont toutes hébergées dans la même infrastructure Kubernetes, elles peuvent fonctionner ensemble (Function as a Service), de manière transparente. L'expérience du ‘Code Engine’ est conçue pour que l’utilisateur puisse se concentrer sur l'écriture de code et non sur l'infrastructure nécessaire pour l'héberger.

En fonction de la charge, le moteur de ‘Code Engine’ met automatiquement à l'échelle les conteneurs, y compris la mise à l'échelle à zéro lorsqu'aucune demande n'est active. Une image de conteneur n'est pas une condition préalable à l'utilisation du service : Code Engine peut regrouper le code source d'un référentiel Git avec un environnement d'exécution pris en charge, ce qu'IBM appelle un « buildpack », et générer le conteneur.

Pour en savoir plus, consulter notre Gitbook « IBM Cloud Design Engineer »

Les « Projets », « Applications » et « Builds » disponibles dans Code Engine ?

Code Engine s'articule autour de 4 notions essentielles à comprendre : projets, applications, jobs et builds. Explications :

Un Projet : Un projet est un regroupement d'entités Code Engine telles que des applications, des batch et des « builds ». Les projets sont utilisés pour gérer les ressources et donner accès à ses entités.

Une Application : Une application, ou « app », exécute votre code pour traiter les requêtes HTTP. Une application a une URL pour les demandes entrantes. Le nombre d'instances encours d'exécution d'une application est automatiquement augmenté ou réduit (jusqu'à zéro)en fonction de la charge de travail entrante.

Un Build : Un build, ou « Image Build », est un mécanisme que vous pouvez utiliser pour créer une image de conteneur à partir de votre code source. Code Engine prend en charge la création à partir d'un Dockerfile ou d'un « buildpack ».

Un Job : Un « Job » exécute une ou plusieurs instances de votre code exécutable. Contrairement aux applications, qui incluent un serveur HTTP pour gérer les demandes entrantes, les « Job » sont conçus pour s'exécuter une seule fois et se terminer.

Les bénéfices de Code Engine : exemples de cas d'usage selon les tâches spécifiques

Exécution des charges (workloads)

Code Engine exécute vos applications basées sur HTTP ainsi que vos « Batch ».

Les services managés

Code Engine prend en charge toute la gestion des clusters, y compris l'approvisionnement, la configuration, la mise à l'échelle et la gestion des serveurs afin que vous n'ayez pas à vous soucier de l'infrastructure sous-jacente.

Build du code

Code Engine extrait votre code source et crée l'image du conteneur pour vous. Code Engine prend en charge à la fois Dockerfile ainsi que les « Cloud Native Buildpack ».

Les charges (workloads) privées

Stockez votre code source dans des référentiels privés et transférez vos images vers des registres privés et Code Engine peut y accéder

Plateforme intégrée

Code Engine est entièrement intégré à IBM Cloud afin que vous puissiez profiter du catalogue complet des services IBM Cloud.

Les charges (workloads) basées sur des évènements

Étendez les fonctionnalités de vos applications avec des messages (événements) des producteurs d'événements. Votre application peut alors réagir à ces événements et effectuer des actions en fonction de ceux-ci.

Échelle automatique, même à zéro

Code Engine augmente et diminue automatiquement vos charges de travail, et même jusqu'à zéro lorsqu'aucune demande n'est active. Vous ne payez que pour les ressources que vous consommez.

Gestion du contrôle des accès

Attribuez des autorisations d'accès à la plate-forme et aux services à vos projets dans IBM Cloud Identity and Access Management (IAM) pour contrôler qui peut provisionner et gérer les ressources de votre compte IBM Cloud.

Basé sur de l’Open Source

Code Engine repose sur un ensemble de technologies open source telles que Kubernetes, Knative, Istio et Tekton, ce qui permet de garder vos applications et vos travaux portables.

Mini-glossaire

Application

Une application, ou application, exécute votre code pour traiter les requêtes HTTP. Une application a une URL pour les demandes entrantes. Le nombre d'instances en cours d'exécution d'une application est automatiquement augmenté ou réduit (jusqu'à zéro) en fonction de la charge de travail entrante. Une application contient une ou plusieurs révisions. Une révision représente une version immuable des propriétés de configuration de l'application. Chaque mise à jour d'une propriété de configuration d'application crée une nouvelle révision de l'application.

Build

Un build, ou build d'image, est un mécanisme que vous pouvez utiliser pour créer une image de conteneur à partir de votre code source. Code Engine prend en charge la création à partir d'un code source Dockerfile et/ou un buildpack.

Code repository

Un référentiel de code, tel que GitHub ou GitLab, stocke le code source. Avec Code Engine, vous pouvez ajouter un accès à un référentiel de code privé, puis référencer ce référentiel à partir de votre build.

Configmap

Un configmap fournit une méthode pour inclure des informations de données non sensibles dans votre déploiement. En référençant les valeurs de votre configmap en tant que variables d'environnement, vous pouvez découpler des informations spécifiques de votre déploiement et conserver votre application ou tâche portable. Un configmap contient des informations dans des paires clé-valeur.

Container image registry

Un registre d'images de conteneurs, ou registre, est un référentiel pour vos images de conteneurs. Par exemple, Docker Hub et IBM Cloud Container Registry sont des registres d'images de conteneurs. Un registre d'images de conteneurs peut être public ou privé. Avec Code Engine, vous pouvez ajouter un accès à vos registres d'images de conteneurs privés.

Job

Un Job exécute une ou plusieurs instances de votre code exécutable. Contrairement aux applications, qui incluent un serveur HTTP pour gérer les demandes entrantes, les Jobs sont conçus pour s'exécuter une seule fois et se terminer.

Lorsque vous créez un Job, vous pouvez spécifier les informations de configuration de la charge de travail qui sont utilisées chaque fois que le Job est exécuté.

Project

Un projet est un regroupement d'entités Code Engine telles que des applications, des Jobs et des builds. Les projets sont utilisés pour gérer les ressources et donner accès à ses entités. Un projet fournit les éléments suivants :

-         Fournit un espace de noms unique pour les noms d'entités.

-         Gère l'accès aux ressources du projet (accès entrant).

-         Gère l'accès aux services de support, aux registres et aux référentiels (accès sortant).

-         Possède un certificat généré automatiquement pour le service de couche de transport (TLS).

-         Est basé sur un espace de noms Kubernetes.

Secret

Un secret fournit une méthode pour inclure des informations de configuration sensibles, telles que des mots de passe ou des clés SSH, à votre déploiement. En référençant les valeurs de votre secret, vous pouvez découpler les informations sensibles de votre déploiement pour garder votre application ou votre travail portable. Toute personne autorisée à votre projet peut également consulter vos secrets; assurez-vous que vous savez que les informations secrètes peuvent être partagées avec ces utilisateurs. Les secrets contiennent des informations dans des paires clé-valeur.

Service binding

Les « bindings » permettent aux applications et aux Jobs d'accéder aux services IBM Cloud.

Tutoriel : une application utilisant Watson et Visual Recognition

Dans ce tutoriel, vous découvrirez IBM Cloud Code Engine en déployant une application de classification d'images (reconnaissance visuelle). Vous allez créer un projet Code Engine, sélectionner le projet et déployer les composants Code Engine - applications et travaux dans le projet. Vous apprendrez à lier les services IBM Cloud à vos composants Code Engine. Vous comprendrez également la capacité de mise à l'échelle automatique de Code Engine où les instances sont augmentées ou réduites (à zéro) en fonction de la charge de travail entrante.

IBM Cloud Code Engine fournit une plate-forme pour unifier le déploiement de toutes vos applications basées sur des conteneurs. Que ces applications soient des fonctions, des applications traditionnelles à 12 facteurs, des charges de travail par lots (exécution jusqu'à la réalisation) ou toute autre charge de travail basée sur des conteneurs, si elles peuvent être regroupées dans une image de conteneur, alors Code Engine peut les héberger et les gérer pour vous - le tout sur une infrastructure basée sur Kubernetes. Et Code Engine fait cela sans que vous ayez besoin d'apprendre ou même de connaître Kubernetes. L'expérience Code Engine est conçue pour que vous puissiez vous concentrer sur l'écriture de code et non sur l'infrastructure nécessaire pour l'héberger. Il est livré en tant que service géré sur le cloud et construit sur des projets open source (Kubernetes, Istio, Knative, Tekton, etc.).

Code Engine aide les développeurs en masquant de nombreuses tâches complexes telles que la configuration, la gestion des dépendances, etc., Code Engine simplifie la gestion basée sur les conteneurs et vous permet de vous concentrer sur l'écriture de code. Il met également à disposition de nombreuses fonctionnalités d'une plate-forme sans serveur, telles que «scale-to-zero».

A travers cet exemple l’utilisateur peut comprendre le fonctionnement du Code Engine et déployer une application cloud native de manière simple et efficace, et comprendre à quel point il est facile de déployer et de mettre à l'échelle une application à l'aide de Code Engine.

Les étapes :

  1. Le développeur crée un projet Code Engine et déploie un frontend et une application Code Engine backend.
  2. Le développeur connecte l'application frontale (UI) au backend en modifiant l'application frontend pour définir une valeur de variable d'environnement pour pointer vers le point de terminaison de l'application backend.
  3. Le développeur provisionne les services cloud requis et les lie à l'application backend et aux travaux en créant des secrets et une configmap.
  4. L'utilisateur télécharge une ou plusieurs images via l'application frontale qui est stockée dans Object Storage via l'application backend.
  5. L'utilisateur exécute un « Job » de Code Engine via le backend pour classer l'image en poussant l'image vers la reconnaissance visuelle. Le résultat est ensuite enregistré dans Object Storage et affiché dans l'application frontale lorsque l'utilisateur clique sur le bouton d'actualisation.

L’exemple complet est disponible sur : cloud.ibm.com/docs/solution-tutorials?topic=solution-tutorials-image_classification_code_engine

Pour terminer, le Code Engine en version béta aujourd’hui est complètement gratuit !