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 con paquetes de complementos, compatibilidad con lenguajes y la biblioteca de Functions Framework de Node.js que admite e invoca tu función. Este entorno se identifica mediante la versión del lenguaje y se conoce como el ID del entorno de ejecución.

Preparación de funciones

Puedes preparar una función directamente desde la consola de Google Cloud o escribirla en tu máquina local y subirla. Si deseas preparar tu máquina local para el desarrollo de Node.js, consulta Configura un entorno de desarrollo de Node.js.

Entornos de ejecución y imágenes base compatibles de Node.js

Entorno de ejecución ID de entorno de ejecución Pilas Imagen base del entorno de ejecución
Node.js 22 nodejs22
  • google-22 (predeterminada)
  • google-22-full
  • google-22/nodejs22
  • google-22-full/nodejs22
  • Node.js 20 nodejs20
  • google-22 (predeterminada)
  • google-22-full
  • google-22/nodejs20
  • google-22-full/nodejs20
  • Node.js 18 nodejs18
  • google-22 (predeterminada)
  • google-22-full
  • google-22/nodejs18
  • google-22-full/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 Fuera de servicio Fuera de servicio
    Node.js 6 nodejs6 Fuera de servicio Fuera de servicio

    Selecciona tu entorno de ejecución

    Puedes seleccionar uno de los entornos de ejecución de Node.js compatibles para tu función durante la implementación.

    Puedes seleccionar una versión del entorno de ejecución con la consola de Google Cloud o la CLI de gcloud. Haz clic en la pestaña para obtener instrucciones sobre el uso de la herramienta que elijas:

    gcloud

    Especifica la imagen base de Node.js para tu función con la marca --base-image mientras la implementas. Por ejemplo:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image nodejs22
    

    Reemplaza lo siguiente:

    • Reemplaza FUNCTION por el nombre de la función que implementas. Puedes omitir este parámetro por completo, pero se te solicitará el nombre si lo haces.

    • FUNCTION_ENTRYPOINT por el punto de entrada a tu función en tu 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 completamente calificado que exista en tu código fuente.

    Para obtener instrucciones detalladas sobre cómo implementar una función con la CLI de gcloud, consulta Implementa funciones en Cloud Run.

    Console

    Puedes seleccionar una versión del entorno de ejecución cuando creas o actualizas una función de Cloud Run en la consola de Google Cloud. Si deseas obtener instrucciones detalladas para implementar una función, consulta Implementa funciones en Cloud Run.

    Para seleccionar un entorno de ejecución en la consola de Google Cloud cuando creas una función, sigue estos pasos:

    1. En la consola de Google Cloud, ve a la página Cloud Run:

      Ir a Cloud Run

    2. Haz clic en Escribe una función.

    3. En la lista Entorno de ejecución, selecciona una versión del entorno de ejecución de Node.js.

    4. Haz clic en Crear y espera a que Cloud Run cree el servicio con una revisión de marcador de posición.

    5. La consola te redireccionará a la pestaña Fuente, en la que puedes ver el código fuente de tu función. Haz clic en Guardar y volver a implementar.

    Si deseas obtener instrucciones detalladas para actualizar la versión del entorno de ejecución después de implementar la función, consulta Cómo volver a implementar un código fuente nuevo.

    Estructura del código fuente

    Para que Cloud Run Functions encuentre la definición de tu función, tu código fuente debe seguir una estructura específica. Consulta Escribe funciones de Cloud Run para obtener más información.

    Especificar dependencias

    A fin de 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 proporcionar un paso de compilación personalizado si agregas 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-build con un valor vacío en el archivo package.json: "gcp-build":"".

    • Configura la variable de entorno de compilación GOOGLE_NODE_RUN_SCRIPTS en la string 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 u objetos Promise, debes informarle explícitamente 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 mostrar el resultado. de lo contrario, el componente asíncrono de tu función puede finalizar antes de que se complete.

    Funciones controladas por eventos

    Muestra implícita

      exports.implicitlyReturning = async (event, context) => {
        return await asyncFunctionThatReturnsAPromise();
      };
    

    Muestra explícita

      exports.explicitlyReturning = function (event, context) {
        return asyncFunctionThatReturnsAPromise();
      };
    

    Funciones de HTTP

    // OK: await-ing a Promise before sending an HTTP response
    await Promise.resolve();
    
    // WRONG: HTTP functions should send an
    // HTTP response instead of returning.
    return Promise.resolve();
    
    // HTTP functions should signal termination by returning an HTTP response.
    // This should not be done until all background tasks are complete.
    res.send(200);
    res.end();
    
    // WRONG: this may not execute since an
    // HTTP response has already been sent.
    return Promise.resolve();

    Usa middleware para controlar solicitudes HTTP

    Las funciones de HTTP de Node.js proporcionan objetos request y response que son compatibles con ExpressJS para simplificar el consumo de solicitudes HTTP. Las funciones de Cloud Run leen automáticamente el cuerpo de la solicitud, de manera que siempre recibirás el cuerpo de una solicitud más allá del tipo de medio. Esto quiere decir que las solicitudes HTTP se considerarán completamente leídas en el momento en que tu código se ejecuta. La anidación de las apps de ExpressJS debe usarse con esta salvedad: específicamente, el middleware que espera que el cuerpo de una solicitud no se haya leído puede que 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 proporciona una API asíncrona para cargar módulos. También proporciona 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.

    Obtén más información para usar los módulos de ES.