Informationen zur Edge-Unterstützung für Node.js-Module

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Welche Version von Node.js wird von Apigee Edge unterstützt?

Edge unterstützt derzeit Node.js 0.10.32.

Welche Node.js-Standardmodule werden in Edge unterstützt?

Verwenden Sie die folgende Tabelle, um festzustellen, welche Node.js-Standardmodule in Edge enthalten sind. In einigen Fällen werden enthaltene Module nur teilweise unterstützt. Dies sind Module, die in Node.js integriert sind.

Modul Status Hinweise
assert Unterstützt
buffer Unterstützt
child_process Eingeschränkt Wenn versucht wird, einen Unterprozess zu erzeugen, wird eine Ausnahme ausgelöst. Zum Erzeugen von Subskripten wird jedoch „fork“ unterstützt.
cluster Deaktiviert Die Methode „cluster.isMaster“ gibt immer „true“ zurück und andere Methoden werden nicht implementiert. Eine Kopie jedes Node.js-Skripts wird auf jedem Edge-Nachrichtenprozessor bereitgestellt.
crypto Unterstützt
dns Unterstützt
domain Unterstützt
dgram Eingeschränkt Node.js-Anwendungen in der Apigee-Umgebung können aufgrund unserer Netzwerkarchitektur nicht über UDP auf Dienste im Internet zugreifen.
events Unterstützt
fs Eingeschränkt Der Zugriff auf das Dateisystem ist auf das Verzeichnis beschränkt, in dem das Skript gestartet wurde: das Verzeichnis /resources/node. Node.js-Skripts können Dateien in diesem Verzeichnis lesen und schreiben, z. B. als temporärer Scratch-Bereich. Es gibt jedoch keine Garantie dafür, wie lange die Dateien gespeichert werden.
http Unterstützt Der virtuelle Host und der Pfad für eingehende Anfragen werden im API-Proxy und nicht im HTTP-Modul angegeben. Weitere Informationen findest du unter Unterstützung für die HTTP- und HTTPS-Module.
https Unterstützt Das Erstellen eines „https“-Servers entspricht dem „http“-Server. Weitere Informationen findest du unter Unterstützung für die HTTP- und HTTPS-Module.
module Unterstützt
net Eingeschränkt Versuche, auf eingehende TCP-Verbindungen zu warten, lösen eine Ausnahme aus.
path Unterstützt
module Unterstützt
process Teilweise Unterstützung Die Bearbeitung der Nutzer-ID, der Gruppenmitgliedschaft und des Arbeitsverzeichnisses wird nicht unterstützt.
punycode Unterstützt
querystring Unterstützt
readline Deaktiviert Es gibt keine Standardeingabe für Skripts, die auf Apigee Edge ausgeführt werden.
repl Deaktiviert Es gibt keine Standardeingabe für Skripts, die auf Apigee Edge ausgeführt werden.
module Eingeschlossen
STDIO Unterstützt

Standardausgabe und -fehler werden an eine Logdatei innerhalb der Apigee Edge-Infrastruktur weitergeleitet. Sie können diese Logs ansehen, indem Sie in der Apigee Edge-Verwaltungsoberfläche für Ihren API-Proxy auf die Schaltfläche Node.js-Logs klicken.

Es gibt keine Standardeingabe für Skripts, die auf Apigee Edge ausgeführt werden. Sie können Argumente jedoch mit dem ScriptTarget-Element von TargetEndpoint übergeben. Weitere Informationen finden Sie unter Erweiterte ScriptTarget-Konfiguration.

stream Unterstützt
string_decoder Unterstützt
timers Eingeschlossen
tls Unterstützt TLS-Parameter (Transport Layer Security) funktionieren im Grunde genauso wie in reguläres Node.js. Weitere Informationen finden Sie unter TLS (SSL) Node.js-Modul in Apigee Edge verwenden.
tty Deaktiviert Es gibt keine Standardeingabe für Skripts, die auf Apigee Edge ausgeführt werden.
url Unterstützt
util Unterstützt
vm Unterstützt
zlib Unterstützt

Weitere unterstützte Module

In diesem Abschnitt werden zusätzliche Module aufgeführt, die in Node.js-Standard nicht unterstützt werden, aber von Trireme und Trireme, die auf Apigee Edge ausgeführt werden. Trireme ist der Open-Source-Node.js-Container, der auf Apigee Edge ausgeführt wird. Er wurde entwickelt, um Node.js-Skripts in einer Java Virtual Machine (JVM) auszuführen. Alle diese Module sind in der NPM verfügbar.

Modul Beschreibung
apigee-access Ermöglicht es Node.js-Anwendungen, die auf der Apigee Edge-Plattform ausgeführt werden, auf Apigee-spezifische Funktionen zuzugreifen. Sie können dieses Modul für Folgendes verwenden: auf Ablaufvariablen zugreifen und diese ändern, Daten aus dem sicheren Speicher abrufen und Edge-Cache, Kontingente und OAuth-Dienste verwenden. Siehe auch Apigee-Zugriffsmodul verwenden.
Trireme-Support Hiermit können Node.js-Anwendungen Features von Trireme nutzen. Derzeit wird nur ein Feature unterstützt: das Laden von in Java erstellten Node.js-Modulen. Hinweis: LoadJars wird in Edge Cloud nicht unterstützt.
Trireme-SLT Stellt eine Abstraktion der XLST-Verarbeitung dar. Sie wurde speziell für die Trireme-Plattform entwickelt, um eine effiziente Verarbeitung von XSLT zu ermöglichen, wenn Node.js-Anwendungen auf Java ausgeführt werden.
trireme-jdbc Bietet Zugriff auf JDBC von Node.js. Hinweis: In Edge Cloud nicht unterstützt. Für die Edge Private Cloud können Sie JDPC-JAR-Dateien in den Klassenpfad einfügen und dieses Modul verwenden.

Unterstützung für häufig verwendete Node.js-Module

Einschränkungen für Node.js-Skripts

Beachten Sie jedoch, dass Edge bestimmte Einschränkungen für Node.js-Skripts auferlegt, z. B.:

  • Node.js-Anwendungen in der Apigee Edge-Umgebung können aufgrund der Edge-Netzwerkarchitektur nicht über UDP auf Dienste im Internet zugreifen.
  • Der Zugriff auf das Dateisystem ist auf das Verzeichnis beschränkt, in dem das Node.js-Skript gestartet wurde: das Verzeichnis „/resources/node“. Node.js-Skripts können Dateien in diesem Verzeichnis lesen und schreiben, z. B. als temporärer Scratch-Bereich. Es gibt jedoch keine Garantie dafür, wie lange die Dateien gespeichert werden.
  • Versuche, auf eingehende TCP-Verbindungen zu warten, generieren eine Ausnahme.
  • Die Bearbeitung der Nutzer-ID, der Gruppenmitgliedschaft und des Arbeitsverzeichnisses wird nicht unterstützt.
  • Bei der Standardeingabe sind Argumente auf die Übergabe von Argumenten mithilfe des ScriptTarget-Elements von TargetEndpoint beschränkt. Weitere Informationen finden Sie unter Erweiterte ScriptTarget-Konfiguration.
  • Für die Standardausgabe können Sie nur die Schaltfläche für Node.js-Logs in der Edge-Verwaltungs-UI für Ihren Proxy verwenden. Sie können auch den Befehl „apigeetool getlogs“ verwenden. Weitere Informationen finden Sie unter Eigenständige Node.js-Anwendung bereitstellen.
  • Module, die von nativem Code abhängen, werden nicht unterstützt.
  • Module, die von EcmaScript 6-Funktionen wie Promises und Generatoren abhängen, werden nicht unterstützt.
  • Node.js-Laufzeit-Flags wie „harmony-proxies“ werden nicht unterstützt.

IP-Verbindungseinschränkungen in Edge für Private Cloud festlegen

Edge für Private Cloud kann verhindern, dass Node.js-Code auf IP-Adressen zugreift, die mit „10.“, „192.168“ und localhost. Wenn Sie versuchen, auf diese IP-Adressen zuzugreifen, wird eine Fehlermeldung im folgenden Format angezeigt:

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

Sie können diese Einschränkungen ändern, indem Sie das Attribut conf_nodejs_connect.ranges.denied in der Datei message-processors.properties für jeden Message Processor festlegen. Diese Eigenschaft hat standardmäßig den Wert:

  • Edge 4.17.05 und niedriger: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 und höher: conf_nodejs_connect.ranges.denied= (keine Einschränkungen)

So legen Sie diese Eigenschaft fest:

  1. Öffnen Sie die Datei message-processor.properties in einem Editor. Wenn die Datei nicht vorhanden ist, erstellen Sie sie:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Legen Sie die Eigenschaft wie gewünscht fest. So können Sie beispielsweise nur den Zugriff auf localhost verweigern:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Speichern Sie die Änderungen.
  4. Achten Sie darauf, dass die Attributdatei dem Benutzer „apigee“ gehört:
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Starten Sie den Meldungsprozessor neu:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service Edge-Nachrichtenprozessor neu starten

Unterstützung der HTTP- und HTTPS-Module

Alle in Apigee Edge ausgeführten Node.js-Anwendungen müssen das Modul http oder https verwenden, um eingehende Anfragen zu überwachen. Wenn Sie ein Skript bereitstellen, das nicht auf eingehende Anfragen wartet, wird es einfach ausgeführt und beendet.

Die Methode listen der Module http und https in Node.js verwendet eine Portnummer als Parameter. Beispiel:

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

Dieses Argument vom Typ „Port“ ist in Node.js erforderlich, aber Apigee Edge ignoriert diesen Parameter. Stattdessen gibt der API-Proxy, in dem das Node.js-Skript ausgeführt wird, den "virtuellen Host" an, den es überwacht, und die Node.js-Anwendung verwendet dieselben virtuellen Hosts wie jeder andere Apigee Edge-Proxy.

Jede Umgebung in Apigee hat mindestens einen virtuellen Host. Der virtuelle Host definiert die HTTP-Einstellungen für die Verbindung mit der Apigee-Organisation. Alle API-Proxys in einer Umgebung nutzen dieselben virtuellen Hosts. Standardmäßig sind für jede Umgebung zwei virtuelle Hosts verfügbar: default und secure. Weitere Informationen findest du unter Virtuellen Host abrufen und API-Entwicklungslebenszyklus.

Der Befehl apigeetool deploynodeapp generiert einen Apigee Edge-Proxy-Wrapper um die Node.js-Anwendung. Bei der Bereitstellung überwacht die Node.js-Anwendung den für die Umgebung definierten virtuellen Standardhost. Die URL für eine Node.js-Anwendung ist immer http://{org_name}-{env_name}.apigee.net.

Eingehende Anfragen verarbeiten

Wie bei anderen Apigee Edge-Anwendungen akzeptiert die Proxyanwendung eingehende Anfragen über HTTPS, wenn sie so eingerichtet ist, dass sie den virtuellen Host secure überwacht.

Ausgehende Anfragen verarbeiten

Neben dem Empfangen von eingehendem Traffic können Node.js-Anwendungen in Apigee Edge die Module http und https verwenden, um ausgehende Anfragen wie jede andere Node.js-Anwendung zu senden. Diese Module funktionieren wie gewohnt in Node.js.

Unterstützung des tls-Moduls

Apigee Edge unterstützt das Node.js-TL-Modul. In diesem Modul wird OpenSSL verwendet, um die TLS- (Transport Layer Security)- und/oder SSL-verschlüsselte Streamkommunikation (Secure Socket Layer) zu ermöglichen. Mit dem Modul tls können Sie sichere Verbindungen zu Back-End-Diensten von Node.js-Anwendungen erstellen, die auf Edge ausgeführt werden.

Damit Sie verstehen, wie das Modul tls in Apigee Edge funktioniert, sollten Sie wissen, wie virtual hosts in Apigee Edge verwendet wird. Jede Umgebung in Apigee hat mindestens einen virtuellen Host. Der virtuelle Host definiert die HTTP-Einstellungen für die Verbindung mit der Apigee-Organisation. Alle API-Proxys in einer Umgebung nutzen dieselben virtuellen Hosts. Standardmäßig sind für jede Umgebung zwei virtuelle Hosts verfügbar: default und secure. Weitere Informationen zu virtuellen Hosts finden Sie unter Virtuellen Host abrufen und API-Entwicklungslebenszyklus.

Sehen wir uns nun an, wie Apigee Edge die TLS-(SSL-)Kommunikation für eingehende und ausgehende Anfragen in Node.js-Anwendungen verarbeitet:

Eingehende Anfragen verarbeiten

Je nachdem, wie virtuelle Hosts für Ihre Organisation konfiguriert sind, bietet Edge diese Optionen:

  • Wenn der API-Proxy so konfiguriert ist, dass er den virtuellen Host default überwacht, akzeptiert er Anfragen über HTTP.
  • Wenn der API-Proxy so konfiguriert ist, dass er den virtuellen Host secure überwacht, akzeptiert er Anfragen über HTTPS. Die URL befindet sich in der Domain apigee.net und für *.apigee.net wird ein Platzhalter-SSL-Zertifikat verwendet. Solange Anwendungen Anfragen an die Domain apigee.net senden, wird das SSL-Zertifikat normal validiert.

Ausgehende Anfragen verarbeiten

Mit dem tls-Modul können Sie ausgehende Anfragen wie gewohnt in Node.js senden. Grundsätzlich müssen Sie dem Verzeichnis resources/node clientseitige Schlüssel und Zertifikate (.pem-Dateien) hinzufügen und in Ihrem Skript laden. Informationen zur Verwendung des Moduls tls und seiner Methoden finden Sie in der Dokumentation zum Node.js-TL-Modul.

Erweiterte ScriptTarget-Konfiguration

In der <TargetEndpoint>-Definition werden für das <ScriptTarget>-Element neben <ResourceURL> weitere optionale Parameter verwendet. Mit den Parametern <EnvironmentVariables> und <Arguments> können Sie auch Befehlszeilenargumente und Umgebungsvariablen an ein Node.js-Skript übergeben:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>