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

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

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

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

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

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

Модуль Статус Примечания
assert Поддерживается
buffer Поддерживается
child_process Ограниченный В случае попытки запустить дочерний процесс будет выброшено исключение. Однако для запуска дочерних процессов поддерживается использование команды "fork".
cluster Неполноценный Метод 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.

Модуль Описание
доступ к голубям Этот модуль предоставляет приложениям Node.js, работающим на платформе Apigee Edge, доступ к специфическим функциям Apigee. Вы можете использовать этот модуль для: доступа и изменения переменных потока, получения данных из защищенного хранилища, а также использования служб кэширования, квот и OAuth Edge. См. также раздел «Использование модуля apigee-access» .
опора триремы Позволяет приложениям Node.js использовать преимущества функций, специфичных для Trireme. В настоящее время поддерживается только одна функция — загрузка модулей Node.js, созданных на Java. Примечание: функция loadJars не поддерживается в Edge Cloud.
трирема-кслт Представляет собой абстракцию обработки XSLT. Она специально разработана для платформы Trireme, чтобы обеспечить эффективную обработку XSLT при запуске приложений Node.js на Java.
trireme-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 Logs» в пользовательском интерфейсе управления прокси-сервером. Также можно использовать команду «apigeetool getlogs». Дополнительную информацию см. в разделе «Развертывание автономного приложения Node.js» .
  • Модули, зависящие от нативного кода, не поддерживаются.
  • Модули, зависящие от функций EcmaScript 6, таких как промисы и генераторы, не поддерживаются.
  • Флаги среды выполнения Node.js, такие как "harmony-proxies", не поддерживаются.

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

Edge for Private Cloud может ограничить доступ кода 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. Настройте свойство по своему усмотрению. Например, чтобы запретить доступ только к localhost:
    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-processor restart

Понимание поддержки модулей 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.');
});

Аргумент "port" обязателен в 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 поддерживает модуль tls для Node.js. Этот модуль использует OpenSSL для обеспечения зашифрованной потоковой передачи данных с использованием протокола Transport Layer Security (TLS) и/или Secure Socket Layer (SSL). Вы можете использовать модуль tls для создания защищенных соединений с бэкэнд-сервисами из приложений Node.js, работающих на Edge.

Чтобы понять, как работает модуль tls в Apigee Edge, важно понимать, как используются virtual hosts в Apigee Edge. В каждой среде 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.

Расширенная конфигурация целевого объекта скрипта

В определении <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>