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:
- 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.
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 afalse
paranull
oundefined
).
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
onpm-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 denpm 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:
Cambia la firma de la función de
(event, callback)
a(data, context, callback)
.Cambia las referencias de
event.data
yevent.context
adata
ycontext
, 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.