Send Docs Feedback

Note: Most user interface tasks can be performed in Edge Classic or the New Edge experience. For an overview, getting started topics, and release notes specific to the New Edge experience, see the docs.

Node.js モジュールの Edge サポートについて

Apigee Edge でサポートされている Node.js のバージョン

Edge では現在 Node.js 0.10.32 がサポートされています。

Edge でサポートされている Node.js 標準モジュール

次の表で、Edge に含まれている Node.js の標準モジュールを特定できます。部分的にサポートされているのみのモジュールもあります。表に記載されているモジュールは、Node.js に組み込まれています。 

モジュール Status 注記
assert サポート  
buffer サポート  
child_process 制限付き サブプロセスを作成 (spawn) しようとすると、例外がスローされます。ただし、サブスクリプトを作成 (spawn) するためには、「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 サポート トランスポート層セキュリティ (TLS) のパラメータは、基本的には、通常の Node.js での機能と同様に動作します。詳細については、「Apigee Edge でのTLS (SSL) Node.js モジュールの使用」を参照してください。
tty 使用不可 Apigee Edge で実行されているスクリプトには標準入力がありません。
url サポート  
util サポート  
vm サポート  
zlib サポート  

サポートされているその他のモジュール

このセクションでは、標準の Node.js ではサポートされていないものの、Apigee Edge で実行されている Trireme と 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 モジュールのサポート

Apigee Edge の Node.js には Express などの複数の事前にインストール済みの Node.js モジュールがあります。これらのモジュールは、Node.js プロジェクトを使用してアップロードすることなく使用できます。ただし、最新であることが保証されていないため、これらのモジュールの使用はお勧めしません。そのため、これらのモジュールについては文書化されていません。 

Node.js スクリプトに対する制限

Edge では Node.js スクリプトに次のような一定の制限が課されているので注意してください。

  • Apigee Edge 環境の Node.js アプリケーションでは、Edge ネットワークアーキテクチャのため、UDP を介してインターネット上のサービスにアクセスできません。
  • ファイルシステムへのアクセスは、スクリプトが起動されたディレクトリである /resources/node ディレクトリに制限されます。Node.js スクリプトでは、一時的なスクラッチ領域などとして、このディレクトリ内のファイルを読み取り、書き込みを行うことができます。ただし、ファイルが保持される期間は保証されません。
  • TCP 受信接続をリッスンしようとすると、例外が生成されます。
  • ユーザー ID、グループメンバーシップ、および作業ディレクトリを操作する機能は、サポートされていません。
  • 標準入力では、TargetEndpoint の ScriptTarget 要素を使用して引数の引き渡しが制限されます。詳細については、「ScriptTarget の高度な構成」を参照してください。
     
  • 標準出力では、プロキシの Edge 管理 UI の「Node.js Logs」ボタンの使用が制限されます。また、「apigeetool getlogs」コマンドも使用できます。詳細については、「スタンドアロン Node.js アプリの展開」を参照してください。
     
  • ネイティブコードに依存するモジュールはサポートされていません。
     
  • Promises、Generators などの ECMAScript 6 の機能に依存するモジュールはサポートされていません。
     
  • 「harmony-proxies」などの Node.js ランタイムフラグはサポートされていません。 

Setting IP connection restrictions on Edge for Private Cloud

By default, Edge for Private Cloud restricts Node.js code from accessing IP addresses starting with “10.", "192.168", and localhost. If you attempt to access these IP addresses, you will see an error in the form:

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

You can modify these restrictions by setting the conf_nodejs_connect.ranges.denied property in the message-processors.properties file for each Message Processor. By default, this property has the value:

conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32

To set this property:

  1. Open the message-processor.properties file in an editor. If the file does not exist, create it:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Set the property as desired. For example, to deny access to only localhost:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. 変更を保存します。
  4. Make sure the properties file is owned by the 'apigee' user:
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Restart the 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 ではポート番号を条件に応じて環境変数から取得するようにコーディングすることが推奨されます。 

Apigee ではどの環境 (environment) にも、少なくとも 1 つの仮想ホストがあります。仮想ホストでは Api​​gee 組織と接続するための HTTP 設定が定義されています。環境内のすべての API プロキシは同じ仮想ホストを共有しています。デフォルトでは、環境ごとに defaultsecure の 2 つの仮想ホストを使用できます。詳細については、「仮想ホストおよび API 開発ライフサイクルの取得」を参照してください。

apigeetool deploynodeapp コマンドでは、Node.js アプリケーションの周りに Apigee Edge プロキシラッパーを生成します。Node.js アプリケーションは展開されると、環境に対して定義されたデフォルトの仮想ホストをリッスンします。Node.js の URL は常に http://{org_name}-{env_name}.apigee.net になります。

受信リクエストの処理

他の Apigee Edge アプリケーションと同様に、secure 仮想ホストをリッスンするように設定されている場合は、プロキシアプリケーションでは HTTPS を使用して受信リクエストを受け入れます。

現在、カスタムの CNAME のサポートおよびカスタムの TLS/SSL 証明書を含む、より高度な設定を行うには、Apigee の支援が必要です。セキュリティが確保された仮想ホストの詳細については、「API 開発ライフサイクル」を参照してください。「tls モジュールのサポート について」も参照してください。 

送信リクエストの処理

受信トラフィックの受信の他、Apigee Edge 内の Node.js アプリケーションは、他の Node.js アプリケーションと同様に、http モジュールと https モジュールを使用して、送信リクエストを行います。これらのモジュールは、常に Node.js 内で実行されているように機能します。

カスタムの TLS/SSL 証明書またはトラストストアを使用する場合は、送信リクエストのための Apigee Edge サポートは機能が異なります。ご質問がある場合は、Apigee サポートまでお問い合わせください。

tls モジュールのサポートについて

Apigee Edge では Node.js tls モジュールがサポートされています。このモジュールでは OpenSSL を使用して、トランスポート層セキュリティ (TLS) および/またはセキュアソケットレイヤー (SSL) 暗号化ストリーム通信を提供しています。tls モジュールを使用すると、Edge で実行されている Node.js アプリケーションからバックエンドサービスへのセキュリティで保護された接続を作成できます。

Apigee Edge での tls モジュールの機能を理解するには、Apigee Edge での仮想ホストの使用方法を理解することが重要です。Apigee ではどの環境にも少なくとも 1 つの仮想ホストがあります。仮想ホストでは Api​​gee 組織と接続するための HTTP 設定が定義されます。環境内のすべての API プロキシは同じ仮想ホストを共有しています。デフォルトでは、環境ごとに defaultsecure の 2 つの仮想ホストを使用できます。仮想ホストの詳細については、「仮想ホストの取得」および「API 開発ライフサイクル」を参照してください。

次に、Apigee Edge が Node.js アプリケーションで受信リクエストおよび送信リクエストのためのTLS (SSL) 通信を処理する方法について確認します。

受信リクエストの処理

組織 (organization) での仮想ホストの構成方法に応じて、Edge では次のオプションが提供されます。

  • API プロキシが default 仮想ホストをリッスンするように構成されている場合は、このプロキシでは HTTP を介してリクエストを受け入れます。
  • API プロキシが secure 仮想ホストをリッスンするように構成されている場合は、このプロキシでは HTTPS を介して受信リクエストを受け入れます。URL は apigee.net ドメインの URL になり、*.apigee.net のワイルドカード SSL 証明書が使用されます。アプリが apigee.net ドメインに対してリクエストを行う限り、SSL 証明書は正常に検証されます。

受信トラフィックにカスタム TLS/SSL 証明書を使用する場合は、サポートポータルの Apigee サポートを参照してください。

送信リクエストの処理

Node.js で通常行う場合と同様に tls モジュールを使用して送信リクエストを行うことができます。基本的には、クライアント側のキーと証明書 (.pem ファイル) を resources/node ディレクトリに追加し、スクリプトに読み込む必要があります。tls モジュールとそのメソッドの使用方法については、Node.js tls モジュールのマニュアルを参照してください。

ScriptTarget の高度な構成

<TargetEndpoint> 定義では、<ScriptTarget> 要素は <ResourceURL> の他に追加のオプションパラメータを取ります。また、<EnvironmentVariables> パラメータと <Arguments> パラメータを使用して、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>

Node.js サーバーで次のコード行を実行することにより、Node.js アプリが Edge 上で起動された時点で設定されていたすべての環境変数のリストを取得できます。
console.log('environment variables: ' + JSON.stringify(process.env));

設定されていた変数には、APIGEE_ORGANIZATION および APIGEE_ENVIRONMENT が含まれます。例 (実際の値は省略されています):

{
  "TERM": "",
  "JAVA_HOME": "",
  "SHLVL": "",
  "XFILESEARCHPATH": "",
  "APIGEE_HOME": "",
  "microkernel_overrideTokenFolder": "",
  "working_dir": "",
  "microkernel_host": "",
  "PWD": "",
  "microkernel_overrideTokenDirs": "",
  "LOGNAME": "",
  "_APIGEE_APP_ID": "",
  "_": "",
  "microkernel_defaultTokenFolder": "",
  "NLSPATH": "",
  "microkernel_timeout": "",
  "SHELL": "",
  "TMPDIR": ""
  "microkernel_hasMonetization": "",
  "USE_TOKENIZED_CONFIG": "",
  "microkernel_org": "",
  "PATH": "",
  "microkernel_application": "",
  "microkernel_installType": "",
  "microkernel_instanceType": "",
  "USER": "",
  "HOME": "",
  "APIGEE_ORGANIZATION": "",
  "CONFIG_UTIL_HOME": "",
  "microkernel_pod": "",
  "APIGEE_ENVIRONMENT": "",
  "microkernel_defaultTokenDirs": "",
  "microkernel_region": "",
  "LANG": ""
}

サポートを受ける

ヘルプについては、Apigee カスタマサポートにアクセスしてください。

Help or comments?