Node.js 12 ahora está disponible a nivel general.

Entorno de ejecución de Node.js

El entorno de ejecución de Node.js es la pila de software encargada de instalar el código de tu servicio web y sus dependencias, y de ejecutar el servicio.

El entorno de ejecución de Node.js para App Engine en el entorno estándar se declara en el archivo app.yaml:

Node.js 12

runtime: nodejs12

Node.js 10

runtime: nodejs10

Node.js 8 (obsoleto)

runtime: nodejs8

Versión de Node.js

El entorno de ejecución de Node.js es compatible con Node.js 12, Node.js 10 y Node.js 8 (obsoleto), y usa la última versión estable de la versión que elijas. Una vez implementada la app, App Engine actualiza de forma automática las versiones nuevas, pero no la versión secundaria.

Por ejemplo, la aplicación podría implementarse en Node.js 10.9.4 y, luego, actualizarse de manera automática a la versión 10.10.0, pero no se actualizará automáticamente a Node.js 12.xx.

Debido a que las versiones menores y de parche se actualizan de forma automática, la propiedad engines.node del archivo package.json solo puede especificar la versión principal:

Node.js 12

{
  "engines": {
    "node": "12.x.x"
  }
}

Node.js 10

{
  "engines": {
    "node": "10.x.x"
  }
}

Node.js 8 (obsoleto)

{
  "engines": {
    "node": "8.x.x"
  }
}

La propiedad engines.node es opcional pero, si está presente, su valor debe ser compatible con la versión de Node.js especificada en el archivo app.yaml. Por ejemplo:

Node.js 12

  • 12.x.x
  • ^12.0.0
  • ~12
  • >=6

Node.js 10

  • 10.x.x
  • ^10.0.0
  • ~10
  • >=6

Node.js 8 (obsoleto)

  • 8.x.x
  • ^8.0.0
  • ~8
  • >=6

Si especificas una versión de Node.js no compatible en el archivo package.json, fallará la implementación y se mostrará un mensaje de error.

Dependencias

Durante la implementación, el entorno de ejecución instala tus dependencias con el comando npm install o, si existe un archivo yarn.lock, con el comando yarn install. Para obtener más información, consulta Especificación de dependencias. Debido a que el entorno de ejecución realiza una instalación nueva, no es necesario que subas tu carpeta node_modules.

Para admitir los paquetes de Node.js que requieren extensiones nativas, el entorno de ejecución incluye paquetes del sistema que te permiten usar herramientas como ImageMagick, FFmpeg y Chrome sin interfaz gráfica. Consulta la lista completa de paquetes en Paquetes del sistema incluidos. Para solicitar un paquete, envía el pedido a través del servicio de seguimiento de problemas.

Inicio de la aplicación

De forma predeterminada, el entorno de ejecución ejecuta node server.js para iniciar la aplicación. Si especificas una secuencia de comandos start en el archivo package.json, el entorno de ejecución ejecuta la secuencia de comandos de inicio especificada. Por ejemplo:

"scripts": {
  "start": "node app.js"
}

Para que tu app reciba solicitudes HTTP, la secuencia de comandos start debe iniciar un servidor web que escuche en el host 0.0.0.0 y el puerto que especifica la variable de entorno PORT, a la cual se puede acceder en Node.js como process.env.PORT.

Para obtener el mejor rendimiento, la secuencia de comandos start debe ser sencilla y excluir los pasos de compilación, debido a que se ejecuta cada vez que se crea una instancia nueva de la aplicación.

Puedes anular este comportamiento si especificas una secuencia de comandos en el campo entrypoint en app.yaml. En lugar de ejecutar node server.js o una secuencia de comandos de inicio, el entorno de ejecución inicia la aplicación con el comando que especificas en entrypoint.

Variables del entorno

El entorno de ejecución configura las siguientes variables del entorno:

Variable del entorno Descripción
GAE_APPLICATION ID de tu aplicación de App Engine. Este ID tiene el prefijo “region code~”, como “e~”, para aplicaciones implementadas en Europa.
GAE_DEPLOYMENT_ID ID de la implementación actual.
GAE_ENV Entorno de App Engine. Se define en standard.
GAE_INSTANCE ID de la instancia en la que se está ejecutando tu servicio.
GAE_MEMORY_MB Cantidad de memoria disponible para el proceso de la aplicación, en MB.
GAE_RUNTIME Entorno de ejecución especificado en el archivo app.yaml.
GAE_SERVICE Nombre de servicio especificado en el archivo app.yaml. Si no se especifica un nombre de servicio, se establece como default.
GAE_VERSION Etiqueta de la versión actual de tu servicio.
GOOGLE_CLOUD_PROJECT ID del proyecto de Cloud asociado a tu aplicación.
NODE_ENV Se establece en production cuando se implementa tu servicio.
PORT Puerto que recibe las solicitudes HTTP.

Puedes definir variables de entorno adicionales en tu archivo app.yaml, pero no es posible anular los valores anteriores, excepto NODE_ENV.

Proxies HTTPS y de reenvío

App Engine finaliza las conexiones HTTPS en el balanceador de cargas y reenvía las solicitudes a tu aplicación. Algunas aplicaciones deben determinar la IP y el protocolo de la solicitud original. La dirección IP del usuario está disponible en el encabezado X-Forwarded-For estándar. Las aplicaciones que necesitan esta información deben configurar sus marcos de trabajo web para que confíen en el proxy.

Con Express.js, debes usar la configuración trust proxy:

app.set('trust proxy', true);

Sistema de archivos

El entorno de ejecución incluye un sistema de archivos completo. El sistema de archivos es de solo lectura, a excepción de la ubicación /tmp, que es un disco virtual que almacena datos en la memoria RAM de tu instancia de App Engine.

Servidor de metadatos

Cada instancia de tu aplicación puede usar el servidor de metadatos de App Engine para consultar información acerca de la instancia y de tu proyecto.

Puedes acceder al servidor de metadatos a través de los extremos siguientes:

  • http://metadata
  • http://metadata.google.internal

La siguiente tabla enumera los extremos en los que puedes realizar solicitudes HTTP para metadatos específicos:

Extremo de metadatos Descripción
/computeMetadata/v1/project/numeric-project-id El número de proyecto asignado a tu proyecto.
/computeMetadata/v1/project/project-id El ID del proyecto asignado a tu proyecto.
/computeMetadata/v1/instance/zone La zona en la que se está ejecutando la instancia.
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email El correo electrónico de la cuenta de servicio predeterminada asignado a tu proyecto.
/computeMetadata/v1/instance/service-accounts/default/ Enumera todas las cuentas de servicio predeterminadas para tu proyecto.
/computeMetadata/v1/instance/service-accounts/default/scopes Enumera todos los alcances compatibles para las cuentas de servicio predeterminadas.
/computeMetadata/v1/instance/service-accounts/default/token Muestra el token de autenticación que puede usarse para autenticar tu aplicación en otras API de Google Cloud.

Por ejemplo, para recuperar tu ID del proyecto, envía una solicitud a http://metadata.google.internal/computeMetadata/v1/project/project-id.