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

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

¿Qué versión de Node.js se admite en Apigee Edge?

Actualmente, Edge admite Node.js 0.10.32.

¿Qué módulos estándar de Node.js se admiten en Edge?

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

Módulo Estado Notas
assert Compatible
buffer Compatible
child_process Restringido Se arrojará una excepción si se intenta generar un subproceso. Sin embargo, se admite "fork" para generar subscripts.
cluster Inhabilitado El método cluster.isMaster siempre devuelve verdadero, y no se implementan otros métodos. Se implementa una copia de cada secuencia de comandos de Node.js en cada procesador de mensajes de Edge.
crypto Compatible
dns Compatible
domain Compatible
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 Compatible
fs Restringido El acceso al sistema de archivos se restringe al directorio en el que se inició la secuencia de comandos: el directorio /resources/node. Los secuencias de comandos de Node.js pueden leer y escribir archivos dentro de este directorio, por ejemplo, como un área de trabajo temporal, pero no hay garantías sobre cuánto tiempo persistirán los archivos.
http Compatible El host virtual y la ruta para las solicitudes entrantes se especifican en el proxy de API, no en el módulo HTTP. Consulta "Información sobre la compatibilidad con los módulos http y https" para obtener más información.
https Compatible La creación de un servidor "https" se comporta de manera idéntica a la de un servidor "http". Consulta "Información sobre la compatibilidad con los módulos http y https" para obtener más información.
module Compatible
net Restringido Los intentos de escuchar conexiones TCP entrantes generarán una excepción.
path Compatible
module Compatible
process Compatibilidad parcial No se admite la funcionalidad para manipular el ID de usuario, la pertenencia a un grupo ni el directorio de trabajo.
punycode Compatible
querystring Compatible
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 Compatible

La salida y el error 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 Node.js Logs en la IU de administración de Apigee Edge para 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 Compatible
string_decoder Compatible
timers Incluido
tls Compatible Los parámetros de Seguridad de la capa de transporte (TLS) funcionan básicamente de la misma manera que en Node.js normal. Consulta Cómo usar el módulo TLS (SSL) de Node.js 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 Compatible
util Compatible
vm Compatible
zlib Compatible

Módulos compatibles adicionales

En esta sección, se enumeran los módulos adicionales que no son compatibles con Node.js estándar, pero sí con Trireme y Trireme que se ejecutan en Apigee Edge. Trireme es el contenedor de código abierto de Node.js que se ejecuta en Apigee Edge. Está diseñado 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 de Apigee Edge accedan a la funcionalidad específica de Apigee. Puedes usar este módulo para acceder a las variables de flujo y modificarlas, recuperar datos del almacén seguro y usar los servicios de caché, cuota y OAuth de Edge. Consulta también Cómo usar 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 de XLST. Está diseñado específicamente para la plataforma Trireme y permite 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 se admite en Edge Cloud. En Edge Private Cloud, puedes colocar archivos JAR de JDBC en la ruta de acceso de clase y usar este módulo.

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

Restricciones en las secuencias de comandos de Node.js

Sin embargo, ten en cuenta que Edge impone ciertas restricciones en los 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 en el que 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 un área de trabajo temporal, pero no hay garantías sobre cuánto tiempo persistirán los archivos.
  • Los intentos de escuchar las conexiones TCP entrantes generan una excepción.
  • No se admite la funcionalidad para manipular el ID de usuario, la pertenencia a un grupo 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.
  • Para la salida estándar, solo puedes usar el botón Node.js Logs en la IU de administración de Edge de tu proxy. También puedes usar el comando "apigeetool getlogs". Para obtener más información, consulta Implementa una app independiente de Node.js.
  • No se admiten los módulos que dependen de código nativo.
  • No se admiten los módulos que dependen de las funciones de EcmaScript 6, como Promises y Generators.
  • No se admiten las marcas de tiempo de ejecución de Node.js, como "harmony-proxies".

Cómo configurar restricciones de conexión IP en Edge para la nube privada

Edge para Private Cloud puede restringir el acceso del código de Node.js a las direcciones IP que comienzan con "10.". "192.168" y localhost. Si intentas acceder a estas direcciones IP, verás un error con el siguiente formato:

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

Puedes modificar estas restricciones configurando la propiedad conf_nodejs_connect.ranges.denied en el archivo message-processors.properties para cada procesador de mensajes. 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= (lo que significa que no hay restricciones)

Para establecer 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. Establece la propiedad como desees. Por ejemplo, para denegar el acceso solo a localhost, haz lo siguiente:
    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 "apigee":
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Reinicia el Message Processor:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Información sobre la compatibilidad con los módulos http y https

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

El método listen de los módulos http y https en 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 lo ignora. En cambio, el proxy de API en el que se ejecuta la secuencia de comandos de Node.js especifica el "host virtual" en el que escucha, y la aplicación de Node.js usa esos mismos hosts virtuales, al igual que cualquier otro proxy de Apigee Edge.

Cada entorno de Apigee tiene al menos un host virtual. El host virtual define la configuración HTTP para la conexión con la organización de Apigee. Todos los proxies de API en 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 Get Virtual Host y ciclo de vida del desarrollo de la API.

El comando apigeetool deploynodeapp genera un wrapper de 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.

Cómo controlar 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 a través de HTTPS.

Control de 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 como siempre lo hicieron en 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 seguridad de la capa de transporte (TLS) o comunicación de transmisión encriptada de 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 saber cómo se usan los virtual hosts en Apigee Edge. Todos los entornos de Apigee tienen 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 en 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 Get Virtual Host y ciclo de vida del desarrollo de la API.

Ahora, veamos cómo Apigee Edge controla la comunicación TLS (SSL) para las solicitudes entrantes y salientes en las aplicaciones de Node.js:

Cómo controlar las solicitudes entrantes

Según cómo se configuren 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 y cuando las apps realicen solicitudes al dominio apigee.net, el certificado SSL se validará normalmente.

Control de 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 tu 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 de <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>