Obsługa Edge dla modułów Node.js

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

Która wersja Node.js jest obsługiwana w Apigee Edge?

Edge obsługuje obecnie Node.js w wersji 0.10.32.

Które standardowe moduły Node.js są obsługiwane w Edge?

Użyj tej tabeli, aby określić, które standardowe moduły Node.js są uwzględnione w Edge. W niektórych przypadkach dołączone moduły są obsługiwane tylko częściowo. To moduły wbudowane w Node.js.

Część Stan Uwagi
assert Potwierdzone
buffer Potwierdzone
child_process Z ograniczeniem W przypadku podjęcia próby utworzenia podprocesu zostanie zgłoszony wyjątek. Jednak w przypadku tworzenia skryptów dolnych obsługiwana jest opcja „rozwidlenia”.
cluster Wyłączono Metoda klaster.isMaster zawsze zwraca wartość „prawda”, a inne metody nie są zaimplementowane. W każdym procesorze wiadomości Edge wdrażana jest 1 kopia każdego skryptu Node.js.
crypto Potwierdzone
dns Potwierdzone
domain Potwierdzone
dgram Z ograniczeniem Ze względu na naszą architekturę sieci aplikacje Node.js w środowisku Apigee nie będą miały dostępu do usług przez internet za pomocą protokołu UDP.
events Potwierdzone
fs Z ograniczeniem Dostęp do systemu plików jest ograniczony do katalogu, w którym uruchomiono skrypt: katalogu /resources/node. Skrypty Node.js mogą odczytywać i zapisywać pliki w tym katalogu, na przykład w obszarze tymczasowym, ale nie ma gwarancji co do tego, jak długo pliki będą przechowywane.
http Potwierdzone Wirtualny host i ścieżka dla żądań przychodzących są określone w serwerze proxy interfejsu API, a nie w module HTTP. Więcej informacji znajdziesz w opisie obsługi modułów http i https.
https Potwierdzone Utworzenie serwera „https” działa tak samo jak serwer „http”. Więcej informacji znajdziesz w sekcji Obsługa modułów http i https.
module Potwierdzone
net Z ograniczeniem Próby nasłuchiwania przychodzących połączeń TCP spowodują wygenerowanie wyjątku.
path Potwierdzone
module Potwierdzone
process Częściowa obsługa Funkcja do modyfikowania identyfikatora użytkownika, członkostwa w grupie i katalogu roboczego nie jest obsługiwana.
punycode Potwierdzone
querystring Potwierdzone
readline Wyłączono Nie ma standardowych danych wejściowych dla skryptów działających w Apigee Edge.
repl Wyłączono Nie ma standardowych danych wejściowych dla skryptów działających w Apigee Edge.
module Uwzględniono
STDIO Potwierdzone

Standardowe dane wyjściowe i błędy są kierowane do pliku logu w infrastrukturze Apigee Edge. Możesz wyświetlić te logi, klikając przycisk Logi Node.js w interfejsie zarządzania Apigee Edge dla serwera proxy interfejsu API.

Nie ma standardowych danych wejściowych dla skryptów działających w Apigee Edge. Możesz jednak przekazywać argumenty za pomocą elementu ScriptTarget w elemencie TargetEndpoint. Więcej informacji znajdziesz w artykule Zaawansowana konfiguracja ScriptTarget.

stream Potwierdzone
string_decoder Potwierdzone
timers Uwzględniono
tls Potwierdzone Parametry TLS działają tak samo jak w zwykłym Node.js. Więcej informacji znajdziesz w artykule Używanie modułu TLS (SSL) Node.js w Apigee Edge.
tty Wyłączono Nie ma standardowych danych wejściowych dla skryptów działających w Apigee Edge.
url Potwierdzone
util Potwierdzone
vm Potwierdzone
zlib Potwierdzone

Dodatkowe obsługiwane moduły

Ta sekcja zawiera dodatkowe moduły, które nie są obsługiwane w standardowym środowisku Node.js, ale są obsługiwane przez Trireme i Trireme działające w Apigee Edge. Trireme to kontener typu open source Node.js, który działa w Apigee Edge. Skrypt służy do uruchamiania skryptów Node.js w maszynie wirtualnej Java (JVM). Wszystkie te moduły są dostępne w NPM.

Część Opis
apigee-access Zezwala aplikacjom Node.js działającym na platformie Apigee Edge na dostęp do funkcji specyficznych dla Apigee. Za pomocą tego modułu możesz uzyskiwać dostęp do zmiennych przepływu i modyfikować je, pobierać dane z bezpiecznego magazynu oraz korzystać z usług tymczasowego przechowywania danych na serwerach brzegowych, limitów i usług OAuth. Zapoznaj się też z informacjami o korzystaniu z modułu dostępu Apigee.
obsługa-trireme Pozwala aplikacjom Node.js na korzystanie z funkcji specyficznych dla Trireme. Obecnie obsługiwana jest tylko jedna funkcja – wczytywanie modułów Node.js wbudowanych w Javę. Uwaga: wczytywanieJars nie jest obsługiwane w Edge Cloud.
trireme-xlst Przedstawia abstrakcję przetwarzania XLST. Został on zaprojektowany specjalnie z myślą o platformie Trireme, aby umożliwić sprawne przetwarzanie arkuszy CSS w przypadku aplikacji Node.js działających w Javie.
trireme-jdbc Zapewnia dostęp do JDBC z Node.js. Uwaga: nieobsługiwane w Edge Cloud. W przypadku chmury prywatnej Edge możesz umieścić pliki JDPC JAR w ścieżce klasy i użyć tego modułu.

Obsługa często używanych modułów Node.js

Ograniczenia dotyczące skryptów Node.js

Pamiętaj jednak, że Edge nakłada na skrypty Node.js pewne ograniczenia, takie jak:

  • Aplikacje Node.js w środowisku Apigee Edge nie mają dostępu do usług w internecie przez UDP ze względu na architekturę sieci brzegowej.
  • Dostęp do systemu plików jest ograniczony do katalogu, w którym uruchomiono skrypt Node.js: katalogu /resources/node. Skrypty Node.js mogą odczytywać i zapisywać pliki w tym katalogu, na przykład w obszarze tymczasowym, ale nie ma gwarancji co do czasu trwałego ich przechowywania.
  • Próby nasłuchiwania przychodzących połączeń TCP powodują wygenerowanie wyjątku.
  • Funkcja do modyfikowania identyfikatora użytkownika, członkostwa w grupie i katalogu roboczego nie jest obsługiwana.
  • Standardowe dane wejściowe ograniczają się do przekazywania argumentów z użyciem elementu ScriptTarget elementu TargetEndpoint. Więcej informacji znajdziesz w artykule Zaawansowana konfiguracja ScriptTarget.
  • W przypadku standardowych danych wyjściowych obowiązuje ograniczenie do używania przycisku Logi Node.js w interfejsie zarządzania brzegiem dla serwera proxy. Możesz też użyć polecenia „apigeetool getlogs”. Więcej informacji znajdziesz w artykule o wdrażaniu samodzielnej aplikacji Node.js.
  • Moduły, które zależą od kodu natywnego, nie są obsługiwane.
  • Moduły, które zależą od funkcji EcmaScript 6, takie jak Obietnice i Generatory, nie są obsługiwane.
  • Flagi środowiska wykonawczego Node.js, takie jak „harmony-proxies”, nie są obsługiwane.

Ustawianie ograniczeń połączeń IP w Edge dla Private Cloud

Edge dla chmury prywatnej może ograniczyć kodowi Node.js dostęp do adresów IP zaczynających się od „10”., „192.168” i localhost. Jeśli spróbujesz uzyskać dostęp do takiego adresu IP, w formularzu pojawi się błąd:

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

Te ograniczenia możesz modyfikować, ustawiając właściwość conf_nodejs_connect.ranges.denied w pliku message-processors.properties każdego podmiotu przetwarzającego wiadomości. Domyślnie ta właściwość ma wartość:

  • Edge 4.17.05 i wcześniejsze: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Brzegowy 4.17.09 i nowsze: conf_nodejs_connect.ranges.denied= (oznacza brak ograniczeń)

Aby ustawić tę właściwość:

  1. Otwórz plik message-processor.properties w edytorze. Jeśli plik nie istnieje, utwórz go:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Ustaw usługę zgodnie z oczekiwaniami. Aby na przykład odmówić dostępu tylko do hosta lokalnego:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Zapisz zmiany.
  4. Sprawdź, czy plik właściwości należy do użytkownika „apigee”:
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Ponownie uruchom procesor wiadomości:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service Edge-message-processor restart

Omówienie obsługi modułów http i https

Wszystkie aplikacje Node.js działające w Apigee Edge muszą używać modułu http lub https do nasłuchiwania żądań przychodzących. Jeśli wdrożysz skrypt, który nie nasłuchuje żądań przychodzących, po prostu zostanie uruchomiony i zamknięty.

Metoda listen modułów http i https w Node.js przyjmuje jako parametr numer portu. Na przykład:

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

Ten argument „port” jest wymagany w Node.js, ale Apigee Edge go ignoruje. Zamiast tego serwer proxy interfejsu API, na którym działa skrypt Node.js, określa „hosta wirtualnego”, na którym nasłuchuje. Aplikacja Node.js używa tych samych hostów wirtualnych, tak jak każdy inny serwer proxy Apigee Edge.

Każde środowisko w Apigee ma co najmniej 1 hosta wirtualnego. Host wirtualny określa ustawienia HTTP połączenia z organizacją Apigee. Wszystkie serwery proxy interfejsów API w środowisku mają te same hosty wirtualne. Domyślnie w każdym środowisku dostępne są 2 hosty wirtualne: default i secure. Więcej informacji znajdziesz w artykułach o pobieraniu hosta wirtualnego i cyklu tworzenia interfejsów API.

Polecenie apigeetool deploynodeapp generuje opakowanie Apigee Edge serwera proxy wokół aplikacji Node.js. Po wdrożeniu aplikacja Node.js nasłuchuje na domyślnym hoście wirtualnym zdefiniowanym dla środowiska. Adresem URL aplikacji Node.js będzie zawsze http://{org_name}-{env_name}.apigee.net.

Obsługa żądań przychodzących

Podobnie jak inne aplikacje Apigee Edge, jeśli aplikacja proxy jest skonfigurowana pod kątem nasłuchiwania na hoście wirtualnym secure, będzie przyjmować żądania przychodzące przy użyciu protokołu HTTPS.

Obsługa żądań wychodzących

Oprócz odbierania ruchu przychodzącego aplikacje Node.js w Apigee Edge mogą używać modułów http i https do wysyłania żądań wychodzących tak jak każda inna aplikacja Node.js. Działają one tak samo jak w środowisku Node.js.

Obsługa modułu TLS

Apigee Edge obsługuje moduł tls Node.js. Ten moduł korzysta z OpenSSL do zapewniania szyfrowanej komunikacji strumienia przy użyciu protokołu Transport Layer Security (TLS) lub Secure Socket Layer (SSL). Moduł tls umożliwia tworzenie bezpiecznych połączeń z usługami backendu z aplikacji Node.js działających w Edge.

Aby zrozumieć, jak moduł tls działa w Apigee Edge, musisz wiedzieć, jak używane są w niej elementy virtual hosts. Każde środowisko w Apigee ma co najmniej 1 hosta wirtualnego. Host wirtualny określa ustawienia HTTP połączenia z organizacją Apigee. Wszystkie serwery proxy interfejsów API w środowisku mają te same hosty wirtualne. Domyślnie w każdym środowisku dostępne są 2 hosty wirtualne: default i secure. Więcej informacji o hostach wirtualnych znajdziesz w artykułach Pobieranie hosta wirtualnego i Cykl życia tworzenia interfejsów API.

Przyjrzyjmy się teraz, jak Apigee Edge obsługuje komunikację TLS (SSL) w przypadku żądań przychodzących i wychodzących w aplikacjach Node.js:

Obsługa żądań przychodzących

W zależności od konfiguracji hostów wirtualnych w organizacji Edge udostępnia te opcje:

  • Jeśli serwer proxy interfejsu API jest skonfigurowany pod kątem nasłuchiwania na hoście wirtualnym default, akceptuje żądania przez HTTP.
  • Jeśli serwer proxy interfejsu API jest skonfigurowany pod kątem nasłuchiwania na hoście wirtualnym secure, akceptuje żądania przez HTTPS. Adres URL będzie znajdować się pod domeną apigee.net i będzie używany symbol wieloznaczny SSL dla domeny *.apigee.net. Jeśli aplikacje wysyłają żądania do domeny apigee.net, certyfikat SSL zostanie zweryfikowany w normalny sposób.

Obsługa żądań wychodzących

Żądania wychodzące możesz wysyłać za pomocą modułu tls w taki sam sposób jak w środowisku Node.js. Mówiąc w skrócie, musisz dodać klucze i certyfikaty po stronie klienta (pliki .pem) do katalogu resources/node i wczytać je w skrypcie. Informacje o korzystaniu z modułu tls i jego metod znajdziesz w dokumentacji modułu tls Node.js.

Zaawansowana konfiguracja ScriptTarget

W definicji <TargetEndpoint> element <ScriptTarget> przyjmuje dodatkowe parametry opcjonalne oprócz <ResourceURL>. Możesz też przekazać argumenty wiersza poleceń i zmienne środowiskowe do skryptu Node.js za pomocą parametrów <EnvironmentVariables> i <Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>