Понимание поддержки Edge для модулей Node.js

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Какая версия Node.js поддерживается в Apigee Edge?

Edge в настоящее время поддерживает Node.js 0.10.32.

Какие стандартные модули Node.js поддерживаются в Edge?

Используйте следующую таблицу, чтобы определить, какие стандартные модули Node.js включены в Edge. В некоторых случаях включенные модули поддерживаются лишь частично. Это модули, встроенные в Node.js.

Модуль Статус Примечания
assert Поддерживается
buffer Поддерживается
child_process Ограниченный Исключение будет выдано при попытке запустить подпроцесс. Однако для создания дополнительных сценариев поддерживается «вилка».
cluster Неполноценный Метод кластер.isMaster всегда возвращает true, а другие методы не реализуются. Одна копия каждого сценария Node.js развертывается на каждом процессоре сообщений Edge.
crypto Поддерживается
dns Поддерживается
domain Поддерживается
dgram Ограниченный Приложения Node.js в среде Apigee не смогут получать доступ к сервисам в Интернете через UDP из-за нашей сетевой архитектуры.
events Поддерживается
fs Ограниченный Доступ к файловой системе ограничен каталогом, в котором был запущен сценарий: каталогом /resources/node . Скрипты Node.js могут читать и записывать файлы в этом каталоге, например, в качестве временной временной области, но нет никаких гарантий относительно того, как долго файлы будут сохраняться.
http Поддерживается Виртуальный хост и путь для входящих запросов указываются в API-прокси, а не в HTTP-модуле. Дополнительную информацию см. в разделе « Основы поддержки модулей http и https ».
https Поддерживается Создание сервера «https» ведет себя идентично созданию сервера «http». Дополнительную информацию см. в разделе « Основы поддержки модулей http и https ».
module Поддерживается
net Ограниченный Попытки прослушать входящие TCP-соединения вызовут исключение.
path Поддерживается
module Поддерживается
process Частичная поддержка Функциональность по управлению идентификатором пользователя, членством в группах и рабочим каталогом не поддерживается.
punycode Поддерживается
querystring Поддерживается
readline Неполноценный Для сценариев, работающих в Apigee Edge, не существует стандартного ввода.
repl Неполноценный Для сценариев, работающих в Apigee Edge, не существует стандартного ввода.
module Включено
STDIO Поддерживается

Стандартный вывод и ошибки перенаправляются в файл журнала в инфраструктуре Apigee Edge. Вы можете просмотреть эти журналы, нажав кнопку «Журналы Node.js» в пользовательском интерфейсе управления Apigee Edge для вашего прокси API.

Для сценариев, работающих в Apigee Edge, не существует стандартного ввода. Однако вы можете передавать аргументы, используя элемент ScriptTarget TargetEndpoint. Дополнительные сведения см. в разделе Расширенная конфигурация ScriptTarget .

stream Поддерживается
string_decoder Поддерживается
timers Включено
tls Поддерживается Параметры Transport Layer Security (TLS) работают в основном так же, как и в обычном Node.js. Подробности см. в разделе Использование модуля TLS (SSL) Node.js в Apigee Edge .
tty Неполноценный Для сценариев, работающих в Apigee Edge, не существует стандартного ввода.
url Поддерживается
util Поддерживается
vm Поддерживается
zlib Поддерживается

Дополнительные поддерживаемые модули

В этом разделе перечислены дополнительные модули, которые не поддерживаются в стандартном Node.js, но поддерживаются Trireme и Trireme, работающими на Apigee Edge. Trireme — это контейнер Node.js с открытым исходным кодом, работающий на Apigee Edge. Он предназначен для запуска сценариев Node.js внутри виртуальной машины Java (JVM). Все эти модули доступны на NPM.

Модуль Описание
Apigee-доступ Предоставляет приложениям Node.js, работающим на платформе Apigee Edge, доступ к специфичным для Apigee функциям. Вы можете использовать этот модуль для доступа и изменения переменных потока, получения данных из безопасного хранилища, а также использования кэша Edge, квот и служб OAuth. См. также Использование модуля apigee-access .
трирема-поддержка Позволяет приложениям Node.js использовать преимущества функций, специфичных для Trireme. В настоящее время поддерживается только одна функция — загрузка модулей Node.js, созданных на Java. Примечание. loadJars не поддерживается в Edge Cloud.
трирема-xslt Представляет абстракцию обработки XLST. Он специально разработан для платформы Trireme, чтобы обеспечить эффективную обработку XSLT при запуске приложений Node.js на Java.
трирема-jdbc Предоставляет доступ к JDBC из Node.js. Примечание. Не поддерживается в Edge Cloud. Для Edge Private Cloud вы можете поместить JAR-файлы JDPC в путь к классам и использовать этот модуль.

Поддержка часто используемых модулей Node.js.

Ограничения на сценарии Node.js

Однако обратите внимание, что Edge накладывает определенные ограничения на сценарии Node.js, например следующие:

  • Приложения Node.js в среде Apigee Edge не могут получить доступ к сервисам в Интернете через UDP из-за сетевой архитектуры Edge.
  • Доступ к файловой системе ограничен каталогом, в котором был запущен сценарий Node.js: каталогом /resources/node. Скрипты Node.js могут читать и записывать файлы в этом каталоге, например, в качестве временной временной области, но нет никаких гарантий относительно того, как долго файлы будут сохраняться.
  • Попытки прослушать входящие TCP-соединения создают исключение.
  • Функциональность по управлению идентификатором пользователя, членством в группах и рабочим каталогом не поддерживается.
  • Для стандартного ввода вы ограничены передачей аргументов с помощью элемента ScriptTarget TargetEndpoint. Дополнительные сведения см. в разделе Расширенная конфигурация ScriptTarget .
  • Для стандартного вывода вы ограничены использованием кнопки «Журналы Node.js» в пользовательском интерфейсе управления Edge для вашего прокси. Вы также можете использовать команду «apigeetool getlogs». Дополнительные сведения см. в разделе «Развертывание автономного приложения Node.js» .
  • Модули, зависящие от собственного кода, не поддерживаются.
  • Модули, зависящие от функций EcmaScript 6, таких как обещания и генераторы, не поддерживаются.
  • Флаги времени выполнения Node.js, такие как «harmony-proxy», не поддерживаются.

Настройка ограничений IP-подключений в Edge для частного облака

Edge для частного облака может ограничить доступ кода Node.js к IP-адресам, начинающимся с «10.», «192.168» и localhost. Если вы попытаетесь получить доступ к этим IP-адресам, вы увидите ошибку в форме:

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

Вы можете изменить эти ограничения, установив свойство conf_nodejs_connect.ranges.denied в файле message-processors.properties для каждого процессора сообщений. По умолчанию это свойство имеет значение:

  • Edge 4.17.05 и более ранние версии : conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32.
  • Edge 4.17.09 и более поздние версии : conf_nodejs_connect.ranges.denied= (что означает отсутствие ограничений).

Чтобы установить это свойство:

  1. Откройте файл message-processor.properties в редакторе. Если файл не существует, создайте его:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Установите свойство по желанию. Например, чтобы запретить доступ только к локальному хосту:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Сохраните изменения.
  4. Убедитесь, что файл свойств принадлежит пользователю apigee:
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Перезапустите процессор сообщений:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service перезапуск процессора Edge-message

Понимание поддержки модулей http и https.

Все приложения Node.js, работающие в Apigee Edge, должны использовать модуль http или https для прослушивания входящих запросов. Если бы вы развернули сценарий, который не прослушивает входящие запросы, он бы просто выполнился и завершил работу.

Метод listen модулей http и https в Node.js принимает номер порта в качестве параметра. Например:

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

Этот аргумент «порт» необходим в Node.js, но Apigee Edge игнорирует этот параметр. Вместо этого прокси-сервер API, на котором выполняется сценарий Node.js, указывает «виртуальный хост», который он прослушивает, и приложение Node.js использует те же виртуальные хосты, как и любой другой прокси-сервер Apigee Edge.

В каждой среде Apigee есть хотя бы один виртуальный хост. Виртуальный хост определяет настройки HTTP для соединения с организацией Apigee. Все прокси API в среде используют одни и те же виртуальные хосты. По умолчанию для каждой среды доступны два виртуальных хоста: default и secure . Дополнительные сведения см. в разделе Получение виртуального хоста и жизненный цикл разработки API .

Команда apigeetool deploynodeapp создает прокси-оболочку Apigee Edge для приложения Node.js. При развертывании приложение Node.js прослушивает виртуальный хост по умолчанию, определенный для среды. URL-адрес приложения Node.js всегда будет http://{org_name}-{env_name}.apigee.net .

Обработка входящих запросов

Как и другие приложения Apigee Edge, если прокси-приложение настроено на прослушивание secure виртуального хоста, оно будет принимать входящие запросы по протоколу HTTPS.

Обработка исходящих запросов

Помимо получения входящего трафика, приложения Node.js внутри Apigee Edge могут использовать модули http и https для выполнения исходящих запросов, как и любое другое приложение Node.js. Эти модули работают так же, как и всегда внутри Node.js.

Понимание поддержки модуля tls

Apigee Edge поддерживает модуль Node.js tls . Этот модуль использует OpenSSL для обеспечения зашифрованной потоковой передачи данных Transport Layer Security (TLS) и/или Secure Socket Layer (SSL). Вы можете использовать модуль tls для создания безопасных подключений к серверным службам из приложений Node.js, работающих на Edge.

Чтобы понять, как модуль tls работает в Apigee Edge, важно понять, как в Apigee Edge используются virtual hosts . В каждой среде Apigee есть хотя бы один виртуальный хост. Виртуальный хост определяет настройки HTTP для соединения с организацией Apigee. Все прокси API в среде используют одни и те же виртуальные хосты. По умолчанию для каждой среды доступны два виртуальных хоста: default и secure . Дополнительные сведения о виртуальных хостах см. в разделе Получение виртуального хоста и жизненный цикл разработки API .

Теперь давайте посмотрим, как Apigee Edge обрабатывает связь TLS (SSL) для входящих и исходящих запросов в приложениях Node.js:

Обработка входящих запросов

В зависимости от того, как виртуальные хосты настроены для вашей организации, Edge предоставляет следующие параметры:

  • Если прокси-сервер API настроен на прослушивание виртуального хоста default , он принимает запросы по HTTP.
  • Если прокси-сервер API настроен на прослушивание secure виртуального хоста, он принимает запросы по HTTPS. URL-адрес будет находиться в домене apigee.net , и будет использоваться подстановочный SSL-сертификат для *.apigee.net . Пока приложения отправляют запросы к домену apigee.net , сертификат SSL будет проверяться нормально.

Обработка исходящих запросов

Вы можете отправлять исходящие запросы с помощью модуля tls так же, как обычно в Node.js. По сути, вам нужно добавить ключи и сертификаты на стороне клиента (файлы .pem ) в каталог resources/node и загрузить их в свой скрипт. Информацию об использовании модуля tls и его методов см. в документации модуля tls Node.js.

Расширенная конфигурация ScriptTarget

В определении <TargetEndpoint> элемент <ScriptTarget> принимает дополнительные необязательные параметры помимо <ResourceURL>. Вы также можете передать аргументы командной строки и переменные среды в сценарий Node.js, используя параметры <EnvironmentVariables> и <Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>