Tu función de Cloud Run se ejecuta en un entorno que consta de una versión del sistema operativo con paquetes complementarios, compatibilidad con idiomas y la biblioteca Node.js Functions Framework, que admite e invoca tu función. Este entorno se identifica por la versión del idioma y se conoce como ID de tiempo de ejecución.
Preparación de la función
Puedes preparar una función directamente desde la Google Cloud consola o escribirla en tu máquina local y subirla. Para preparar tu máquina local para el desarrollo de Node.js, consulta Configurar un entorno de desarrollo de Node.js.
Entornos de ejecución e imágenes base de Node.js compatibles
Tiempo de ejecución | ID de entorno de ejecución | Pilas | Imagen base de tiempo de ejecución |
---|---|---|---|
Node.js 24 (solo vista previa) |
nodejs24 |
|
|
Node.js 22 | nodejs22 |
|
|
Node.js 20 | nodejs20 |
|
|
Node.js 18 | nodejs18 |
|
|
Node.js 16 | nodejs16 | google-18-full | google-18-full/nodejs16 |
Node.js 14 | nodejs14 | google-18-full | google-18-full/nodejs14 |
Node.js 12 | nodejs12 | google-18-full | google-18-full/nodejs12 |
Node.js 10 | nodejs10 | google-18-full | google-18-full/nodejs10 |
Node.js 8 | nodejs8 | Retirado | Retirado |
Node.js 6 | nodejs6 | Retirado | Retirado |
Selecciona tu tiempo de ejecución
Puedes seleccionar uno de los tiempos de ejecución de Node.js admitidos para tu función durante la implementación.
Puedes seleccionar una versión del tiempo de ejecución mediante la Google Cloud consola o la CLI de gcloud. Haga clic en la pestaña para ver las instrucciones sobre cómo usar la herramienta que elija:
gcloud
Especifica la imagen base de Node.js de tu función con la marca --base-image
al desplegarla. Por ejemplo:
gcloud run deploy FUNCTION \
--source . \
--function FUNCTION_ENTRYPOINT \
--base-image nodejs22
Sustituye:
FUNCTION con el nombre de la función que vas a implementar. Puedes omitir este parámetro por completo, pero se te pedirá el nombre si lo haces.
FUNCTION_ENTRYPOINT con el punto de entrada de tu función en el código fuente. Este es el código que ejecuta Cloud Run cuando se ejecuta tu función. El valor de esta marca debe ser un nombre de función o un nombre de clase completo que exista en el código fuente.
Para obtener instrucciones detalladas sobre cómo desplegar una función con la CLI de gcloud, consulta Desplegar funciones en Cloud Run.
Consola
Puedes seleccionar una versión del tiempo de ejecución al crear o actualizar una función de Cloud Run en la Google Cloud consola. Para obtener instrucciones detalladas sobre cómo desplegar una función, consulta Desplegar funciones en Cloud Run.
Para seleccionar un tiempo de ejecución en la consola Google Cloud al crear una función, sigue estos pasos:
En la Google Cloud consola, ve a la página Cloud Run:
Haz clic en Escribir una función.
En la lista Tiempo de ejecución, selecciona una versión del tiempo de ejecución de Node.js.
Haz clic en Crear y espera a que Cloud Run cree el servicio con una revisión de marcador de posición.
La consola te redirigirá a la pestaña Fuente, donde podrás ver el código fuente de tu función. Haz clic en Guardar y volver a implementar.
Para obtener instrucciones detalladas sobre cómo actualizar la versión del tiempo de ejecución después de implementar la función, consulta Volver a implementar código fuente nuevo.
Estructura del código fuente
Para que las funciones de Cloud Run encuentren la definición de tu función, el código fuente debe seguir una estructura específica. Para obtener más información, consulta Escribir funciones de Cloud Run.
Especificar dependencias
Puedes especificar las dependencias de tus funciones incluyéndolas en un archivo package.json
. Para obtener más información, consulta Especificar 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 tener más control sobre los pasos de compilación antes de iniciar la aplicación, puedes proporcionar un paso de compilación personalizado añadiendo una secuencia de comandos gcp-build
al archivo package.json
.
Para evitar que tu compilación ejecute la secuencia de comandos npm run build
, puedes hacer lo siguiente:
Añadir una secuencia de comandos
gcp-build
con un valor vacío en el archivopackage.json
:"gcp-build":""
.Asignar a la variable de entorno de compilación
GOOGLE_NODE_RUN_SCRIPTS
la cadena vacía para evitar que se ejecuten todas las secuencias de comandos.
Finalización de funciones asíncronas
Cuando trabajes con tareas asíncronas que impliquen retrollamadas u objetos Promise
, debes informar explícitamente al tiempo de ejecución de que tu función ha terminado de ejecutar estas tareas. Puedes hacerlo de varias formas, 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 un valor. De lo contrario, el componente asíncrono de tu función puede finalizar antes de completarse.
Funciones basadas en 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 HTTP
Usar middleware para gestionar solicitudes HTTP
Las funciones HTTP de Node.js proporcionan objetos request
y response
compatibles con ExpressJS
para simplificar el consumo de solicitudes HTTP. Cloud Run Functions lee automáticamente el cuerpo de la solicitud, por lo que siempre recibirás el cuerpo de una solicitud independientemente del tipo de contenido multimedia. Esto significa que las solicitudes HTTP se deben considerar como leídas por completo cuando se ejecute el código. El anidamiento de aplicaciones ExpressJS debe usarse con esta advertencia. En concreto, es posible que el middleware que espera que el cuerpo de una solicitud no se haya leído no se comporte como se espera.
Usar módulos ES
Los módulos ECMAScript (módulos ES o ESM) son una función estándar de TC39 que no está marcada en Node versión 14 o posterior para cargar módulos JavaScript. A diferencia de CommonJS, ESM proporciona una API asíncrona para cargar módulos. También proporciona una mejora de sintaxis popular con las instrucciones import
y export
, que se pueden usar en una función de Cloud Run (en lugar de instrucciones require
).
Para usar ESM en una función de Cloud Run, debes declarar "type": "module"
en tu package.json
.
{
...
"type": "module",
...
}
Después, puedes usar las instrucciones import
y export
.
Más información sobre cómo usar módulos ES