Apigee Edge でサポートされている Node.js のバージョン
現在、Edge は Node.js 0.10.32 をサポートしています。
Edge でサポートされている Node.js 標準モジュール
どの Node.js 標準モジュールが Edge に含まれているかについては、以下の表をご覧ください。部分的にしかサポートされていないモジュールもあります。以下が Node.js に組み込まれているモジュールです。モジュール | ステータス | 注 |
---|---|---|
assert |
サポート対象 | |
buffer |
サポート対象 | |
child_process |
制限付き | 子プロセスを生成しようとすると、例外が発生します。ただし、サブスクリプトを生成するための「fork」はサポートされます。 |
cluster |
無効 | cluster.isMaster は常に true を返し、他のメソッドは未実装です。 各 Node.js スクリプトのコピー 1 つが、各 Edge メッセージ プロセッサにデプロイされます。 |
crypto |
サポート対象 | |
dns |
サポート対象 | |
domain |
サポート対象 | |
dgram |
制限付き | Apigee 環境の Node.js アプリケーションは、ネットワーク アーキテクチャが理由で、UDP 経由でインターネット上のサービスにアクセスできません。 |
events |
サポート対象 | |
fs |
制限付き | ファイル システムへのアクセスは、スクリプトが起動されたディレクトリである /resources/node ディレクトリに限定されています。Node.js スクリプトでは、一時的なスクラッチ領域などとして、このディレクトリ内のファイルの読み取り、書き込みができます。ただし、ファイルが保持される期間は保証されません。 |
http |
サポート対象 | 受信リクエストの仮想ホストとパスは、HTTP モジュールではなく、API プロキシで指定されます。詳細については、http モジュールおよび https モジュールのサポートについてをご覧ください。 |
https |
サポート対象 | 「https」サーバーの作成は「http」サーバーとまったく同じです。詳細については、http モジュールおよび https モジュールのサポートについてをご覧ください。 |
module |
サポート対象 | |
net |
制限付き | TCP 受信接続をリッスンしようとすると、例外が生成されます。 |
path |
サポート対象 | |
module |
サポート対象 | |
process |
部分的にサポート | ユーザー ID、グループ メンバーシップ、作業ディレクトリを操作する機能は、サポートされていません。 |
punycode |
サポート対象 | |
querystring |
サポート対象 | |
readline |
無効 | Apigee Edge で実行されているスクリプトには標準入力がありません。 |
repl |
無効 | Apigee Edge で実行されているスクリプトには標準入力がありません。 |
module |
組み込み | |
STDIO |
サポート対象 |
標準出力と標準エラー出力は Apigee Edge インフラストラクチャ内のログファイルへ送られます。これらのログは、API プロキシの Apigee Edge 管理 UI の [Node.js Logs] ボタンをクリックすると表示できます。 Apigee Edge で実行されているスクリプトには標準入力がありません。ただし、TargetEndpoint の ScriptTarget 要素で引数を渡すことはできます。詳細については、ScriptTarget の高度な構成をご覧ください。 |
stream |
サポート対象 | |
string_decoder |
サポート対象 | |
timers |
組み込み | |
tls |
サポート対象 | Transport Layer Security(TLS)のパラメータは、基本的に通常の Node.js と同じように動作します。詳細については、Apigee Edge での TLS(SSL)Node.js モジュールの使用をご覧ください。 |
tty |
無効 | Apigee Edge で実行されているスクリプトには標準入力がありません。 |
url |
サポート対象 | |
util |
サポート対象 | |
vm |
サポート対象 | |
zlib |
サポート対象 |
サポートされているその他のモジュール
このセクションでは、標準の Node.js ではサポートされていないものの、Trireme と Apigee Edge で実行されている Trireme ではサポートされているその他のモジュールについて説明します。Trireme は、Apigee Edge で実行されているオープンソースの Node.js コンテナです。Java 仮想マシン(JVM)の中で Node.js スクリプトが動作するよう設計されています。以下のモジュールはすべて NPM で入手できます。
モジュール | 説明 |
---|---|
apigee-access | このモジュールにより、Apigee Edge プラットフォームで実行されている Node.js アプリケーションが Apigee 固有の機能にアクセスできます。このモジュールを使用すると、フロー変数にアクセスして変更したり、セキュアストアからデータを取得したり、Edge キャッシュ、割り当て、および OAuth サービスを使用したりできます。apigee-access モジュールの使用もご覧ください。 |
trireme-support | Node.js アプリケーションで Trireme 固有の機能を利用できます。現在サポートされている唯一の機能は、Java で作成された Node.js モジュールの読み込みです。注: loadJars は、Edge Cloud ではサポートされていません。 |
trireme-xslt | XLST 処理を抽象化します。Node.js アプリケーションが Java で実行されている場合に、Trireme プラットフォームで XSLT を効率的に処理するように設計されています。 |
trireme-jdbc | Node.js から JDBC へのアクセスを提供します。注: Edge Cloud ではサポートされていません。Edge Private Cloud の場合は、クラスパスに JDPC JAR ファイルを置き、このモジュールを使用できます。 |
一般的に使用されている Node.js モジュールのサポート
Node.js スクリプトに対する制限
Edge では Node.js スクリプトに次のような一定の制限があるので注意してください。
- Apigee Edge 環境の Node.js アプリケーションでは、Edge ネットワーク アーキテクチャが理由で、UDP を使ってインターネット上のサービスにアクセスできません。
- ファイル システムへのアクセスは、Node.js スクリプトが起動されたディレクトリ /resources/node に限定されています。Node.js スクリプトでは、一時的なスクラッチ領域などとして、このディレクトリ内のファイルの読み取り、書き込みができます。ただし、ファイルが保持される期間は保証されません。
- TCP 受信接続をリッスンしようとすると、例外が生成されます。
- ユーザー ID、グループ メンバーシップ、作業ディレクトリを操作する機能は、サポートされていません。
- 標準入力については、TargetEndpoint の ScriptTarget 要素による引数の引き渡しに制限されています。詳細については、ScriptTarget の高度な構成をご覧ください。
- 標準出力については、プロキシの Edge 管理 UI での [Node.js Logs] ボタンの使用に制限されています。また、「apigeetool getlogs」コマンドも使えます。詳細については、スタンドアロン Node.js アプリのデプロイをご覧ください。
- ネイティブ コードに依存するモジュールはサポートされていません。
- Promise や Generator などの ECMAScript 6 の機能に依存したモジュールはサポートされません。
- 「harmony-proxies」などの Node.js のランタイム フラグはサポートされていません。
Edge for Private Cloud での IP 接続制限の設定
Edge for Private Cloud では、Node.js のコードが「10.」あるいは「192.168.」から始まる IP アドレス、およびローカルホストからアクセスするのを制限できます。これらの IP アドレスからアクセスしようとすると、次の形のエラーが発生します。
{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }
これらの制限を変更するには、各 Message Processor の message-processors.properties ファイルで conf_nodejs_connect.ranges.denied プロパティを設定します。デフォルト値は以下のとおりです。
- 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 - 必要なプロパティを設定します。たとえば、ローカルホストからのアクセスのみ拒否する場合は次のとおりです。
conf_nodejs_connect.ranges.denied=127.0.0.1/32 - 変更を保存します。
- プロパティ ファイルの所有者を「apigee」ユーザーにします。
> chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties - Message Processor を再起動します。
> /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart
http モジュールおよび https モジュールのサポートについて
Apigee Edge で実行されているすべての Node.js アプリケーションが着信リクエストをリッスンするには、http
モジュールまたは https
モジュールを使用する必要があります。受信リクエストをリッスンしないスクリプトをデプロイする場合、単に実行され、終了します。
Node.js の http
モジュールと https
モジュールの listen
メソッドでは、パラメータとしてポート番号をとります。例:
svr.listen(process.env.PORT || 9000, function() { console.log('The server is running.'); });
「port」引数は、Node.js では必要ですが、Apigee Edge では無視されます。そのかわり、Node.js スクリプトが実行される API プロキシは、リッスンする「仮想ホスト」を指定し、その Node.js アプリケーションは、他の Apigee Edge プロキシと同じように、同じ仮想ホストを使います。
Apigee のすべての環境には、少なくとも 1 つの仮想ホストがあります。仮想ホストは、Apigee 組織と接続するための HTTP 設定を定義します。環境内のすべての API プロキシは同じ仮想ホストを共有します。デフォルトでは、環境ごとに default
と secure
の 2 つの仮想ホストを使用できます。詳細については、Get Virtual Host と API の開発ライフサイクルをご覧ください。
apigeetool deploynodeapp
コマンドでは、Node.js アプリケーションの周りに Apigee Edge プロキシ ラッパーを生成します。デプロイすると、Node.js アプリケーションは、その環境に対して定義されたデフォルト仮想ホストをリッスンします。Node.js アプリケーションの URL は常に http://{org_name}-{env_name}.apigee.net
になります。
受信リクエストの処理
他の Apigee Edge アプリケーションと同様に、secure
仮想ホストをリッスンするように設定されている場合は、プロキシ アプリケーションでは HTTPS を使用して受信リクエストを受け入れます。
送信リクエストの処理
受信トラフィックの受信の他、Apigee Edge 内の Node.js アプリケーションは、他の Node.js アプリケーションと同様に、http
モジュールと https
モジュールを使用して、送信リクエストを行います。これらのモジュールは、常に Node.js 内で実行されているように機能します。
tls モジュールのサポートについて
Apigee Edge では Node.js tls モジュールがサポートされています。このモジュールでは OpenSSL を使用して、Transport Layer Security(TLS)とセキュア ソケット レイヤー(SSL)の両方またはどちらか一方の暗号化ストリーム通信を提供しています。tls
モジュールを使用すると、Edge で実行されている Node.js アプリケーションからバックエンド サービスへのセキュリティで保護された接続を作成できます。
Apigee Edge での tls
モジュールの機能を理解するには、Apigee Edge での virtual hosts
の使用方法を理解することが重要です。Apigee のすべての環境には、少なくとも 1 つの仮想ホストがあります。仮想ホストは、Apigee 組織と接続するための HTTP 設定を定義します。環境内のすべての API プロキシは同じ仮想ホストを共有します。デフォルトでは、環境ごとに default
と secure
の 2 つの仮想ホストを使用できます。仮想ホストの詳細については、Get Virtual Host と API の開発ライフサイクルをご覧ください。
次に、Apigee Edge が Node.js アプリケーションで受信あるいは送信するリクエストのための TLS(SSL)通信を処理する方法について確認します。
受信リクエストの処理
Edge では、組織での仮想ホストの構成方法に応じて、次の選択肢があります。
- API プロキシが
default
仮想ホストをリッスンするように構成されている場合は、このプロキシでは HTTP を介して受信リクエストを受け入れます。 - API プロキシが
secure
仮想ホストをリッスンするように構成されている場合は、このプロキシでは HTTPS を介して受信リクエストを受け入れます。URL はapigee.net
ドメインの URL になり、*.apigee.net
のワイルドカード SSL 証明書が使用されます。アプリがapigee.net
ドメインに対してリクエストを行う限り、SSL 証明書は正常に検証されます。
送信リクエストの処理
Node.js で通常行うのと同じ方法で tls
モジュールを使用して送信リクエストを行えます。基本的には、クライアント側の鍵と証明書(.pem
ファイル)を resources/node
ディレクトリに追加してスクリプト内に読み込む必要があります。tls
モジュールとそのメソッドの使用方法については、Node.js の tls モジュールのドキュメントをご覧ください。
ScriptTarget の高度な構成
<TargetEndpoint name="default"> <ScriptTarget> <ResourceURL>node://hello.js</ResourceURL> <EnvironmentVariables> <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> </EnvironmentVariables> <Arguments> <Argument>ARG</Argument> </Arguments> </ScriptTarget> </TargetEndpoint>