Google Cloud Function l'alternative aux Lambdas de GCP

Les Google Cloud Functions permettent de créer une architecture serverless sur GCP. C'est l'alternative aux Lambdas d'AWS

Killian Brun

Développeur

Killian Brun
Google Cloud Function l'alternative aux Lambdas de GCP

13 août 2018

Introduction

Qu'est ce qu'une google cloud function ?

C'est une fonction que l'on va coder, puis exporter chez Google. Celle-ci pourra être appelée à n'importe quel moment par notre serveur ou client. Il y a de nombreux avantages à utiliser les Cloud Functions et nous allons en voir certains par la suite.
Ce système est un équivalent proposé par Google aux Amazon Lambdas de Amazon Web Service pour ceux qui connaissent. Ces propositions sont toutes deux des bases de l'architecture Serverless.

Comment fonctionnent-elles ?

Celles-ci sont basées sur les concepts de Promise() ainsi que de callback, elles permettent donc la gestion d'événements ainsi que leurs traitement !

Avantages

Quels coûts ?

Il faut savoir qu'un des principaux atouts des Google Cloud Functions est la facturation. En effet, vous serez facturés uniquement quand celle-ci sera appellée en fonction du temps d'exécution. La durée d'exécution se mesure aux 100 millisecondes près et la facturation est établit en temps réel, le payement peut se faire à interval régulier.

Plusieurs points sont à savoir :

  • Si vous décidez de résillier votre abonnement, celui-ci sera clôturé très rapidement et sans frais supplémentaires.
  • Il existe une version gratuite pour essayer les Google Cloud Function, au moment où j'écris ceci, celle-ci propose 2 millions d'appels par mois, 1 million de secondes de temps de calcul ainsi que 5Go de network.
  • Par ailleurs, d'autres "forfaits" sont proposés, vous pouvez les voir sur cette page de Google
  • Si vous souhaitez, il est possible de simuler une tarification sur ce lien.

Quand utiliser une Google Cloud Function ?

Comme vous l'avez compris, celles-ci sont facturées en unité de temps, ce temps peut être vraiment très court. Lorsque l'on appelle une fonction deux ou trois fois par jours dans notre application, c'est raisonnable. Si celle-ci vient à être appellée autant de fois par jours, mais par des dizaines, des centaines de personnes... Le chiffre peut monter très vite !
C'est pourquoi les Google Cloud Functions sont très interessantes lorsque l'on sait que celles-ci ne seront nécéssaire qu'occasionnellement, sur de courtes périodes.

Par ailleurs, anticiper et savoir si notre Google Cloud Function possèdera un trafic régulier ou irrégulier est très important. Il est préférable d'utiliser celle-ci dans un cas où l'on est certain que cette fonction ne sera pas régulière, mais importante au bon fonctionnement de notre application.

Autres avantages

  • Si votre application utilise déjà des APIS Google, vous ne serez pas déçu de savoir que les Cloud Functions ont été faites pour pouvoir relier facilement les APIS entre elles !
  • De plus, les Cloud Functions peuvent être écrites en Javascript ou encore Python, ce qui nous permet de ne pas apprendre de langage spécifique et de l'adapter à notre application facilement. Les environnements d'exécution peuvent être en Node.JS 6, Node.JS 8 et Python. (Tous sont mis en place et maintenus à jour, sécurisés par Google)
  • Vos fonctions ont un temps d'exécution variable, le Timeout par défaut est de 1 minute, il peut-être modifié si vous le souhaitez, et ainsi être poussé jusqu'à un maximum de 9 minutes. Ce délai étant vraiment long, il est fortement déconseillé de l'utiliser car les coûts engendrés seront conséquents au Timeout.

La gestion

D'après Bret McGowen :

Les Google Cloud Functions permettent d'avoir une infrastructure invisible, ce qui permet de se focaliser sur le code, afin de délivrer des applications incroyables, plus rapidemment et plus simplement qu'avant.

Si vous le souhaitez, voici le lien vers la vidéo officielle de présentation des Google Cloud Function !

La Google Cloud Plateform nous donne un historique de logs complet de nos Cloud Functions, en temps réel, ainsi que d'autres informations utiles.

Phase de test

Il est prévu pour les développeurs un émulateur open-source pouvant tester nos Cloud Functions localement, ce qui permet de déboguer rapidement, sans impacter nos applications !
Nous vous conseillons par ailleurs de créer des sous-fonctions permettant d'effectuer des tests unitaires que vous aurez définis au préalable. Cette pratique clarifiera votre code, pouvant ainsi les tester petit à petit localement sur votre ordinateur.

Mise en place

Dans cette partie, nous parlerons uniquement des HTTP Functions (foreground), et n'entrerons pas dans les détails de toutes les possibilités ! Il est aussi possible d'utiliser des background functions.

Il faut avant tout, sélectionner votre application, où bien la créer dans la Cloud Plateform.
Puis vous devrez activer l'api : Cloud Functions API

api-activation.png

Ensuite, il vous faudra installer le SDK de Google Cloud permettant de faire la commande suivante :

$ gcloud components update

Une fois celà fait, vous pouvez écrire votre première Google Cloud Function sous la forme :

/**
 * HTTP Cloud Function.
 * This function is exported by index.js, and is executed when
 * you make an HTTP request to the deployed function's endpoint.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */
exports.helloGET = (req, res) => {
  res.send('Hello World!');
};

Cette Google Cloud function s'appelera donc helloGET !

Maintenant, il ne vous reste plus qu'à la déployer pour pouvoir l'appeller à distance. Pour faire cela, allez dans votre CLI Google Cloud et exécutez la commande :

$ gcloud functions deploy helloGET --trigger-http

On notera que cette commande a une forme spécifique contenant toutes les informations dont Google à besoin pour héberger votre fonction. Vous pourrez retrouver toutes vos Google Cloud Function sur la Platforme en ligne comme ceci :

list-function.png

Pour supprimer une Google Cloud Function, rien de plus simple :

$ gcloud functions delete helloGET 

Fonctionnement

En image :

flux.png

Plus de détails :

Nous pouvons voir que notre application peut envoyer un évenement à notre Cloud Function, qui va le traiter comme nous l'avons définis précédemment. Utiliser d'autres APIS Google au sein de notre application permet à celle-ci d'utiliser des processus complexes et poussés, tout en gardant une simplicité de codage, de gestion, ainsi que de durabilité.

Google Cloud Functions et PlaceMe

Contexte

Nous souhaiterions que pour chaque employé de PlaceMe, un bilan soit fait tous les jours à une certaine heure. Ce bilan sera constitué de tous les événements présents sur le calendrier de l'employé X sur une période donnée. Les événements passeront dans une fonction qui calculera des statistiques de l'employé X sur la période Y.

Description

Chez PlaceMe, nous utilisons l'API Calendar proposée par Google. Celui-ci nous permet de lister, créer, supprimer ainsi que de modifier des événements spécifiques à un agenda Google classique.
Nous allons prendre notre cas comme exemple pour vous illustrer l'utilisation d'une Cloud Function.

Tout d'abord, nous utiliserons dans cet exemple la fonction nommée : getPlaceMeEvents();

Nous avons mis à disposition un web-service nous permettant de recevoir les stats d'un employé.

const { getPlaceMeEvents } = require('./src/controller');

exports.helloGET = (req, res) => {
 getPlaceMeEvents(req.query.start, req.query.end, req.query.calendarId).then(() => {
   res.send(events);
 });
};

Il est conseillé d'effectuer des tests unitaires sur vos fonctions tant qu'elles ne sont pas encore sur le Cloud.

Pour résumer

Nous avons exporté une fonction classique getPlaceMeEvents() chez Google Cloud. Une fois appellée, celle-ci va consulter l'API Calendar, recevoir des données, les traiter et nous renvoyer un objet souhaité.

Pricing

Ici, je vais vous présenter plusieurs cas possibles

  • pour l'exemple de getPlaceMeEvents() : (256Mb CPU; 12000 ms/function; 1Mb network)
Nombre d'employé Nombre d'appels par mois Prix par mois Prix par an
2 44 0$ 0$
10 220 0$ 0$
100 2 200 0$ 2.49$
1000 22 200 1.98$ 42.40$
  • pour 10 fonctions avec les mêmes caractérisques que précédemment :
Nombre d'employé Nombre d'appels par mois Prix par mois Prix par an
2 440 0$ 0$
10 2 200 0$ 2.49$
100 22 200 1.98$ 42.40$
1000 222 000 34.74$ 456.71$

/!\ Attention /!\

Il faut noter que ces valeurs sont à titre indicatif, elles ne réprésentent pas un cas général. Il faut aussi garder en mémoire que dans une application réelle, il n'y pas que 10 fonctions que nous pourrions utiliser en Cloud !

Conclusion

Les Cloud Functions sont très pratiques, rapides, efficaces, et relativement simples à utiliser. Les possibilités et les cas d'utilisation sont infinis. Cependant, il faut se souvenir que les Google Cloud Functions doivent être utilisées dans des cas particuliers, où le nombre de requêtes et le trafic vers celles-ci sont connues à l'avance. La facturation se fait automatiquement en temps réel et le coût engendré par les Cloud Functions peut rester raisonnable si elles sont utilisées aux bons endroits.

À présent, vous pouvez démarrer votre application serverless !