Información sobre la compatibilidad de Edge para módulos de Node.js

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

¿Qué versión de Node.js es compatible con Apigee Edge?

Actualmente, Edge es compatible con Node.js 0.10.32.

¿Qué módulos estándar de Node.js son compatibles con Edge?

Usa la siguiente tabla para determinar qué módulos de Node.js estándar se incluyen en Edge. En algunos casos, los módulos incluidos solo son parcialmente compatibles. Estos son módulos integrados en Node.js.

Módulo Estado Notas
assert Admitido
buffer Admitido
child_process Restringido Se arrojará una excepción si se intenta generar un subproceso. Sin embargo, "fork" es compatible con la generación de subíndices.
cluster Inhabilitado El método cluster.isMaster siempre muestra el valor true y no se implementan otros métodos. Se implementa una copia de cada secuencia de comandos Node.js en cada procesador de mensajes Edge.
crypto Admitido
dns Compatible
domain Admitido
dgram Restringido Las aplicaciones de Node.js en el entorno de Apigee no podrán acceder a los servicios en Internet a través de UDP debido a nuestra arquitectura de red.
events Admitido
fs Restringido El acceso al sistema de archivos está restringido al directorio en el que se inició la secuencia de comandos: /resources/node. Es posible que las secuencias de comandos de Node.js lean y escriban archivos dentro de este directorio, por ejemplo, como un área temporal temporal, pero no se garantiza la duración de los archivos.
http Admitido El host virtual y la ruta de acceso para las solicitudes entrantes se especifican en el proxy de API, no en el módulo HTTP. Consulta "Información sobre la compatibilidad de los módulos HTTP y HTTPS" para obtener más información.
https Admitido La creación de un servidor "https" se comporta de la misma manera que un servidor "http". Consulta "Información sobre la compatibilidad de los módulos http y https" para obtener más información.
module Admitido
net Restringido Los intentos de detectar las conexiones TCP entrantes generarán una excepción.
path Admitido
module Admitido
process Compatibilidad parcial No se admite la funcionalidad para manipular el ID de usuario, la pertenencia a grupos ni el directorio de trabajo.
punycode Admitido
querystring Admitido
readline Inhabilitado No hay una entrada estándar para las secuencias de comandos que se ejecutan en Apigee Edge.
repl Inhabilitado No hay una entrada estándar para las secuencias de comandos que se ejecutan en Apigee Edge.
module Incluido
STDIO Admitido

Las salidas y los errores estándar se enrutan a un archivo de registro dentro de la infraestructura de Apigee Edge. Para ver estos registros, haz clic en el botón Registros de Node.js y en la IU de administración de Apigee Edge de tu proxy de API.

No hay una entrada estándar para las secuencias de comandos que se ejecutan en Apigee Edge. Sin embargo, puedes pasar argumentos con el elemento ScriptTarget de TargetEndpoint. Consulta Configuración avanzada de ScriptTarget para obtener más información.

stream Admitido
string_decoder Admitido
timers Incluido
tls Admitido Los parámetros de seguridad de la capa de transporte (TLS) funcionan básicamente de la misma manera que en Node.js común. Consulta Usa el módulo Node.js de TLS (SSL) en Apigee Edge para obtener más detalles.
tty Inhabilitado No hay una entrada estándar para las secuencias de comandos que se ejecutan en Apigee Edge.
url Admitido
util Compatible
vm Compatible
zlib Admitido

Módulos compatibles adicionales

En esta sección, se enumeran los módulos adicionales que no son compatibles con Node.js estándar, pero que son compatibles con Trireme y Trireme que se ejecutan en Apigee Edge. Trireme es el contenedor de Node.js de código abierto que se ejecuta en Apigee Edge. Está diseñada para ejecutar secuencias de comandos de Node.js dentro de una máquina virtual Java (JVM). Todos estos módulos están disponibles en NPM.

Módulo Descripción
apigee-access Permite que las aplicaciones de Node.js que se ejecutan en la plataforma Apigee Edge accedan a funciones específicas de Apigee. Puedes usar este módulo para acceder a variables de flujo y modificarlas, recuperar datos del almacenamiento seguro y usar la caché de Edge, las cuotas y los servicios de OAuth. Consulta también Usa el módulo apigee-access.
trireme-support Permite que las aplicaciones de Node.js aprovechen las funciones específicas de Trireme. Actualmente, solo se admite una función: cargar módulos de Node.js compilados en Java. Nota: loadJars no es compatible con Edge Cloud.
trireme-xslt Presenta una abstracción del procesamiento XLST. Se diseñó específicamente para que la plataforma Trireme permita el procesamiento eficiente de XSLT cuando las aplicaciones de Node.js se ejecutan en Java.
trireme-jdbc Proporciona acceso a JDBC desde Node.js. Nota: No es compatible con Edge Cloud. En Edge Private Cloud, puedes colocar los archivos JAR de JDPC en la ruta de acceso de la clase y usar este módulo.

Compatibilidad con módulos de Node.js de uso general

Restricciones en las secuencias de comandos de Node.js

Sin embargo, ten en cuenta que Edge impone ciertas restricciones a las secuencias de comandos de Node.js, como las siguientes:

  • Las aplicaciones de Node.js en el entorno de Apigee Edge no pueden acceder a los servicios en Internet a través de UDP debido a la arquitectura de red de Edge.
  • El acceso al sistema de archivos está restringido al directorio donde se inició la secuencia de comandos de Node.js: el directorio /resources/node. Las secuencias de comandos de Node.js pueden leer y escribir archivos dentro de este directorio, por ejemplo, como área temporal temporal, pero no se garantiza la duración de los archivos.
  • Los intentos de detectar las conexiones TCP entrantes generan una excepción.
  • No se admite la funcionalidad para manipular el ID de usuario, la pertenencia a grupos ni el directorio de trabajo.
  • Para la entrada estándar, solo puedes pasar argumentos con el elemento ScriptTarget de TargetEndpoint. Consulta Configuración avanzada de ScriptTarget para obtener más información.
  • En el caso de los resultados estándar, puedes usar el botón Registros de Node.js en la IU de administración de Edge para el proxy. También puedes usar el comando “apigeetool getlogs”. Para obtener más información, consulta Implementa una app de Node.js independiente.
  • Los módulos que dependen de código nativo no son compatibles.
  • Los módulos que dependen de las funciones de EcmaScript 6, como las promesas y los generadores, no son compatibles.
  • No se admiten las marcas de entorno de ejecución de Node.js, como “harmony-proxies”.

Establece restricciones de conexión de IP en el perímetro para la nube privada

Edge de la nube privada puede restringir el acceso del código de Node.js a direcciones IP que comiencen con “10”. "192.168" y localhost. Si intentas acceder a estas direcciones IP, verás un error en el siguiente formato:

{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }

Para modificar estas restricciones, configura la propiedad conf_nodejs_connect.ranges.denied en el archivo message-processors.properties de cada Message Processor. De forma predeterminada, esta propiedad tiene el siguiente valor:

  • Edge 4.17.05 y versiones anteriores: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 y versiones posteriores: conf_nodejs_connect.ranges.denied= (es decir, sin restricciones)

Para configurar esta propiedad, sigue estos pasos:

  1. Abre el archivo message-processor.properties en un editor. Si el archivo no existe, créalo:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Configura la propiedad como desees. Por ejemplo, para denegar el acceso solo a localhost:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Guarda los cambios.
  4. Asegúrate de que el archivo de propiedades sea propiedad del usuario de “apigee”:
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Reinicia el procesador de mensajes:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service Edge-message-processor reiniciar

Cómo entender la compatibilidad de los módulos HTTP y HTTPS

Todas las aplicaciones de Node.js que se ejecutan en Apigee Edge deben usar los módulos http o https para escuchar las solicitudes entrantes. Si implementaras una secuencia de comandos que no escuche las solicitudes entrantes, simplemente se ejecutaría y saldría.

El método listen de los módulos http y https de Node.js toma un número de puerto como parámetro. Por ejemplo:

svr.listen(process.env.PORT || 9000, function() {
   console.log('The server is running.');
});

Este argumento “port” es obligatorio en Node.js, pero Apigee Edge ignora este parámetro. En cambio, el proxy de API en el que se ejecuta la secuencia de comandos de Node.js especifica el “host virtual” que recibe, y la aplicación de Node.js usa esos mismos hosts virtuales, como cualquier otro proxy de Apigee Edge.

Cada entorno en Apigee tiene al menos un host virtual. El host virtual define la configuración de HTTP para la conexión con la organización de Apigee. Todos los proxies de API de un entorno comparten los mismos hosts virtuales. De forma predeterminada, hay dos hosts virtuales disponibles para cada entorno: default y secure. Para obtener más información, consulta Cómo obtener un host virtual y Ciclo de vida de desarrollo de la API.

El comando apigeetool deploynodeapp genera un wrapper del proxy de Apigee Edge alrededor de la aplicación de Node.js. Cuando se implementa, la aplicación de Node.js escucha en el host virtual predeterminado definido para el entorno. La URL de una aplicación de Node.js siempre será http://{org_name}-{env_name}.apigee.net.

Controla las solicitudes entrantes

Al igual que otras aplicaciones de Apigee Edge, si la aplicación de proxy está configurada para escuchar en el host virtual secure, aceptará solicitudes entrantes mediante HTTPS.

Cómo administrar solicitudes salientes

Además de recibir tráfico entrante, las aplicaciones de Node.js dentro de Apigee Edge pueden usar los módulos http y https para realizar solicitudes salientes como cualquier otra aplicación de Node.js. Estos módulos funcionan igual que siempre dentro de Node.js.

Información sobre la compatibilidad con el módulo tls

Apigee Edge admite el módulo tls de Node.js. Este módulo usa OpenSSL para proporcionar comunicación de transmisión encriptada con seguridad de la capa de transporte (TLS) o una capa de conexión segura (SSL). Puedes usar el módulo tls para crear conexiones seguras a servicios de backend desde aplicaciones de Node.js que se ejecutan en Edge.

Para comprender cómo funciona el módulo tls en Apigee Edge, es importante comprender cómo se usan virtual hosts en Apigee Edge. Cada entorno en Apigee tiene al menos un host virtual. El host virtual define la configuración de HTTP para la conexión con la organización de Apigee. Todos los proxies de API de un entorno comparten los mismos hosts virtuales. De forma predeterminada, hay dos hosts virtuales disponibles para cada entorno: default y secure. Para obtener más información sobre los hosts virtuales, consulta Cómo obtener un host virtual y Ciclo de vida de desarrollo de la API.

Veamos cómo Apigee Edge maneja la comunicación TLS (SSL) para solicitudes entrantes y salientes en aplicaciones de Node.js:

Controla las solicitudes entrantes

Según cómo estén configurados los hosts virtuales para tu organización, Edge proporciona las siguientes opciones:

  • Si el proxy de API está configurado para escuchar en el host virtual default, acepta solicitudes a través de HTTP.
  • Si el proxy de API está configurado para escuchar en el host virtual secure, acepta solicitudes a través de HTTPS. La URL estará bajo el dominio apigee.net y se usará un certificado SSL comodín para *.apigee.net. Siempre que las apps realicen solicitudes al dominio apigee.net, el certificado SSL se validará normalmente.

Cómo administrar solicitudes salientes

Puedes realizar solicitudes salientes con el módulo tls de la misma manera que lo harías normalmente en Node.js. Básicamente, debes agregar claves y certificados del cliente (archivos .pem) al directorio resources/node y cargarlos dentro de la secuencia de comandos. Para obtener información sobre el uso del módulo tls y sus métodos, consulta la documentación del módulo tls de Node.js.

Configuración avanzada de ScriptTarget

En la definición <TargetEndpoint>, el elemento <ScriptTarget> toma parámetros opcionales adicionales además de <ResourceURL>. También puedes pasar argumentos de línea de comandos y variables de entorno a una secuencia de comandos de Node.js con los parámetros <EnvironmentVariables> y <Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>