Вы просматриваете документацию 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= (что означает отсутствие ограничений)
Чтобы установить это свойство:
- Откройте файл message-processor.properties в текстовом редакторе. Если файл не существует, создайте его:
> vi /<inst_root>/apigee/customer/application/message-processor.properties - Настройте свойство по своему усмотрению. Например, чтобы запретить доступ только к localhost:
conf_nodejs_connect.ranges.denied=127.0.0.1/32 - Сохраните изменения.
- Убедитесь, что файл свойств принадлежит пользователю 'apigee':
> chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties - Перезапустите обработчик сообщений:
> /<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 name="default"> <ScriptTarget> <ResourceURL>node://hello.js</ResourceURL> <EnvironmentVariables> <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> </EnvironmentVariables> <Arguments> <Argument>ARG</Argument> </Arguments> </ScriptTarget> </TargetEndpoint>