スタンドアロン Node.js アプリのデプロイ

このトピックでは、Node.js アプリケーションをユーザーのローカル システムから Apigee Edge にデプロイする方法について説明します。このトピックでは、apigeetool と呼ばれるコマンドライン ツールを使用して Node.js アプリケーションを Apigee Edge にデプロイする方法について説明します。

Apigee Edge への Node.js コードのデプロイについて

apigeetool というコマンドライン ユーティリティを使用して、既存の Node.js API アプリケーションを、依存 Node.js モジュールも含めてローカル システムから Apigee Edge にデプロイできます。このユーティリティは、アプリケーションとその依存ファイルを自動的に 1 つの API プロキシにまとめ、それを Edge にデプロイします。

たとえば、Express を使用して Node.js でウェブ アプリケーションを作成したとします。そのアプリケーションは、HTTP リクエストをリッスンし、受信したリクエストを処理し、データを返す、などを行う HTTP サーバーとして動作します。apigeetool を使用して Node.js アプリケーションを Edge にデプロイする場合、そのアプリケーションはプロキシでラップされ、Edge プラットフォームのコンテキスト内で実行されます。これにより、新しいプロキシ URL を使用してアプリケーションを呼び出すことができ、OAuth によるセキュリティ保護、割り当てポリシー、脅威保護ポリシー、条件フロー、キャッシング、など多数の Edge の標準機能で装飾して価値を付加できます。

apigeetool の処理内容

apigeetool ユーティリティを deploynodeapp オプション付きで実行すると、次のことが行われます。

  • Node.js アプリケーションを収容するための API プロキシ構成バンドルを生成します。
  • Node.js アプリケーションを、NPM(Node Packaged Modules)によりインストールされた Node.js パッケージと併せてパッケージ化します。
  • Edge 管理 API を使用して、Apigee Edge 上の指定された組織に API プロキシ構成バンドルをインポートします。
  • API プロキシを環境にデプロイします。
  • Apigee Edge 上で Node.js アプリケーションを実行して、ネットワークを介して利用できるようにします。

apigeetool を使用するための準備

始める前に apigeetool ユーティリティをインストールする必要があります。

apigeetool は、npm を使用するか、または GitHub からコードのクローンを作成してリンクすることによってインストールできます。

npm によるインストール

apigeetool モジュールとその依存ファイルは Node.js 用に設計されていて、次の npm コマンドを実行すると使用可能になります。

    $ sudo npm install -g apigeetool
    

通常、-g オプションを指定すると、*nix ベースのマシンの /usr/local/lib/node_modules/apigeetool にモジュールが配置されます。

GitHub からのインストール

GitHub から API Platform Tools をダウンロードするかまたはクローンを作成します。インストール手順については、リポジトリのルート ディレクトリにある README ファイルをご覧ください。

    $ git clone https://github.com/apigee/apigeetool-node.git
    

インストールが完了したら、apigeetool の実行可能ファイルのパスが PATH 環境変数に含まれていることを確認します。次のコマンドを入力して試すことができます。

$ apigeetool -h

apigeetool による Edge への Node.js アプリケーションのデプロイ

注: デプロイする前に、Apigee Edge 組織名、Apigee Edge アカウントのユーザー名とパスワードを把握しておく必要があります。この情報は apigeetool コマンドを正しく形成するために必要です。

apigeetool を使用して Node.js アプリケーションをデプロイするには:

  1. 端末ウィンドウで、cd コマンドを使用して Node.js アプリケーションのルート ディレクトリに移動します。
  2. apigeetool ユーティリティの deploynodeapp コマンドを実行します。

        $ apigeetool deploynodeapp -n {A name for your new proxy} -d {The root directory of your Node.js app} -m {The name of the main Node.js file} -o {Your org name on Edge} -e {The environment to deploy to} -b {The base URL for your proxy} -u {Your Edge email address} -p {Your Edge password}
        
    例:

        $ apigeetool deploynodeapp -n myNodeApp -d . -m server.js -o myorg -e test -b /myNodeApp -u ntesla -p myPassword
        
  3. 端末ウィンドウで出力を確認します。以下のようになります。

        Importing new application myNodeApp
        Imported new app revision 1
        Deploying revision 1
          Deployed.
        Proxy: "myNodeApp" Revision 1
          Environment: test BasePath: /myNodeApp
          Status: deployed
        

    "Status: deployed" と出力されていれば成功しています。すべて順調です。Node.js アプリは API プロキシにラップされ、Edge にデプロイされ、実行されていて、リクエストの処理を待機しています。これで、テストの用意が整いました。

  4. プロキシをテストします。次に例を示します。

        $ curl http://myorg-test.apigee.net/myNodeApp
        Hello, My Node App!
        
  5. 必要に応じて、Apigee Edge アカウントにログインし、管理 UI の [API Proxies] ページに移動します。新しいプロキシがリストに表示されていることを確認できます。

apigeetool による依存ファイルとモジュールの処理

Node.js アプリケーションがインストール済みモジュールに依存している場合、apigeetool は node_modules フォルダを zip 圧縮してプロキシ バンドルに追加することによって処理します。追加のアクションは不要です。追加ソースコードが含まれているディレクトリについても同様です。apigeetool ユーティリティはそれらを zip 圧縮し、バンドルとともにデプロイします。

zip 圧縮されたディレクトリに含まれているファイルは、Edge 管理 UI のエディタで編集することはできません。zip 内のファイルを変更する必要がある場合は、プロジェクトをエクスポートしてファイルをローカルに編集してから、apigeetool を使用して再デプロイするか、またはエクスポートしたプロジェクトを管理 UI を使用してインポートします。Node.js コードを使用したプロキシのエクスポートとインポートもご覧ください。

apigeetool の基本的な使用法

次のように入力すると、apigeetool ユーティリティの入力パラメータの簡易的な使用法を確認できます。

    $ apigeetool deploynodeapp -h

      Usage: deploynodeapp -n [name] -o [organization] -e [environment]
      -d [directory name] -m [main script file]
      -u [username] -p [password]
      -b [base path] -l [apigee API url] -z [zip file] -i -h
      -o Apigee organization name
      -e Apigee environment name
      -n Apigee proxy name
      -d Apigee proxy directory
      -m Main script name: Should be at the top level of the directory
      -u Apigee user name
      -p Apigee password
      -b Base path (optional, defaults to /)
      -L Apigee API URL (optional, defaults to https://api.enterprise.apigee.com)
      -z ZIP file to save (optional for debugging)
      -i import only, do not deploy
      -R Resolve Node.js modules on Apigee Edge. Equivalent to running npm install on your project.
      -U Uploads Node.js modules to Apigee Edge.
      -h Print this message
    

既存の Node.js ファイルを使用した新しいプロキシの作成

既存の Node.js アプリケーションを API プロキシにインテグレーションする別の方法として、プロキシを作成するときにそのアプリケーションを追加することもできます。この方法は、管理 UI と [New API Proxy] ダイアログだけを使用して行うことができます。

  1. API プロキシの概要ページで [+API Proxy] をクリックします。
  2. [New API Proxy] ダイアログで [Existing Node.js] を選択します。
  3. [Choose Files] ボタンを使用して、インポートする 1 つまたは複数の Node.js ファイルを選択します。
  4. プロキシに名前を付けます。この例では hellonode としています。
  5. [Project Base Path] にバージョン /v1 を追加します。API をバージョニングすることをおすすめします。
  6. [Build] をクリックします。
  7. [Develop] をクリックして [Develop] ビューに入ります。
  8. コードエディタで TargetEndpoint ファイルを開きます。
  9. <ScriptTarget> 要素で、次のように Node.js メインファイルが指定されていることを確認します。


        <ScriptTarget>
                <ResourceURL>node://server.js</ResourceURL>
                <Properties/>
        </ScriptTarget>
        
  10. [Save] をクリックします。

新しい Node.js リソース ファイルの追加と呼び出し

プロキシに Node.js コードを追加する別の方法として、UI を使用するかまたはローカル ファイルシステムからアップロードして、Node.js コードを直接追加することもできます。どの Node.js ファイルがメインファイル(プロキシがデプロイされたときに Edge が呼び出すファイル)であるかも指定できます。

UI での新しい Node.js ファイルの追加

管理 UI を使用して、Node.js ソースファイルを Edge プラットフォーム上にあるプロキシに追加できます。追加するファイルは UI で直接作成することも、ファイル システムからインポートすることもできます。まず、管理 UI での方法について説明します。

新しい Node.js リソース ファイルを作成するには:

  1. [Develop] ビューの [New] メニューから [New Script] を選択します。
  2. [Add Script] ダイアログで、ファイルタイプとして [Node] を選択し、スクリプトに名前を付けます。
  3. [Add] をクリックします。

エディタで、新しい空の Node.js ファイルが開きます。切り取りと貼り付けを使用してコードをファイルに追加できます。このファイルは、[Navigator] の [Scripts] セクションにも表示されます。

[[{"type":"media","view_mode":"media_large","fid":"2431","attributes":{"alt":"","class":"media-image","height":"312","typeof":"foaf:Image","width":"417"}}]]

ユーザーのファイルシステムからの Node.js ファイルのインポート

Node.js ファイルをファイルシステムからプロキシにインポートするには:

  1. [Develop] ビューの [New] メニューから [New Script] を選択します。
  2. [Add Script] ダイアログで [Import Script] を選択します。
  3. ファイルツールを使用して Node.js ファイルを選択します。
  4. 選択したファイルの名前がダイアログに追加されます。必要であればその名前を変更できます。
  5. [Add] をクリックします。そのファイルが [Navigator] の [Scripts] セクションに表示され、エディタで開かれます。
  6. [Save] をクリックします。

インポートしたファイルを呼び出すには追加手順が必要であり、次のセクションで説明します。

インポートした Node.js ファイルの呼び出し

新たにインポートまたは作成した Node.js ファイルをそのまま呼び出すことはできません。それは、Edge では 1 つの Node.js ファイルがメインファイルである必要があるためです。メインファイルはターゲット エンドポイント定義の <ScriptTarget> 要素で指定されています。どのファイルがメイン Node.js ファイルであるかを指定するには、次の手順に従います。

  1. [Navigator] にある [Target Endpoints] 内で、ターゲット エンドポイントの名前(通常は default)をクリックします。
  2. コードエディタで、Node.js メインファイルにするファイルの名前が反映されるように、<ResourceURL> を変更して <ScriptTarget> 要素を編集します。たとえば、hello-world.js というファイルをメインファイルにする場合は、ResourceURL 要素に「node://hello-world.js」と入力します。
  3. [Save] をクリックします。

この時点で、以前に使用していた任意のプロキシパスを使用してこのファイルを呼び出すことができます。たとえば、"Hello World!" の例ではベースパス v1/hello を指定していました。ただし、ベースパスは Proxy Endpoint を編集して変更できます。

  1. [Navigator] にある [Proxy Endpoints] 内で、プロキシ エンドポイントの名前(通常は default)をクリックします。
  2. コードエディタで <HttpProxyConnection> 要素を編集し、<BasePath> を任意の名前に変更します。たとえば、現在の <BasePath> が v1/hello であり、それを v1/my-node-file に変更する場合、<BasePath> 要素を次のように変更します。

    <BasePath>/v1/my-node-file</BasePath>
  3. [Save] をクリックします。
  4. 次のように、新しいベースパスを使用してプロキシを呼び出します。

        $ curl http://myorg-test.apigee.net/v1/my-node-file
        Hello, World!
        

Node.js コードを使用したプロキシのエクスポートとインポート

Node.js コードが含まれているプロキシを Edge にデプロイすると、そのプロキシをエクスポートしていつでもシステムに戻してローカルで編集し、管理 UI を使用して Edge に再インポートできます。このようなラウンドトリップ開発はよく使用されている手法です。

  1. API プロキシの概要ページで [Develop] をクリックします。
  2. [Develop] ページで [Download Current Revision] を選択します。
  3. ダウンロードしたファイルをユーザーのシステム上で解凍します。

同じメニューにある [Import Into New Revision] を選択して、そのプロキシ バンドルを Edge にインポートし直すことができます。

この API を使用してプロキシをデプロイすることもできます。詳しくは、コマンドラインからのプロキシのデプロイをご覧ください。

次のステップ

次の既存の API プロキシへの Node.js の追加では、ファイル システムにある既存のプロキシに Node.js アプリを追加し、それを Edge にデプロイする方法について説明します。