目次


アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4)

Comments

このラボでは、Bluemix 上でコグニティブ・サービスを統合して Web アプリケーションを拡張するシナリオを紹介します。このシナリオで選ばれたサービスは、IBM Watson Question and Answer (Watson QA) サービスです。

Etherpad ラボ 4 のアーキテクチャーのリファレンス・ダイアグラム (1024x593) (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
Etherpad ラボ 4 のアーキテクチャーのリファレンス・ダイアグラム (1024x593) (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

始める前に

このラボは、Ubuntu 14 および Mac OSX 開発ワークステーションを対象として作成されています。というのも、これらのプラットフォーム上では、必要なツールを簡単にセットアップできるからです。お使いの開発ワークステーションが別のオペレーティング・システム (Windows など) を実行している場合は、Ubuntu を実行するサーバーを別途用意するか、開発ワークステーション上の仮想マシンで Ubuntu を実行してください。またこのラボでは、これまでのラボで説明したセットアップと構成手順に従って、Ubuntu 14 Desktop を使用しています。

重要: このラボを開始する前に、このシリーズのラボ 1 を完了しておく必要があります。

タスク 1. 定義済みのプラグイン・モデルを使用して Etherpad-lite の機能を拡張する

このラボでは、定義済みの Etherpad-lite プラグイン・フレームワークを使用して、Bluemix で提供されているサービスとの統合機能を追加します。このシナリオで利用するのは、IBM Watson Question and Answer (Watson QA) サービスです。Etherpad Lite プラグイン・フレームワークの詳細を自分で調べる場合、このリンク先にアクセスしてください。

私たちが開発したプラグインにより、Etherpad-lite のユーザーは、動作するパッドを使用して Watson QA サービスに質問を送信し、その応答を受信できるようになります。

タスク 2. Watson Question and Answer サービスを作成する

以下の手順に従って. Watson Question and Answer サービスを作成します。

  1. Bluemix にログインします。すると、以下に示すダッシュボードが開きます。
    Bluemix ダッシュボード
    Bluemix ダッシュボードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Bluemix ダッシュボードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
  2. 「DASHBOARD (ダッシュボード)」を表示し、左側のナビゲーション・メニューで「CF APPS (CF アプリ)」をクリックします。
  3. 「etherpad-container」という名前のアプリケーションをクリックします。このアプリケーションは前回のラボ (「データベース・サービスを利用した Web アプリケーションのホスティング」) で作成したものなので、皆さんのアプリケーションとは名前が異なるかもしれません。名前が異なるとしても、前回のラボで作成したアプリケーションを選択してください。
  4. 「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。サービス・カタログが開いたら、「Watson」セクションまでスクロールダウンして「Question and Answer」を見つけます。
  5. 新しいコグニティブ・サービスを作成するために、「Question and Answer」アイコンをクリックします。デフォルト設定を受け入れて「CREATE (作成)」をクリックします。

    アプリケーションを再ステージングするよう要求される場合があります。その場合には、「RESTAGE (再ステージ)」をクリックし、アプリケーションが再ステージングされるまで数秒待ちます。

    ページが最新の表示に更新されてアプリケーションの再ステージが完了すると、管理対象の Watson QA サービスが利用可能になります。

タスク 3. Bluemix環境変数 (VCAP_SERVICES) について、アプリケーションでの使用方法と併せて理解する

Bluemix アプリケーション環境は、アプリケーションにバインドされたサービス (ClearDB MySQL、Question and Answer など) の名前と詳細を定義する、VCAP_SERVICES という環境変数一式を提供します。このプラグイン・コードでは、Etherpad-lite アプリケーションが Watson QA とやりとりできるように、IBM から提供されている NodeJS デモ・アプリケーション (このリンク先にあります) を利用して適応させています。プラグイン・コードを編集する必要は一切ありません。このコードは、さまざまなアプリケーションが、バインドされたサービスとどのようにやりとりするかについて洞察を得られるように記載しているだけです。

  1. まず、アプリケーション・ダッシュボードで「Environment Variables (環境変数)」リンクを選択します。これにより、アプリケーションにバインドされているサービスの詳細が表示されます。
    サービスの詳細
    VCAP_SERVICES のスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    VCAP_SERVICES のスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
  2. 次に、右上隅にある「Copy (コピー)」アイコンをクリックして、VCAP_SERVICES 変数の内容をコピーします。このコピーした内容をファイルに貼り付け、そのファイルに VCAP_Services.json (大文字と小文字が区別されます) という名前を付けて /etherpad-lite ディレクトリーに保存します。このディレクトリーは、ラボ 1 で GIT から抽出した Dockerfilesettings.json が格納されているディレクトリーと同じです。
  3. Etherpad アプリケーションは自動的に、Watson QA サービスを呼び出すサーバー・サイド JavaScript 内に指定された question_and_answer バインディングの URL、ユーザー名、パスワードの各プロパティー名を使用します。

    以下の画面に、NodeJS アプリケーションが Watson QA サービスにアクセスするために必要な VCAP_SERVICES 変数をロードする方法が示されています。

    NodeJS アプリケーションが Watson QA サービスにアクセスするために必要な VCAP_SERVICES 変数をロードする方法VCAP_SERVICES 変数をロードするコードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    VCAP_SERVICES 変数をロードするコードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
  4. 以下の画面には、NodeJS スクリプトが VCAP_SERVICES 変数を使用して、Watson QA サービスを呼び出すように REST API をセットアップする方法が示されています。ここで触れておくべき点として、Watson QA サービスはベータ版として、医療と旅行に関する 2 つのコーパスを提供しています。この例では、デフォルトのデータ・セットを医療に設定します。Watson QA サービスの詳細については、このリンク先を参照してください。

    Watson QA サービスを呼び出す方法Watson QA サービスを呼び出すコードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Watson QA サービスを呼び出すコードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
  5. 最後に、質問を送信して、その質問に対する応答を受信し、その応答を、リクエストを開始した Etherpad-lite パッド・オブジェクトに送信する方法を示すサンプル・コードを記載します。Watson QA サービスとやりとりするコードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Watson QA サービスとやりとりするコードのスクリーンショット (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

タスク 4. Dockerfile を更新する

次に必要な作業は、Dockerfile を更新することです。具体的には、コンテナーのビルド時にプラグインをインストールして VCAP_SERVICES 情報をコピーする NPM コマンドを組み込みます。このように更新した後は、Watson QA サービスの統合をローカルでテストすることができます。/etherpad-lite ディレクトリー内ある Dockerfile を開いて、以下のコマンドを Dockerfile に追加してください (20 行目あたりの run /src/etherpad-lite/bin/installDeps.sh コマンドの前に追加します)。

run npm install --prefix /src/etherpad-lite ep_talk_to_watson
add ./VCAP_Services.json /src/etherpad-lite/node_modules/ep_talk_to_watson/VCAP_Services.json

上記の行を挿入したら、ファイルを保存します。

タスク 5. アプリケーション用のイメージをビルドする

このセクションは、前回のラボの「アプリケーションのイメージをビルドする」と似ていますが、今回のラボ 4 では Watson Question and Answer サービスを利用しているので、イメージ名は異なります。

ヒント: Linux では一般に、以下の ICE (IBM Containers Extension) コマンドは、最初に sudo ice を実行してから、続けて実行する必要があります。Mac OSX では、sudo コマンドを使用しないでください。

  1. ICE コマンド・ライン・ツールにログインします。
    ice login
  2. etherpad-lite ディレクトリーから、以下のコマンドを続けて実行してコンテナーをビルドします。コマンドに含まれるレジストリー URL は、自分用の値を使用する必要があります。これに相当する値は、Bluemix ダッシュボードで「CREATE A CONTAINER (コンテナーの作成)」ボタンをクリックすると開く、コンテナーの起動ページで確認することができます。

    最初に実行する以下のコマンドは、グローバル IBM リポジトリーから最新の公式 IBM Node.js コンテナーを取得します。
    ice --local pull registry-ice.ng.bluemix.net/ibmnode:latest

    2 番目に実行する以下のコマンドは、最初のコマンドで取得した最新イメージと、ラボの GIT リポジトリーから抽出した Dockerfile および settings.json を使用してアプリケーション・コンテナーをビルドします。-t パラメーターで指定されるタグは、ビルドされるイメージに自動的に適用されるので、このタグをローカルで参照することができます。コマンド末尾のピリオド (.) は重要です。このピリオドによって、カレント・ディレクトリー (複製された etherpad-lite ディレクトリー) が作業ディレクトリーとして指定され、Docker はそのディレクトリーからイメージをビルドするようになります。
    • フォーマット:
      ice --local build -t YOUR_LOCAL_IMAGE_NAME .
    • 例:
      ice --local build -t etherpad_bluemix_watson .
  3. 最後に、リポジトリーに入れるイメージに、以下のフォーマットでタグを付けます。このフォーマットを使用することで、ビルドしたイメージを Bluemix に公開して、IBM Containers サービス上でそのイメージを実行することができます。このコマンドは、前に build コマンドを実行したときにタグを付けたローカル・イメージを取得し、そのイメージにリポジトリー固有のタグを適用します。これにより、イメージを IBM Containers サービスの共有リポジトリーに正しく配置することができます。フォーマットは以下のとおりでなければなりません。これとは一致しない別のイメージ名のフォーマットを使用した場合、イメージを正常に Bluemix にプッシュすることはできません。
    • フォーマット:
      ice --local tag -f YOUR_LOCAL_IMAGE_NAME registry-ice.ng.bluemix.net/YOUR_REGISTRY_URL/ YOUR_REMOTE_IMAGE_NAME
    • 例:
      ice --local tag -f etherpad_bluemix_watson registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix_watson

    ローカルのイメージ名とリモートのイメージ名を同じにする必要はありませんが、同じイメージ名を使用すると、ローカルとリモートのイメージ・リストを比較する場合に、比較するイメージを明確にする上で役立ちます。また、ビルド・ステップで初期イメージにフルネームのリポジトリー・タグを付けることもできますが、ローカルで実行するときには短いタグを使用したほうが、イメージを Bluemix にプッシュする前に時間を節約して Bluemix に必要なフォーマットを適用する上では有効です。

    以上のコマンドを実行順に示すと以下のようになります。フォーマットが指定された必須パラメーターを、各自の組織とイメージの情報で置き換えてください。
    ice --local pull registry-ice.ng.bluemix.net/ibmnode:latest
    ice --local build -t etherpad_bluemix_watson .
    ice --local tag -f etherpad_bluemix_watson registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix_watson

タスク 6. アプリケーションをワークステーション上でテストする

コンテナーのビルドが完了したら、試しにローカルで Etherpad Web アプリケーションをテストすることができます。

  1. 以下のコマンドは、Docker コンテナーを起動して、そのコンテナー内で Etherpad を実行するとともに、次のステップで必要となるコンテナー ID (CID) を出力します。
    docker run -d -p 9080:9080 etherpad_bluemix_watson
  2. 次のステップは、ブラウザーに入力する URL を調べ、実行中の Etherpad Web アプリケーションを確認することです。Linux オペレーティング・システムで、Linux デスクトップ環境を実行している場合は、Docker コンテナー自体の IP アドレスを取得する必要があります。以下のコマンドに含まれる CID は、前のステップの docker run コマンドから出力されたコンテナー ID で置き換えてください。
    docker inspect --format '{{ .NetworkSettings.IPAddress }}' CID

    Mac OSX の場合は、boot2docker が仮想マシン内で Docker を実行しているので、boot2docker の IP アドレスが必要となります (通常は 192.168.59.103)。boot2docker の IP アドレスを取得するには、以下のコマンドを実行します。
    boot2dockerip
  3. 仮想マシン内で Linux サーバー環境を実行している場合、ホスト・マシンからコンテナー上で実行中の Etherpad にアクセスするために、仮想化プラットフォームのポート・フォワーディングを構成する必要があります。ポート・フォワーディングの構成はプラットフォームによって異なりますが、通常は、ホスト・マシン上のポート 9080 を内部仮想マシン・ゲストに転送するだけで十分です。以下に、VirtualBox ポート・フォワーディングの構成例を示します。
    ポート・フォワーディング・ルール
    ポート・フォワーディング・ルールの設定画面 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    ポート・フォワーディング・ルールの設定画面 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

    同様に、VMWare 上で実行されている仮想マシンにもポート・フォワーディング・ルールが必要です。ただし、「Guest IP (ゲスト IP)」の値には、VMWare 8 ネットワークに関連付けられた IP アドレスを指定する必要があります。
  4. このラボでは Etherpad をポート 9080 でホストしているため、ブラウザーで http://192.168.59.103:9080/ のような URL (192.168.59.103 の部分はコンテナーの IP アドレスで置き換えます) を開くことで、実行中の Etherpad アプリケーションをテストすることができます。

    すべてが正常に実行されると、以下に示すようなウェルカム画面が表示されます。
    新規パッドを作成するためのウィンドウ
    ウェルカム画面 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    ウェルカム画面 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

    この画面から新しいパッドを作成して、いろいろと試してください。パッドにアクセスすると、Watson QA サービスに質問を送信することができます。パッドの新しい行に、「@aw 」と入力します。これは、「Ask Watson」の省略形です。「w」の後には必ずスペースを追加してください。この入力の応答として「@watson Ask Me: 」と表示されたら、パッドに質問を入力します。質問の最後には、必ず疑問符 (?) を追加してください。プラグインはこの質問を取得して Watson QA サービスに送信し、応答のテキストをパッドに表示します。
    以下の点に注意してください。
    • デフォルトで応答に使用されるコーパスは、医療分野のコーパスです。
    • このサービスはベータ版であり、コーパスには完全な Watson サービスに期待されるほど奥深く幅広い情報は含まれていません。

    以下のスクリーンショットに Watson QA サービスとのやりとりの画面を示します。
    Watson QA サービスとのやりとりの画面 (1/4)
    Watson QA サービスとのやりとりの画面のスクリーンショット-1 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Watson QA サービスとのやりとりの画面のスクリーンショット-1 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

    Watson QA サービスとのやりとりの画面 (2/4)
    Watson QA サービスとのやりとりの画面のスクリーンショット-2 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Watson QA サービスとのやりとりの画面のスクリーンショット-2 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

    Watson QA サービスとのやりとりの画面 (3/4)
    Watson QA サービスとのやりとりの画面のスクリーンショット-3 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Watson QA サービスとのやりとりの画面のスクリーンショット-3 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

    Watson QA サービスとのやりとりの画面 (4/4)
    Watson QA サービスとのやりとりの画面のスクリーンショット-4 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
    Watson QA サービスとのやりとりの画面のスクリーンショット-4 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

タスク 7. アプリケーションを Bluemix 内で実行する

アプリケーションがローカルで実行されるようになったら、Bluemix 内で実行されているコンテナーにアプリケーションを公開して、インターネット上で実行することができます。Bluemix 内でコンテナーを実行するためのコマンドは以下のとおりです。いくつかの値は環境に固有の値で置き換える必要があるため、各コマンドのフォーマット設定を読んでから、以下のコマンドを順に実行してください。

ice --local push registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix
ice images
ice run --bind etherpad-container --name etherpad_01 registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix_watson:latest

ice –local push コマンドはコンテナー・イメージを Bluemix に公開し、自分の組織のレジストリーに配置します。レジストリーのスコープは、IBM Containers サービス・インスタンスを作成したときに構成したレジストリー URL によって設定されています。

  • フォーマット:
    ice --local push registry-ice.ng.bluemix.net/YOUR_REGISTRY_URL/YOUR_REMOTE_IMAGE_NAME
  • 例:
    ice --local push registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix_watson

ice images コマンドは、公開されたイメージの URL と、Bluemix にプッシュした残りのイメージに関連する、他のデータを出力します。以下に、ice images コマンドの出力例を記載します。出力されるフィールドには、Bluemix にプッシュされたイメージごとに生成される、実際の一意の ID が示されます。

ice images コマンドの出力
ice images コマンドの出力例 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))
ice images コマンドの出力例 (アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4))

出力には、先ほどのコマンドで Bluemix にプッシュした etherpad_bluemix イメージがあること、そしてその etherpad_bluemix イメージの名前と IBM によって提供されている他の 2 つのイメージとの違いに注意してください。

今度は、以下のコマンドを実行することで、Bluemix 上で実行されるコンテナー・インスタンスを作成します。

ice run -p 9080 --bind etherpad-container --name etherpad_01 registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix_watson:latest

上記のコマンドに含まれる以下のパラメーターは、使用している環境に合わせて変更する必要があります。

  1. --bind パラメーターで使用されているアプリケーション名を更新します。Bluemix はこのパラメーターを使用して、実行中のコンテナー・インスタンスにアプリケーションの VCAP_SERVICES 情報を注入します。このアプリケーションは、上記のタスク 2 で使用したのと同じアプリケーションです。
  2. コンテナー名を指定するパラメーター (--name) は、etherpad_01 から新規コンテナーの作成時に選択するコンテナー名に変更します。イメージ名とは異なり、コンテナー名を完全な URL でスコープ設定する必要はありません。コンテナー名は、実行中のコンテナーを識別しやすくするためだけに使用されるものだからです。名前は、ご使用の IBM Containers サービス・インスタンス内で実行中のコンテナー全体で一意である限り、単純なストリングにして構いません。
  3. registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix:latest を、自分用のイメージ URL で置き換えます。URL の末尾にある :latest タグは、そのイメージに複数のバージョンがある場合、最新のバージョンを実行するように指定します。
  • フォーマット:
    ice run -p PORT_TO_EXPOSE --bind BLUEMIX_APPLICATION_NAME --name UNIQUE_CONTAINER_NAME registry-ice.ng.bluemix.net/YOUR_REGISTRY_URL/YOUR_REMOTE_IMAGE_NAME:latest
  • 例:
    ice run -p 9080 --bind etherpad-container --name etherpad_01 registry-ice.ng.bluemix.net/bluemix_residency/etherpad_bluemix:latest

ice run コマンドによって一意のコンテナー ID (CID) が返されるので、そのコンテナーに対して実行されるコマンドでは、この CID を使用します。以下の例では、CID は dd489740-ffff-4c8f-9117-d94cd147f122 となっているので、これを自分のコンテナー用の CID で置き換えてください。

Web アプリケーションに接続するには、その前に、アプリーションにフローティング・パブリック IP アドレスを割り当てる必要があります。フローティング・パブリック IP アドレスは、ice ip request コマンドを実行すると割り当てられます。以下の例では、129.0.0.0 の部分を ice ip request コマンドから返された IP アドレスで置き換え、dd489740-ffff-4c8f-9117-d94cd147f122 を自分用の CID に置き換える必要があります。

ice ip request
ice ip bind 129.0.0.0 dd489740-ffff-4c8f-9117-d94cd147f122

このラボでは Etherpad をポート 9080 でホストしているため、ブラウザーで http://129.0.0.0:9080/ のような URL (129.0.0.0 の部分は ice ip request コマンドを実行して返された IP アドレスで置き換えます) を開くことで、実行中の Etherpad アプリケーションをテストすることができます。

お使いのアカウントでは、無料で取得できるパブリック IP アドレスは 2 つに限られるため、使用していない IP アドレスはアンバインドしてください。以下の例では、129.0.0.0 の部分を ice ip request コマンドを実行して返された IP アドレスで置き換え、dd489740-ffff-4c8f-9117-d94cd147f122 を自分のコンテナー用の CID で置き換える必要があります。

ice ip unbind 129.0.0.0 dd489740-ffff-4c8f-9117-d94cd147f122

実行中のコンテナーの CID や、公開されたイメージ名を参照するには、Bluemix ダッシュボードのコンテナー・ビューで「Containers (コンテナー)」および「Images (イメージ)」タブをクリックするか、以下の ICE コマンドを使用して実行中のコンテナーと公開されたイメージをそれぞれ表示します。

ice ps
ice images

Bluemix 上で実行中のコンテナー・インスタンスを停止または削除するには、操作対象のコンテナーの必要な CID を指定して以下のそれぞれのコマンドを実行します。

sudo ice stop CID
sudo ice rm CID

IBM Containers サービスからコンテナーを削除するには、その前にコンテナーを停止する必要がないことを確認してください。これは、Docker を使用してローカルでコンテナーを実行する際の要件となっています。


ダウンロード可能なリソース


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Web development
ArticleID=1006207
ArticleTitle=アーキテクチャー・ラボ: コグニティブ・サービスを利用した Web アプリケーションのホスティング (Etherpad ラボ 4)
publish-date=05212015