Migrer des fonctions Cloud vers des environnements d'exécution Node.js plus récents
Ce document décrit les différences existant entre les versions de l'environnement d'exécution Node.js, afin de vous aider à migrer votre code Cloud Functions.
Migrer vers un environnement d'exécution plus récent
Pour migrer vers un environnement d'exécution plus récent, procédez comme suit :
- Prenez connaissance dans ce document des différences induites par votre environnement d'exécution cible, puis apportez les modifications nécessaires à votre code. Veillez plus particulièrement à tenir compte des modifications sur les variables d'environnement introduites dans l'environnement d'exécution Node.js 10.
Déployez votre fonction en spécifiant votre environnement d'exécution Node.js cible :
gcloud functions deploy FUNCTION_NAME --runtime NODE_RUNTIME...
Différences dans l'environnement d'exécution Node.js 14
Node.js 14 introduit de nouvelles fonctionnalités et de nouveaux concepts. Points clés :
- Chaînage facultatif.
Le chaînage facultatif se présente comme suit :
{"hello": null}?.hello?.neat
. Il permet d'accéder en toute sécurité à des clés profondes sur des objets qui n'existent peut-être pas. - Coalescence nulle : Cette approche
??
est plus sûre que l'utilisation de||
pour l'attribution (qui n'évalue quefalse
pournull
ouundefined
).
Pour en savoir plus sur les fonctionnalités de Node.js 14, cliquez ici.
Différences dans l'environnement d'exécution Node.js 12
Node.js 12 utilise npm ci
, qui exécute toujours le script prepare
dans package.json
.
Les principales différences entre l'utilisation de npm install
et de npm ci
sont les suivantes :
- Le projet doit disposer d'un fichier
package-lock.json
ounpm-shrinkwrap.json
existant. - Si les dépendances du verrou de package ne correspondent pas à celles de
package.json
,npm ci
quitte sur un message d'erreur au lieu de mettre à jour le verrouillage du package. - Si un élément
node_modules
est déjà présent, il sera automatiquement supprimé avant quenpm ci
ne commence son installation.
Pour passer de Node.js 10 à Node.js 12, déplacez les dépendances utilisées dans le fichier prepare
de devDependencies
vers dependencies
.
Pour Node.js 12 et versions ultérieures, les fonctions dont les limites de mémoire peuvent être définies au-delà de 2 Gio exigent que les utilisateurs configurent NODE_OPTIONS
avec l'attribut max_old_space_size
. Exemple :
gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http
Différences dans l'environnement d'exécution Node.js 10
L'environnement d'exécution Node.js 10 introduit des modifications pouvant vous obliger à modifier le code source de votre fonction afin d'utiliser les derniers environnements d'exécution.
Pour la majorité des applications, la mise à niveau de Node 8 vers Node 10 n'entraîne aucune modification du code (la différence majeure concerne les variables d'environnement de GCF).
Node 10 introduit plusieurs nouvelles fonctionnalités intéressantes, telles que des itérateurs asynchrones et une API de fichiers basée sur des promesses, ainsi qu'une amélioration des performances et des correctifs de sécurité.
Logging
Si vous n'avez pas utilisé JSON.stringify
lors de la journalisation d'objets et/ou de collections dans Node.js 8, vous constaterez peut-être une augmentation du volume des journaux lors de la mise à niveau vers Node.js 10. Cela peut entraîner des coûts supplémentaires. Nous vous recommandons d'utiliser JSON.stringify
pour regrouper les instructions de journalisation, comme indiqué dans la section Écrire, afficher des journaux et y répondre.
Modifications des variables d'environnement
L'environnement d'exécution Node.js 10 a apporté des modifications aux variables d'environnement prédéfinies par l'environnement d'exécution. Consultez la section Variables d'environnement définies automatiquement pour connaître les différences entre les variables d'environnement définies par Node.js 10 et celles des précédents environnements d'exécution.
Pour exécuter vos anciennes fonctions Node.js dans Node.js 10, vous devrez peut-être modifier les variables d'environnement prédéfinies que vous utilisez. Modifiez le code de sorte qu'il utilise les variables de remplacement lorsque c'est possible, ou définissez-les vous-même lorsque vous déployez votre fonction. Il est déconseillé de dépendre de variables d'environnement que vous n'avez pas définies explicitement.
Les variables d'environnement suivantes ne sont plus automatiquement définies dans l'environnement d'exécution Node.js 10 :
Variable d'environnement | Migration |
---|---|
CODE_LOCATION |
Définissez-la lorsque vous déployez la fonction. Votre code se situe à l'emplacement suivant : /srv . |
ENTRY_POINT |
Utilisez la variable d'environnement FUNCTION_TARGET à la place. |
GOOGLE_CLOUD_PROJECT |
Définissez-la lorsque vous déployez la fonction. |
GCP_PROJECT |
Définissez-la lorsque vous déployez la fonction. |
GCLOUD_PROJECT |
Définissez-la lorsque vous déployez la fonction. |
GOOGLE_CLOUD_REGION |
Définissez-la lorsque vous déployez la fonction. |
FUNCTION_REGION |
Définissez-la lorsque vous déployez la fonction. |
FUNCTION_NAME |
Utilisez la variable d'environnement K_SERVICE à la place. |
FUNCTION_IDENTITY |
Définissez-la lorsque vous déployez la fonction. |
FUNCTION_MEMORY_MB |
Définissez-la lorsque vous déployez la fonction. |
FUNCTION_TIMEOUT_SEC |
Définissez-la lorsque vous déployez la fonction. |
FUNCTION_TRIGGER_TYPE |
Utilisez plutôt la variable d'environnement FUNCTION_SIGNATURE_TYPE . Consultez la page Utiliser des variables d'environnement pour en savoir plus.
|
OLDPWD |
Cette variable n'est plus disponible. |
SHLVL |
Cette variable n'est plus disponible. |
Différences dans l'environnement d'exécution Node.js 8
Le processus de signature des fonctions d'arrière-plan a été modifié entre les environnements d'exécution Node.js 6 et Node.js 8, et cette modification persiste dans Node.js 10.
Prenons un exemple de fonction d'arrière-plan Node.js 6 :
exports.nodejs6BackgroundFunction = (event, callback) => {
let data = event.data;
let context = event.context;
// ... the rest of your function
};
Notez que l'argument event
contient les propriétés data
et context
.
Dans Node.js 10, les propriétés data
et context
sont extraites de l'objet event
et incluses dans la signature de la fonction :
exports.nodejs8AndAboveBackgroundFunction = (data, context, callback) => {
// ... the rest of your function is unchanged
};
Cette modification simplifie les références aux objets data
et context
, précédemment contenus dans l'argument event
. Pour plus d'informations, consultez la section Paramètres des fonctions d'arrière-plan.
Si vous utilisez le processus de signature des fonctions d'arrière-plan de Node.js 6, apportez les modifications suivantes pour exécuter votre fonction dans un environnement d'exécution Node.js plus récent :
Remplacez la signature de la fonction
(event, callback)
par(data, context, callback)
.Remplacez les références à
event.data
et àevent.context
pardata
etcontext
, respectivement.
Abandons : Node.js 6 et Node.js 8
Les environnements d'exécution Node.js 6 et Node.js 8 sont désormais obsolètes. Pour vous assurer que vos fonctions s'exécutent sur une version compatible de Node.js, migrez-les vers Node.js 10 ou version ultérieure.
À compter du 5 août 2020, les déploiements de fonctions utilisant Node.js 6 seront bloqués. Les fonctions Cloud Functions qui continueront à utiliser Node.js 6 après cette date pourront être désactivées.