Informazioni sul supporto perimetrale per i moduli Node.js

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Quale versione di Node.js è supportata su Apigee Edge?

Edge attualmente supporta Node.js 0.10.32.

Quali moduli Node.js standard sono supportati su Edge?

Utilizza la seguente tabella per determinare quali moduli Node.js standard sono inclusi in Edge. In alcuni casi, i moduli inclusi sono supportati solo parzialmente. Questi sono moduli integrati in Node.js.

Module Stato Note
assert Supportato
buffer Supportato
child_process Con restrizioni Verrà generata un'eccezione se viene effettuato un tentativo di generare un sottoprocesso. Tuttavia, "fork" è supportato per la generazione di script secondari.
cluster Disabilitato Il metodo cluster.isMaster restituisce sempre true e gli altri metodi non sono implementati. Una copia di ogni script Node.js viene sottoposta a deployment in ogni processore di messaggi Edge.
crypto Supportato
dns Supportato
domain Supportato
dgram Con restrizioni Le applicazioni Node.js nell'ambiente Apigee non potranno accedere ai servizi su internet tramite UDP a causa della nostra architettura di rete.
events Supportato
fs Con restrizioni L'accesso al file system è limitato alla directory in cui è stato avviato lo script: la directory /resources/node. Gli script Node.js possono leggere e scrivere file all'interno di questa directory, ad esempio come area temporanea, ma non ci sono garanzie sulla durata di permanenza dei file.
http Supportato L'host virtuale e il percorso per le richieste in entrata sono specificati nel proxy API, non dal modulo HTTP. Per saperne di più, consulta la sezione "Informazioni sul supporto dei moduli http e https".
https Supportato La creazione di un server "https" si comporta in modo identico a un server "http". Per saperne di più, consulta la sezione "Informazioni sul supporto dei moduli http e https".
module Supportato
net Con restrizioni I tentativi di ascolto delle connessioni TCP in entrata genereranno un'eccezione.
path Supportato
module Supportato
process Supporto parziale La funzionalità per manipolare l'ID utente, l'iscrizione al gruppo e la directory di lavoro non è supportata.
punycode Supportato
querystring Supportato
readline Disabilitato Non esiste un input standard per gli script in esecuzione su Apigee Edge.
repl Disabilitato Non esiste un input standard per gli script in esecuzione su Apigee Edge.
module Incluso
STDIO Supportato

L'output standard e l'errore vengono indirizzati a un file di log all'interno dell'infrastruttura di Apigee Edge. Puoi visualizzare questi log facendo clic sul pulsante Log Node.js nell'interfaccia utente di gestione di Apigee Edge per il proxy API.

Non esiste un input standard per gli script in esecuzione su Apigee Edge. Tuttavia, puoi passare argomenti utilizzando l'elemento ScriptTarget di TargetEndpoint. Per ulteriori informazioni, consulta la sezione Configurazione avanzata di ScriptTarget.

stream Supportato
string_decoder Supportato
timers Incluso
tls Supportato I parametri Transport Layer Security (TLS) funzionano fondamentalmente allo stesso modo di Node.js. Per maggiori dettagli, consulta Utilizzo del modulo Node.js TLS (SSL) su Apigee Edge.
tty Disabilitato Non esiste un input standard per gli script in esecuzione su Apigee Edge.
url Supportato
util Supportato
vm Supportato
zlib Supportato

Altri moduli supportati

Questa sezione elenca moduli aggiuntivi non supportati in Node.js standard, ma supportati da Trireme e Trireme in esecuzione su Apigee Edge. Trireme è il container Node.js open source che viene eseguito su Apigee Edge. È progettato per eseguire script Node.js all'interno di una macchina virtuale Java (JVM). Tutti questi moduli sono disponibili su NPM.

Module Descrizione
apigee-access Consente alle applicazioni Node.js in esecuzione sulla piattaforma Apigee Edge di accedere a funzionalità specifiche di Apigee. Puoi utilizzare questo modulo per: accedere e modificare le variabili di flusso, recuperare i dati dall'archivio sicuro e utilizzare i servizi di quota, cache Edge e OAuth. Vedi anche Utilizzare il modulo apigee-access.
trireme-support Consente alle applicazioni Node.js di sfruttare le funzionalità specifiche di Trireme. Al momento è supportata solo una funzionalità: il caricamento dei moduli Node.js integrati in Java. Nota: loadJars non è supportato in Edge Cloud.
trireme-xslt Presenta un'astrazione dell'elaborazione XSLT. È progettato specificamente per la piattaforma Trireme per consentire l'elaborazione efficiente di XSLT quando le applicazioni Node.js vengono eseguite su Java.
trireme-jdbc Fornisce l'accesso a JDBC da Node.js. Nota: non supportato in Edge Cloud. Per Edge Private Cloud, puoi inserire i file JAR JDPC nel percorso delle classi e utilizzare questo modulo.

Supporto dei moduli Node.js di uso comune

Limitazioni agli script Node.js

Tieni presente, tuttavia, che Edge impone alcune limitazioni agli script Node.js, ad esempio le seguenti:

  • Le applicazioni Node.js nell'ambiente Apigee Edge non possono accedere ai servizi su internet tramite UDP a causa dell'architettura di rete Edge.
  • L'accesso al filesystem è limitato alla directory in cui è stato avviato lo script Node.js: la directory /resources/node. Gli script Node.js possono leggere e scrivere file all'interno di questa directory, ad esempio come area di lavoro temporanea, ma non ci sono garanzie sulla durata di permanenza dei file.
  • I tentativi di ascolto delle connessioni TCP in entrata generano un'eccezione.
  • La funzionalità per manipolare l'ID utente, l'iscrizione al gruppo e la directory di lavoro non è supportata.
  • Per l'input standard, puoi passare argomenti solo utilizzando l'elemento ScriptTarget di TargetEndpoint. Per ulteriori informazioni, consulta la sezione Configurazione avanzata di ScriptTarget.
  • Per l'output standard, puoi utilizzare solo il pulsante Log di Node.js nell'interfaccia utente di gestione Edge per il proxy. Puoi anche utilizzare il comando "apigeetool getlogs". Per saperne di più, consulta Deployment di un'app Node.js autonoma.
  • I moduli che dipendono dal codice nativo non sono supportati.
  • I moduli che dipendono dalle funzionalità di EcmaScript 6, come Promises e Generators, non sono supportati.
  • I flag del runtime Node.js, ad esempio "harmony-proxies", non sono supportati.

Impostazione delle limitazioni di connessione IP su Edge for Private Cloud

Edge for Private Cloud può impedire al codice Node.js di accedere agli indirizzi IP che iniziano con "10.", "192.168" e localhost. Se tenti di accedere a questi indirizzi IP, visualizzerai un errore nel formato:

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

Puoi modificare queste limitazioni impostando la proprietà conf_nodejs_connect.ranges.denied nel file message-processors.properties per ogni processore di messaggi. Per impostazione predefinita, questa proprietà ha il valore:

  • Edge 4.17.05 e versioni precedenti: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 e versioni successive: conf_nodejs_connect.ranges.denied= (ovvero nessuna limitazione)

Per impostare questa proprietà:

  1. Apri il file message-processor.properties in un editor. Se il file non esiste, crealo:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Imposta la proprietà come preferisci. Ad esempio, per negare l'accesso solo a localhost:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Salva le modifiche.
  4. Assicurati che il file delle proprietà appartenga all'utente "apigee":
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Riavvia il processore di messaggi:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Informazioni sul supporto dei moduli http e https

Tutte le applicazioni Node.js in esecuzione in Apigee Edge devono utilizzare il modulo http o https per ascoltare le richieste in entrata. Se implementassi uno script che non è in attesa di richieste in arrivo, lo script verrebbe semplicemente eseguito e terminerebbe.

Il metodo listen dei moduli http e https in Node.js accetta un numero di porta come parametro. Ad esempio:

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

Questo argomento "port" è obbligatorio in Node.js, ma Apigee Edge lo ignora. Il proxy API in cui viene eseguito lo script Node.js specifica l'"host virtuale" su cui è in ascolto e l'applicazione Node.js utilizza gli stessi host virtuali, proprio come qualsiasi altro proxy Apigee Edge.

Ogni ambiente in Apigee ha almeno un host virtuale. L'host virtuale definisce le impostazioni HTTP per la connessione con l'organizzazione Apigee. Tutti i proxy API in un ambiente condividono gli stessi host virtuali. Per impostazione predefinita, sono disponibili due host virtuali per ogni ambiente: default e secure. Per saperne di più, consulta Recuperare l'host virtuale e Ciclo di vita dello sviluppo dell'API.

Il comando apigeetool deploynodeapp genera un wrapper proxy Apigee Edge intorno all'applicazione Node.js. Una volta eseguito il deployment, l'applicazione Node.js rimane in ascolto sull'host virtuale predefinito definito per l'ambiente. L'URL di un'applicazione Node.js sarà sempre http://{org_name}-{env_name}.apigee.net.

Gestione delle richieste in arrivo

Come altre applicazioni Apigee Edge, se l'applicazione proxy è configurata per l'ascolto sull'host virtuale secure, accetterà le richieste in entrata utilizzando HTTPS.

Gestione delle richieste in uscita

Oltre a ricevere traffico in entrata, le applicazioni Node.js all'interno di Apigee Edge possono utilizzare i moduli http e https per effettuare richieste in uscita come qualsiasi altra applicazione Node.js. Questi moduli funzionano come sempre all'interno di Node.js.

Informazioni sul supporto del modulo TLS

Apigee Edge supporta il modulo tls di Node.js. Questo modulo utilizza OpenSSL per fornire la comunicazione di stream criptata con Transport Layer Security (TLS) e/o Secure Socket Layer (SSL). Puoi utilizzare il modulo tls per creare connessioni sicure ai servizi di backend dalle applicazioni Node.js in esecuzione su Edge.

Per capire come funziona il modulo tls su Apigee Edge, è importante capire come vengono utilizzati i virtual hosts su Apigee Edge. Ogni ambiente in Apigee ha almeno un host virtuale. L'host virtuale definisce le impostazioni HTTP per la connessione con l'organizzazione Apigee. Tutti i proxy API in un ambiente condividono gli stessi host virtuali. Per impostazione predefinita, sono disponibili due host virtuali per ogni ambiente: default e secure. Per ulteriori informazioni sugli host virtuali, vedi Recupera host virtuale e ciclo di vita dello sviluppo dell'API.

Ora vediamo come Apigee Edge gestisce la comunicazione TLS (SSL) per le richieste in entrata e in uscita nelle applicazioni Node.js:

Gestione delle richieste in arrivo

A seconda di come sono configurati gli host virtuali per la tua organizzazione, Edge offre queste opzioni:

  • Se il proxy API è configurato per rimanere in ascolto sull'host virtuale default, accetta le richieste tramite HTTP.
  • Se il proxy API è configurato per rimanere in ascolto sull'host virtuale secure, accetta richieste tramite HTTPS. L'URL si troverà nel dominio apigee.net e verrà utilizzato un certificato SSL con caratteri jolly per *.apigee.net. Se le app inviano richieste al dominio apigee.net, il certificato SSL verrà convalidato normalmente.

Gestione delle richieste in uscita

Puoi effettuare richieste in uscita con il modulo tls nello stesso modo in cui normalmente in Node.js. In sostanza, devi aggiungere chiavi e certificati lato client (file .pem) alla directory resources/node e caricarli all'interno dello script. Per informazioni sull'utilizzo del modulo tls e dei relativi metodi, consulta la documentazione del modulo Node.js tls.

Configurazione avanzata di ScriptTarget

Nella definizione di <TargetEndpoint>, l'elemento <ScriptTarget> accetta parametri facoltativi aggiuntivi oltre a <ResourceURL>. Puoi anche passare argomenti della riga di comando e variabili di ambiente a uno script Node.js utilizzando i parametri <EnvironmentVariables> e <Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>