Entorno de ejecución de Node.js
Tu función de Cloud Run se ejecuta en un entorno que consta de una versión del sistema operativo, además de paquetes de complementos, compatibilidad con lenguajes y la biblioteca de Functions Framework que admite y, además, invoca la función. Este entorno se identifica con la versión del lenguaje y se conoce como el entorno de ejecución.
Para obtener información sobre los entornos de ejecución en general y saber qué versión de Ubuntu usa cada entorno de ejecución de Node.js, consulta el entorno de ejecución de Cloud Run Functions.
Para comenzar a compilar y, además, implementar Cloud Run Functions con Node.js, consulta la guía de inicio rápido.
Para compilar y probar tus funciones en el sistema local, consulta Ejecuta funciones con Functions Framework.
Selecciona el entorno de ejecución
Cloud Run Functions admite varias versiones de Node.js, que se enumeran en la página Compatibilidad con el entorno de ejecución. Puedes seleccionar el entorno de ejecución de Node.js deseado para tu función durante la implementación.
Consulta Implementa una función de Cloud Run para obtener detalles sobre la implementación desde Google Cloud CLI.
Consulta la guía de inicio rápido de la consola deGoogle Cloud para obtener detalles sobre la implementación desde la consola de Google Cloud .
Entorno de ejecución
Incluye el entorno de ejecución, el sistema operativo, los paquetes y una biblioteca que invoca tu función.
Node.js 18 y las versiones más recientes usan un entorno de ejecución basado en Ubuntu 22.04. Las versiones anteriores a Node.js 18 se basan en Ubuntu 18.04. Consulta Entorno de ejecución de Cloud Run Functions para obtener más información.
La biblioteca que invoca tu función es el Functions framework de Node.js.
Estructura del código fuente
Para que Cloud Run Functions encuentre la definición de la función, cada entorno de ejecución impone ciertos requisitos de estructura al código fuente. Consulta Escribe Cloud Run Functions para obtener más información.
Especifica las dependencias
Para especificar dependencias para tus funciones, enuméralas en un
archivo package.json. Para obtener más información, consulta
Especifica dependencias en Node.js.
Secuencia de comandos de compilación de NPM
De forma predeterminada, el entorno de ejecución de Node.js ejecuta npm run build si se detecta
una secuencia de comandos build en package.json. Si necesitas control adicional sobre tus pasos
de compilación antes de iniciar tu aplicación, puedes brindar un paso de compilación personalizado
agregando una secuencia de comandos gcp-build a tu archivo package.json.
Puedes evitar que tu compilación ejecute la secuencia de comandos npm run build de las siguientes maneras:
Agrega una secuencia de comandos
gcp-buildcon un valor vacío en el archivopackage.json:"gcp-build":"".Configura la variable de entorno de compilación
GOOGLE_NODE_RUN_SCRIPTSen la cadena vacía para evitar que se ejecuten todas las secuencias de comandos.
Finalización asíncrona de funciones
Cuando trabajas con tareas asíncronas que implican devoluciones de llamada o de objetos Promise,
debes informarle de forma explícita al entorno de ejecución que tu función terminó
de ejecutar estas tareas. Puedes hacerlo de varias maneras diferentes, como se muestra en
los siguientes ejemplos. La clave es que tu código debe esperar a que
se complete la tarea asíncrona o Promise antes de devolver el resultado. de lo contrario, el
componente asíncrono de tu función puede finalizar antes de que se complete.
Funciones controladas por eventos
Devolución implícita
exports.implicitlyReturning = async (event, context) => {
return await asyncFunctionThatReturnsAPromise();
};
Devolución explícita
exports.explicitlyReturning = function (event, context) {
return asyncFunctionThatReturnsAPromise();
};
Funciones de HTTP
Node.js
Usa middleware para controlar solicitudes HTTP
Las funciones de Cloud Run de HTTP en Node.js brindan los objetos request y response,
que son compatibles con
ExpressJS,
lo que simplifica el consumo de solicitudes HTTP. Cloud Run Functions lee de forma automática el
cuerpo de la solicitud, de manera que siempre lo recibirás más allá del
tipo de medio. Esto quiere decir que las solicitudes HTTP se considerarán como
completamente leídas para el momento en que tu código se ejecuta. La anidación de las aplicaciones de ExpressJS
debe usarse con esta salvedad: en particular, puede que el middleware que espera que el
cuerpo de una solicitud no se haya leído no se comporte como se prevé.
Usa módulos de ES
Los módulos de ECMAScript (módulos de ES o ESM) son una función estándar de TC39 sin marca
en la versión de Node 14+ para cargar módulos de JavaScript. A diferencia de CommonJS, ESM
brinda una API asíncrona para cargar módulos. También brinda una mejora
de la sintaxis popular a través de las declaraciones import y export que se pueden usar dentro
de una función de Cloud Run, en lugar de las declaraciones require.
Para usar ESM dentro de una función de Cloud Run, debes declarar "type": "module" en
tu package.json.
{
...
"type": "module",
...
}
Luego, puedes usar las declaraciones import y export.