Migra funciones de Cloud Functions a entornos de ejecución de Node.js más recientes

En este documento, se describen las diferencias entre las versiones de los entornos de ejecución de Node.js para ayudarte a migrar tu código de Cloud Functions.

Migra a un entorno de ejecución más nuevo

Para migrar a un entorno de ejecución más reciente, sigue estos pasos:

  1. Infórmate sobre el entorno de ejecución objetivo en este documento para comprender las diferencias que presenta y realizar los cambios necesarios en el código. En particular, ten en cuenta los cambios variables de entorno que se introdujeron en el entorno de ejecución de Node.js 10.
  2. Vuelve a implementar tu función y especifica el entorno de ejecución de Node.js objetivo:

    gcloud functions deploy FUNCTION_NAME --runtime NODE_RUNTIME...

Diferencias del entorno de ejecución de Node.js 14

Node.js 14 presenta algunas características y conceptos nuevos. Contenido destacado:

  • Cadenas opcional. Las cadenas opcionales son así: {"hello": null}?.hello?.neat. Permiten el acceso seguro a claves profundas en objetos que podrían no existir.
  • Fusión nula. Esto presenta a ??, que es más seguro que usar || para la asignación (ya que solo se evalúa a false para null o undefined).

Puedes obtener más información sobre las características de Node.js 14 aquí.

Diferencias del entorno de ejecución de Node.js 12

Node.js 12 usa npm ci, que siempre ejecuta la secuencia de comandos prepare en package.json.

Las principales diferencias entre el uso de npm install y npm ci son las siguientes:

  • El proyecto debe tener un package-lock.json o npm-shrinkwrap.json existente.
  • Si las dependencias del bloqueo de paquetes no coinciden con las de package.json, npm ci se cerrará con un error en vez de actualizar el bloqueo de paquetes.
  • Si ya hay un node_modules, se quitará de forma automática antes de que se inicie la instalación de npm ci.

Para actualizar de Node.js 10 a Node.js 12, mueve las dependencias que se usan en prepare de devDependencies a dependencies.

Para Node.js 12 y versiones posteriores, las funciones con límites de memoria superiores a 2GiB requieren que los usuarios configuren NODE_OPTIONS de modo que tenga max_old_space_size. Por ejemplo:

gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http

Diferencias en el entorno de ejecución de Node.js 10

El entorno de ejecución de Node.js 10 introdujo cambios que pueden requerir que modifiques el código fuente de tu función para usar los entornos de ejecución más recientes.

Para la mayoría de las aplicaciones, la actualización de Node 8 a Node 10 no implicará cambios de código (la diferencia principal son los cambios en las variables de entorno en GCF).

Node 10 presenta una variedad de funciones nuevas y emocionantes, como iteradores asíncronos y una API de archivos basada en promesas, junto con mejoras en el rendimiento y parches de seguridad.

Registro

Si no usaste JSON.stringify cuando registraste objetos o colecciones en Node.js 8, es posible que veas mayores volúmenes de registros cuando actualices a Node.js 10. Esto podría generar costos adicionales. Recomendamos usar JSON.stringify para agrupar instrucciones de registro, como se muestra en Escribe, visualiza y responde registros.

Cambios en las variables de entorno

El entorno de ejecución de Node.js 10 generó cambios en las variables de entorno predefinidas por el entorno de ejecución. Consulta Variables de entorno establecidas de forma automática para obtener una descripción completa de las diferencias entre las variables de entorno que configura el entorno de ejecución de Node.js 10 y las que configuran los entornos de ejecución anteriores.

Para ejecutar las funciones de Node.js anteriores en el entorno de ejecución de Node.js 10 (y versiones posteriores), es posible que debas realizar cambios en las variables de entorno predefinidas que usas. Actualiza tu código para usar las variables de reemplazo cuando sea posible o configúralas tú mismo en el momento de implementar tu función. Como recomendación, te sugerimos que no dependas de variables de entorno que no hayas establecido explícitamente.

El entorno de ejecución de Node.js 10 ya no configura las siguientes variables de entorno:

Variable de entorno Sprint
CODE_LOCATION Configúrala cuando implementes tu función. La ubicación de tu código es /srv.
ENTRY_POINT En su lugar, usa la variable de entorno FUNCTION_TARGET.
GOOGLE_CLOUD_PROJECT Configúrala cuando implementes tu función.
GCP_PROJECT Configúrala cuando implementes tu función.
GCLOUD_PROJECT Configúrala cuando implementes tu función.
GOOGLE_CLOUD_REGION Configúrala cuando implementes tu función.
FUNCTION_REGION Configúrala cuando implementes tu función.
FUNCTION_NAME En su lugar, usa la variable de entorno K_SERVICE.
FUNCTION_IDENTITY Configúrala cuando implementes tu función.
FUNCTION_MEMORY_MB Configúrala cuando implementes tu función.
FUNCTION_TIMEOUT_SEC Configúrala cuando implementes tu función.
FUNCTION_TRIGGER_TYPE En su lugar, usa la variable de entorno FUNCTION_SIGNATURE_TYPE. Consulta Usa variables de entorno para obtener detalles de uso.
OLDPWD Ya no está disponible.
SHLVL Ya no está disponible.

Diferencias del entorno de ejecución de Node.js 8

La firma para las funciones en segundo plano cambió entre los entornos de ejecución de Node.js 6 y Node.js 8, y continúa con Node.js 10.

Una función en segundo plano de ejemplo en Node.js 6 puede tener un aspecto similar al siguiente:

exports.nodejs6BackgroundFunction = (event, callback) => {
  let data = event.data;
  let context = event.context;
  // ... the rest of your function
};

Ten en cuenta que el argumento event contiene propiedades de data y context. En el entorno de ejecución de Node.js 10, las propiedades data y context se extrajeron del objeto event y ahora se incluyen como parte de la firma de la función:

exports.nodejs8AndAboveBackgroundFunction = (data, context, callback) => {
  // ... the rest of your function is unchanged
};

Este cambio simplifica las referencias a los objetos data y context que antes se encontraban dentro del argumento event. Para obtener más información, consulta Parámetros de funciones en segundo plano.

Si usas la firma de la función en segundo plano de Node.js 6, realiza los siguientes cambios para ejecutar tu función en un entorno de ejecución de Node.js más reciente:

  1. Cambia la firma de la función de (event, callback) a (data, context, callback).

  2. Cambia las referencias de event.data y event.context a data y context, respectivamente.

Bajas: Node.js 6 y Node.js 8

Los entornos de ejecución de Node.js 6 y Node.js 8 dejaron de estar disponibles. Para asegurarte de que tus funciones usen una versión compatible de Node.js, mígralas a Node.js 10 (o una versión posterior).

Después del 5 de agosto de 2020, se bloquearán las implementaciones de funciones que utilicen Node.js 6. Luego de esta fecha, es posible que se inhabiliten las Cloud Functions que continúen usando Node.js 6.