Environnement d'exécution Node.js

Cloud Functions est compatible avec les environnements d'exécution Node.js suivants :

  • Node.js 16 (bêta)
  • Node.js 14 (recommandé)
  • Node.js 12
  • Node.js 10

Pour découvrir comment exécuter localement votre fonction Node.js, consultez la page Exécuter des fonctions avec les frameworks des fonctions.

Pour commencer à utiliser Node.js avec Cloud Functions, consultez le démarrage rapide.

Sélectionner l'environnement d'exécution

Vous pouvez sélectionner l'environnement d'exécution Node.js de votre choix pour votre fonction lors du déploiement.

gcloud

Si vous utilisez l'outil de ligne de commande gcloud, vous pouvez spécifier l'environnement d'exécution à l'aide du paramètre --runtime. Exemple :

gcloud functions deploy NAME --runtime nodejs14 --trigger-http

Pour connaître les arguments qu'il est possible de spécifier lors du déploiement, consultez la page Déployer à l'aide de l'outil gcloud.

Console

Si vous utilisez Cloud Console, vous pouvez sélectionner l'environnement d'exécution lorsque vous créez et déployez une fonction. Consultez le guide de démarrage rapide de Cloud Console pour obtenir des instructions détaillées.

Environnement d'exécution

L'environnement d'exécution comprend l'exécution, le système d'exploitation, les packages et une bibliothèque appelant votre fonction.

Les environnements d'exécution Node.js utilisent un environnement d'exécution basé sur Ubuntu 18.04. Pour plus d'informations, consultez la section Environnements d'exécution.

La bibliothèque qui appelle votre fonction est le framework des fonctions Node.

Structure du code source

Pour que Cloud Functions trouve la définition de votre fonction, chaque environnement d'exécution a certaines exigences en matière de structuration pour votre code source. Pour en savoir plus, consultez la page Écrire des fonctions Cloud Functions.

Spécifier des dépendances

Vous pouvez spécifier des dépendances pour vos fonctions en les répertoriant dans un fichier package.json. Pour en savoir plus, consultez la page Spécifier des dépendances dans Node.js.

Variables d'environnement

Les environnements d'exécution Node.js 10 et versions ultérieures définissent automatiquement moins de variables d'environnement que les précédents environnements d'exécution compatibles avec Cloud Functions. Pour les fonctions Node.js 12+ dont la limite de mémoire est supérieure à 2 Gio, les utilisateurs doivent configurer NODE_OPTIONS pour avoir max_old_space_size. Pour en savoir plus, consultez la page Utiliser des variables d'environnement.

Signaler l'arrêt d'une fonction

Lorsque vous travaillez avec des tâches asynchrones qui impliquent des rappels ou des objets Promise, vous devez explicitement informer l'environnement d'exécution que votre fonction a terminé l'exécution de ces tâches. Pour ce faire, vous pouvez procéder de différentes manières, comme indiqué dans les exemples ci-dessous.

Fonctions d'arrière-plan

Node.js

// Await-ing promises within functions is OK if you don't return anything
await Promise.resolve();

// These will cause background tasks to stop executing immediately
return 1; // OK: returning a value
return (await Promise.resolve()); // WRONG: returning the result of a promise
return (await Promise.reject()); // WRONG: same behavior as resolved promises

// These will wait until the related background task finishes
return Promise.resolve(); // OK: returning the promise itself
return Promise.reject(); // OK: same behavior as to-be-resolved promises

Fonctions HTTP

Node.js

// OK: await-ing a Promise before sending an HTTP response
await Promise.resolve();

// WRONG: HTTP functions should send an
// HTTP response instead of returning.
return Promise.resolve()

// HTTP functions should signal termination by returning an HTTP response.
// This should not be done until all background tasks are complete.
res.send(200);
res.end();

// WRONG: this may not execute since an
// HTTP response has already been sent.
return Promise.resolve()

Utiliser un middleware pour gérer les requêtes HTTP

Afin de simplifier le traitement des requêtes HTTP, les fonctions Cloud Functions HTTP Node.js fournissent des objets request et response compatibles avec ExpressJS. Cloud Functions lit automatiquement le corps de la requête, vous recevrez donc toujours le corps d'une requête indépendamment du type de contenu. Ainsi, les requêtes HTTP doivent être considérées comme ayant été entièrement lues au moment de l'exécution de votre code. L'imbrication avec des applications ExpressJS est possible à condition de prendre cela en compte. En effet, certains composants middleware ne s'attendant pas à ce que le corps d'une requête soit préalablement lu risquent de ne pas se comporter comme prévu.

Utiliser des modules ES (expérimental)

Les modules ECMAScript (modules ES ou ESM) sont une fonctionnalité standard TC39 non signalée dans Node version 14 et ultérieure, qui permet de charger des modules JavaScript. Contrairement à CommonJS, ESM fournit une API asynchrone pour le chargement de modules. Il fournit également une amélioration appréciée de la syntaxe via les instructions import et export, qui peuvent être utilisées dans une fonction Cloud au lieu d'instructions require.

Pour utiliser ESM dans une fonction Cloud, vous devez déclarer "type": "module" dans votre fichier package.json.

{
  ...
  "type": "module",
  ...
}

Vous pouvez alors utiliser les instructions import et export.