目次


Bluemix を利用したハイブリッド・クラウドに Java アプリケーションをマイグレーションする、パート 4

クラウド・アプリケーションにオンプレミスのリソースを統合する

Comments

このチュートリアル・シリーズの最初の 3 回のパートでは、Java Web アプリケーションとスタンドアロン Java アプリケーションを IBM Bluemix にマイグレーションする方法を説明してきました。このパート 4 では、Bluemix 内で実行される Java Platform, Enterprise Edition アプリケーションに、Bluemix 外部で稼働するリレーショナル・データベースを接続する方法を説明します。このようなアーキテクチャーは、一般に、クラウド内でホストされているエンタープライズ・アプリケーションをプライベート・データ・センター (オンプレミス) にホストされている基幹エンタープライズ・データベースに接続する場合に使用することになります。こうしたアーキテクチャーの Java アプリケーションでは、クラウド・コンピューティングならではの運用効率を実現できる一方で、データベースはデータ・センター内に維持しておくことができるため、他のアプリケーションが引き続きローカルでデータベースにアクセスすることができます。

このチュートリアルの演習では、シミュレートしたオンプレミスのデータベースに既存の Bluemix アプリを接続する単純なソリューションを構築します。

ソリューション・アーキテクチャーの図
ソリューション・アーキテクチャーの図

このソリューションでは、Bluemix 内で Secure Gateway サービスをインストールするとともに、Bluemix 上にホストされる仮想マシン内で稼働する、シミュレートされた企業データ・センターにもこのサービスをインストールします。そして、サンプル Java アプリケーションから、シミュレートされたデータ・センター内で稼働する MySQL データベースに接続されるようにゲートウェイを構成します。この Java アプリケーションは、データベース内のデータを操作するための UI を提供し、Bluemix の Liberty for Java ランタイム内で実行されます。

この演習では、アプリケーションやデータベースの高度化にフォーカスするのではなく、Secure Gateway を構成して使用する方法にフォーカスします。

必要となるもの

  • IBM ID と Bluemix アカウント (無料のトライアル・アカウントを登録するか、アカウントを登録済みの場合は、そのアカウントで Bluemix にログインします)。
  • Cloud Foundry コマンドライン・ツール: サンプル・アプリケーションを Bluemix にデプロイするために使用します。
  • Eclipse 開発環境: サンプル・アプリケーションのソース・コードをロードして、サーバー構成を編集するために使用します。
  • Liberty: サンプル・アプリケーションをローカルでテストするため、そしてサーバーを Bluemix にデプロイできるようにパッケージ化するために使用します。
  • (Microsoft Windows を使用する場合のみ) PuTTYgen および Git Bash: 鍵ペアを生成して、Bluemix でホストされている仮想マシンに ssh で接続するために使用します。

チュートリアルのステップに取り掛かる前に、上記のすべてのツールをインストールしてください。

こうしたアーキテクチャーの Java アプリケーションでは、クラウド・コンピューティングならではの運用効率を実現できる一方で、データベースはデータ・センター内に維持しておくことができるため、他のアプリケーションが引き続きローカルでデータベースにアクセスすることができます。

ステップ 1. 環境を構築する

このステップでは、サンプル・アプリケーションとデータベースをセットアップし、アプリケーションをローカルにデプロイしてテストします。サンプル Java アプリケーションには、Bluemix の「Java Cloudant Web Starter (Java Cloudant Web スターター)」ボイラープレートに含まれている既存のアプリを使用します。Bluemix 内で、プライベート・データ・センターをシミュレートするための仮想マシン (VM) を 作成し、その VM に Docker コンテナー・マネージャーをインストールし、さらに Java アプリケーションに必要なデータベース (サンプル・データを含む) で初期化した MySQL インスタンスをインストールします。そして最後に、サンプル・アプリケーションのコードを Eclipse にインポートし、その Eclipse プロジェクトをローカル Liberty サーバーにデプロイします。

Bluemix に新しいスペースを作成する

Bluemix にログインし、右上にある「Account and Support (アカウントとサポート)」ボタンをクリックします。

「Account and Support (アカウントとサポート)」ボタンのスクリーンショット
「Account and Support (アカウントとサポート)」ボタンのスクリーンショット

アクティブな地域を「United Kingdom (英国)」地域に変更します (Bluemix のデフォルトの地域は米国南部ですが、IBM Virtual Machines ベータ環境は、英国地域でしか使用することができません)。hybrid-cloud という名前の新しいスペースを作成します。

仮想マシンを作成する

: 以下の手順では、UNIX/Linux コマンドを使用します。Windows では、Git Bash を使用して Linux コマンドを実行するか、PuTTYgen を使用して SSH1 (RSA) 鍵を生成し、PuTTY を使用して VM に SSH で接続してください。このチュートリアルでは、Bash コマンドを記載します。

  1. ターミナル・ウィンドウまたはツールで、以下のコマンドを実行します。このコマンドによって、todo という名前の SSH 鍵ペア (秘密鍵ファイル: todo.key、公開鍵ファイル: todo.key.pub) が作成されます。

    ssh-keygen -t rsa -f todo.key

  2. Bluemix ダッシュボードで、「RUN VIRTUAL MACHINES (仮想マシンの実行)」を選択します。
  3. 「Create a Virtual Machine (仮想マシンの作成)」ページの「Image Settings (イメージ設定)」で、Debian 8.0 イメージを選択します。
  4. イメージおよび VM の設定として、以下に示す値を入力します (デフォルト値が割り当てられている設定項目では、そのままデフォルト値を使用してください)。
    プロパティーデフォルト
    Location (ロケーション)IBM Cloud Publicデフォルト
    Select image (イメージの選択)(「Existing (既存)」のリストから): Debian 8.0デフォルト
    Name (名前)<自分の名前のイニシャル>_To_Do
    Type (タイプ)Single (シングル)デフォルト
    サイズc1.m4.s20デフォルト
    ネットワークprivate (プライベート)デフォルト
    Assign public IP addresses (パブリック IP アドレスの割り当て)選択 (はい)
    Security Key (セキュリティー鍵)todo
    Security Group (セキュリティー・グループ)allow_allデフォルト
  5. セキュリティー鍵を指定するために、「Add Key (鍵の追加)」を選択し、todo 鍵をインポートします (UNIX では、cat todo.key.pub を実行して鍵を表示し、その鍵を Bluemix にコピー・アンド・ペーストします)。
  6. VM が作成されたら、その VM のパブリック IP アドレス (129.xxx.xxx.xxx 形式のアドレス) をメモしておきます (もう一方の 192.168.xxx.xxx 形式の IP アドレスはプライベート IP アドレスです)。以降のコマンドでは、このパブリック IP アドレスを仮想マシンの IP アドレスとします。
  7. 仮想マシンにログインします。イメージには、リモート・ログイン用の ibmcloud というユーザーが事前定義されています。ログインするには、VM を作成したときに指定した認証鍵を使用します。Linux で、以下のコマンドを実行します。

    ssh -i todo.key ibmcloud@<仮想マシンの IP アドレス>

    (Windows では、Git Bash を使用して Linux コマンドを実行します)。

これで、Linux VM が稼働中になり、この VM にログインできるようになりました。

Docker をインストールする

後でわかりますが、Secure Gateway にはクライアントが含まれていて、そのクライアントをデータ・センターにインストールする必要があります。インストールするのに最も単純なクライアント実装は、IBM が Docker コンテナーとしてパッケージ化しているクライアントです (Secure Gateway 用 Docker クライアントとして知られています)。後で Secure Gateway クライアントをインストールできるように、VM に Docker ランタイムをインストールしておく必要があります (VM が Docker ランタイムを実行しなければならないもう 1 つの理由は、VM で MySQL コンテナーを実行できるようにするためです)。

  1. 前と同じように SSH を使用して VM にログインします。上記「読む」のリンク先に書かれている、Docker のインストール手順 (前提条件を含む) に従います。
  2. Docker のインストールが完了したら、以下のコマンドを実行します。

    sudo docker run hello-world

    hello-world が正常に実行されたとすれば (出力で Hello from Docker というテキストを探します)、VM には Docker ランタイムが正常にインストールされて実行されています。

VM にログインしたままの状態を維持してください。

MySQL をインストールして構成する

基幹エンタープライズ・データベースをシミュレートするために、小さい単純なデータ・セットを格納した MySQL データベースを使用します。そのデータベースを初期化するには、スキーマ・ファイルとデータ・ファイルが必要です。これらのファイルを作成してから、MySQL をインストールします。

データベースのファイルを作成する

  1. データベース初期化ファイル用のディレクトリーを作成し、カレント・ディレクトリーをそのディレクトリーに変更します。

    mkdir ~/liberty-sql

    cd ~/liberty-sql

  2. テキスト・エディターで todo-schema.sql ファイルを作成し、そのファイルに以下の内容を挿入します。
    DROP SCHEMA IF EXISTS todo;
    CREATE SCHEMA todo;
    USE todo;
    
    CREATE TABLE 'TODOLIST' (
        'L_ID' INT(8) DEFAULT NULL,
        'C_NAME' VARCHAR(254) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  3. todo-data.sql ファイルを作成し、そのファイルに以下の内容を挿入します。
    USE todo;
    
    INSERT INTO 'TODOLIST' ('L_ID','C_NAME') VALUES (1, "sample entry #1");
    INSERT INTO 'TODOLIST' ('L_ID','C_NAME') VALUES (2, "sample entry #2");
    INSERT INTO 'TODOLIST' ('L_ID','C_NAME') VALUES (3, "sample entry #3");
  4. 作成したファイルが適切なディレクトリーに格納されていることを確認するために、ls -l /home/ibmcloud/liberty-sql/ を実行します。このコマンドの出力は、以下のようになっていなければなりません。
    -rw-r--r-- 1 ibmcloud ibmcloud 227 Jan 1 12:00 todo-data.sql
    -rw-r--r-- 1 ibmcloud ibmcloud 190 Jan 1 12:00 todo-schema.sql

これで、Docker コンテナーを作成する際にデータベースを初期化するために必要なスキーマ・ファイルとデータ・ファイルが用意できました。VM にログインしたままの状態を維持してください。

データベースをインストールする

  1. 以下のコマンドを実行して、MySQL コンテナー・インスタンスを作成し、2 つの初期化ファイルからサンプル・データをロードします。

    sudo docker run -d --name mysql-tutum -p 3306:3306 -v /home/ibmcloud:/home/ibmcloud -e MYSQL_PASS=passw0rd -e STARTUP_SQL="/home/ibmcloud/liberty-sql/todo-schema.sql /home/ibmcloud/liberty-sql/todo-data.sql" tutum/mysql

    • -d は、コンテナーを対話式ではなくバックグラウンドで実行します。
    • mysql-tutum は、イメージから作成されるコンテナーに指定する名前です。
    • 3306:3306 は、MySQL ポートを転送して、ホスト OS の IP アドレスから MySQL ポートにアクセスできるようにします。
    • /home/ibmcloud:/home/ibmcloud は、ディレクトリーをバインドして、ホスト OS 内のディレクトリーをコンテナー内で使用できるようにします。
    • MYSQL_PASS は、データベースのメイン・ユーザーのパスワードを設定します (この例では、passw0rd に設定します)。
    • STARTUP_SQL は、コンテナーに対し、スペース区切りリストで指定された順序で SQL ファイルを実行するよう指示します。
    • tutum/mysql は、コンテナーの作成元とする Docker イメージの名前です。
  2. MySQL コンテナーが稼働中であることを確認するために、sudo docker ps を実行します。以下のような出力を確認してください。
    CONTAINER ID        IMAGE          STATUS              NAMES
    dd1234567890         tutum/mysql    Up 28 seconds    mysql-tutum

これで、mysql-tutum という名前の Docker コンテナーが稼働中の状態になりました。このコンテナーの中で稼働する MySQL データベース・サーバーは、ポート 3306 にバインドされています。このデータベース・サーバーには todo という名前のデータベースが格納されていて、そのデータベース内の TODOLIST という名前のテーブルに、To Do リストの一連の項目としてのサンプル・データが含まれています。

Java アプリを生成してインポートし、ローカルにデプロイする

SQL データベースに接続する Java アプリが必要です。ここではアプリをゼロから作成するのではなく、Bluemix の「Java Cloudant Web Starter (Java Cloudant Web スターター)」ボイラープレートによって作成されるアプリのインスタンスを使用します。

アプリのインスタンスを作成する

  1. Bluemix ダッシュボードで、hybrid-cloud スペースを選択します。
  2. Bluenix カタログの「Boilerplates (ボイラープレート)」セクションで、「Java Cloudant Web Starter (Java Cloudant Web スターター)」を選択します。
  3. このボイラープレートの「Create an app (アプリの作成)」ダイアログ・ボックスで、アプリの名前として <自分の名前のイニシャル>-java-sql を指定します (またはイニシャルの代わりに、アプリの名前が一意になるように他の ID を使用します)。その他の設定はデフォルト値のままにして、「CREATE (作成)」をクリックします。
  4. ボイラープレートのアプリケーション・ランタイムが起動して、アプリのステージングが完了したら、アプリの概要ページで「Your app is running (アプリは稼働しています)」と表示されているのを確認し、ページ上部にある経路のリンクをクリックしてアプリを実行します。
  5. ブラウザーの新しいタブまたはウィンドウが開き、Favorites Organizer (旧 Java DB Web Starter) のホーム・ページが表示されます。 Favorites Organizer (旧 Java DB Web Starter) のホーム・ページのスクリーンショット
    Favorites Organizer (旧 Java DB Web Starter) のホーム・ページのスクリーンショット

    To Do リストの項目を追加、変更、削除してアプリを試してみます。これらの項目は、SQL データベースに保管されています。
  6. Bluemix ダッシュボードに戻ります。左ペインで「コーディングの開始」を選択し、右ペインで「Download Starter Code (スターター・コードのダウンロード)」ボタンまでスクロールダウンして、このボタンをクリックします。これで、<自分の名前のイニシャル>-java-sql.zip がローカル・コンピューターにダウンロードされます。

サンプル・アプリのコードを Eclipse にインポートする

Bluemix からダウンロードするスターター・コードは、便利なことに Eclipse プロジェクトとしてパッケージ化されています。サンプル・アプリのコードに目を通せるよう、上記「読む」からリンクされている Eclipse documentation に従って、プロジェクトを Eclipse にインポートします。インポート・タイプには「Select archive file (アーカイブ・ファイルの選択)」を選択し、ローカル・システムにダウンロードしたスターター・コードの .zip ファイルを参照して選択します。

インポート操作によって、Eclipse に JavaDBApp プロジェクトが作成されます。

サンプル・アプリを Liberty サーバーにデプロイする

Eclipse はアプリのコードを編集するためだけでなく、サンプル・アプリを Liberty サーバーにデプロイして実行するためにも使用することができます。

上記「読む」からリンクされている Eclipse documentation に従って、追加するプロジェクトとして JavaDBApp を指定し、そのプロジェクトの追加先となるサーバーとして、localhost にある wlp-8.5.5.8 defaultServer を指定します。

これで「Servers (サーバー)」ビューに、このサーバーと関連付けられたプロジェクトが表示されます。

この時点で、サーバーを起動して、そのサーバー内でアプリを実行し、アプリの GUI を開いてテストすることもできますが、そうしたとしてもあまり意味はありません。アプリはまだデータベースに接続されていないので、To Do リストの代わりに「Error (エラー)」と表示されるだけです。

ステップ 2. データベースに直接接続する

このステップでは、MySQL に接続するようにローカル Liberty サーバーをセットアップし、その接続を使用してアプリをテストします。

MySQL ドライバー JAR を追加する

  1. MySQL の「Download Connector/J」ページにアクセスします。(Microsoft Windows ドライバーではなく) プラットフォームに依存しないドライバーの最新バージョン (このチュートリアルを作成している時点では、v5.1.38) のアーカイブをダウンロードして保存します。
  2. ダウンロードしたアーカイブを解凍して .jar ファイル (mysql-connector-java-5.1.38-bin.jar) を入手します。
  3. Liberty サーバーのディレクトリー構造で、mysql-connector-java-5.1.35-bin.jar を wlp/usr/servers/defaultServer/lib ディレクトリーに追加します (このディレクトリーが存在しない場合は作成してください)。

MySQL 用にサーバーを構成する

次は、Eclipse で Liberty サーバー (WebSphere Application Server Liberty Profile) のサーバー構成を変更して、MySQL データベースのデータ・ソースを追加し、アプリのコンテキスト・ルートを設定します。

  1. Eclipse で、データ・ソースを必要とするアプリケーション依存関係を確認します。JavaDBApp プロジェクトにナビゲートします。このプロジェクトの「Java Resources (Java リソース)」フォルダーに、アプリケーションのソース・コードが格納されています。persistence.xml ファイル (通常は、パス src/main/resources/META-INF/ または src/META-INF/ にあります) を開きます。JTA データ・ソースを定義する以下の行を見つけます。
    <jta-data-source>java:comp/env/jdbc/mydbdatasource</jta-data-source>

    この行は、アプリケーションの永続ユニット openjpa-todo を、JNDI (Java Naming and Directory Interface) 名が jdbc/mydbdatasource となっているデータ・ソースにバインドしています。従って、サーバーでは JNDI に jdbc/mydbdatasource として登録されているデータ・ソースを定義する必要があります。
  2. Eclipse の「Servers (サーバー)」ビューで、サーバーに関連付けられている「Server Configuration [server.xml] (サーバー構成 [server.xml])」のファイルを開きます。
  3. 「Server Configuration (サーバー構成)」ビューで、「Designer (設計)」タブまたは「Source (ソース)」タブのいずれかを使用して、データ・ソースと共有ライブラリーを追加します (ライブラリーの <fileset> は、MySQL ドライバーの JAR ファイルの場所を指定するように構成されていることに注意してください)。
    <dataSource jndiName="jdbc/mydbdatasource">
        <jdbcDriver libraryRef="mysql-connector"/>
        <properties URL="jdbc:mysql://hostname:port/todo?relaxAutoCommit=true" user="user" 
            password="password"/>
    </dataSource>
    <library id="mysql-connector" name="MySQL Connector" description="MySQL JDBC Driver">
        <fileset id="mysql-connector-jar" dir="${server.config.dir}/lib" 
            includes="mysql-connector-java-*.jar"/>
    </library>
    URL プロパティーの値で、以下の変数を置き換えます。
    • hostname (MySQL データベースをホストする VM の IP アドレス): <仮想マシンの IP アドレス>
    • port (MySQL コンテナーを作成したときに設定したポート): 3306
    • user (MySQL コンテナーのデフォルト・ユーザー): admin
    • password (MySQL コンテナーを作成したときに設定したパスワード): passw0rd
  4. (liberty-IRDS などのサブディレクトリーからではなく) ルート・ディレクトリーからアプリにアクセスできるようにするために、以下の Web アプリケーション構成を追加します。
    <webApplication id="liberty-IRDS" name="liberty-IRDS" location="liberty-IRDS.war" context-root="/"/>

「Console (コンソール)」ビューで説明されているように、アプリにアクセスするための URL は http://localhost:9080/ です。以上のステップで、サーバーにはデータベースにアクセスするためのデータ・ソースが構成されて、アプリケーションのコンテキスト・ルートが設定されました。

直接接続を使用してアプリをテストする

アプリを実行して、アプリが MySQL に正常に接続することを確認します。Eclipse で、以下の手順に従ってください。

  1. 「Servers (サーバー)」ビューで、サーバーとアプリが起動されて同期した状態になっていることを確認します。そうなっていない場合は、サーバーを起動して、それによってアプリも起動されることを確認します。起動されて同期した状態になっていることを確認しなければならない項目は、localhost にある wlp-8.5.5.8 defaultServerJavaDBApp(liberty-IRDS) です。
  2. アプリの Web GUI を開くために、Eclipse または外部 Web ブラウザーで http://localhost:9080/ にアクセスします。アプリの Favorites Organizer (旧 Java DB Web Starter) の Web ページが開きます。データベースにアクセスしている間、To Do リストが表示される領域に、「Please wait while the database is being initialized ... (データベースを初期化中です。お待ちください...)」というメッセージが表示されます。アプリがデータベースに正常に接続すると、To Do リストに項目が取り込まれます。デフォルトの項目は、サンプル・エントリーの #1、#2、#3 です (アプリがデータベースに接続してデータを正常にロードすることができない場合、To Do 領域に「Error (エラー)」と表示されます)。

アプリがローカルで実行中になり、仮想マシンでホストされている MySQL データベースを使用するようになりました。

ステップ 3. Secure Gateway を介して接続する

このステップでは、MySQL データベースを接続先とする Secure Gateway を構成し、このゲートウェイを使用するようにアプリを構成します。

ゲートウェイと宛先を構成する

Secure Gateway サービスのインスタンスを作成し、そのインスタンスを使用してゲートウェイを構成し、ゲートウェイに宛先 (仮想マシン内で稼働している MySQL データベース) を追加します。

Bluemix ダッシュボードで、以下の手順に従います。

  1. hybrid-cloud スペースを選択します。
  2. hybrid-cloud スペースのメイン・ビューで、「USE SERVICES OR APIS (サービスまたは API の使用)」を選択します。
  3. サービス・カタログで「Secure Gateway」を選択します。
  4. Secure Gateway の作成ページで、デフォルトの設定を受け入れて「CREATE (作成)」をクリックします。
  5. Secure Gateway ページで、「ADD GATEWAY (ゲートウェイの追加)」をクリックします。
  6. 「Add Gateway (ゲートウェイの追加)」ページで、ゲートウェイの名前を「My Data Center」に設定します。トークンを使用するためのオプションをクリアします。 「Add Gateway (ゲートウェイの追加)」ページのスクリーンショット
    「Add Gateway (ゲートウェイの追加)」ページのスクリーンショット
  7. 「ADD DESTINATIONS (宛先の追加)」を選択します。
  8. 「Add Destinations (宛先の追加)」ページで、以下の表に記載する設定を使用して宛先を追加します (これらの値を入力した後、右側にある「+」記号をクリックします)。
    プロパティー
    Destination name (宛先名)To Do Database
    Hostname or IP address (ホスト名または IP アドレス)<仮想マシンの IP アドレス>
    Port (ポート)3306
    Transport (トランスポート)TCP
    To Do Database という宛先がリストに表示されます。
  9. オプション: 宛先情報ボタン (アルファベット「i」が丸で囲まれたような外観のボタン) をクリックして、宛先の構成を表示します。
    プロパティー
    Name (名前)To Do Database
    Destination ID (宛先 ID)aaaA0AAAA00_vfY
    Cloud Host : Port (クラウド・ホスト: ポート)cap-sg-prd-1.integration.ibmcloud.com:15000
    Destination Host : Port (宛先ホスト: ポート)<仮想マシンの IP アドレス>:3306
    Created by (作成者)John Doe at 7/1/2015, 12:05:00 PM
    Last modified by (最終更新者)John Doe at 7/1/2015, 12:05:01 PM
    このゲートウェイはプロキシーとして、クラウドのホストとポートを宛先のホストとポートにマッピングします。宛先のホストとポートは、宛先を作成したときに指定した値です。宛先は、このゲートウェイが接続するターゲット、つまり MySQL データベースです。クラウドのホストとポートは、アプリケーションがリモートで宛先にアクセスするために使用する値です。

データベースにアクセスするためのゲートウェイと宛先の構成は、これで完了です。

ゲートウェイ・クライアントをセットアップする

ゲートウェイは、データベースをホストするデータ・センター内にデプロイされたクライアントを必要とします。このゲートウェイ・クライアントは、データ・センター内で実行されているデータベースと、Bluemix 内で実行されているゲートウェイの両方にネットワークでアクセスできなければなりません。通常、ゲートウェイ・クライアントは、データベースのホストと同じネットワーク・セグメント (サブネットまたは VLAN) に接続されているホストにインストールされ、そのセグメントはインターネットに接続されています (または別のネットワークとして Bluemix に接続されています)。

ゲートウェイ・クライアントはホスト上でネイティブに実行することも、Docker コンテナーまたは IBM DataPower 内で実行することもできます。ここでは Docker コンテナーを使用します。Docker コンテナーを、データ・センターをシミュレートする VM にデプロイします。この VM には、すでに Docker ランタイムがインストールされています。

ゲートウェイ・クライアントをインストールして実行する

まず、ゲートウェイ・クライアントの Docker 接続コマンドを取得します。Bluemix ダッシュボードで、以下の手順に従ってください。

  1. hybrid-cloud スペースに含まれる Secure Gateway サービス・インスタンスの Secure Gateway ダッシュボードにナビゲートします。
  2. 「My Data Center (マイ・データ・センター)」ラベルをクリックして「Gateway (ゲートウェイ)」ページにアクセスします。
  3. 「Gateway (ゲートウェイ)」ページで、「To Do Database」という宛先が 1 つリストアップされていることを確認します。「Connect Gateway (ゲートウェイの接続)」をクリックすると、ページには「How would you like to connect this new gateway? (この新規ゲートウェイをどの方法で接続しますか?)」というメッセージと一緒に 3 つの選択肢 (IBM Installer、Docker、IBM DataPower) が表示されます。
  4. Docker アイコンを選択します。すると、ゲートウェイの Docker クライアントをインストールして実行するためのコマンドが表示されます。

    docker run -it ibmcom/secure-gateway-client <ゲートウェイの ID>

    Bluemix は、このゲートウェイの ID によって、クライアントがどのゲートウェイに接続する必要があるかを判別します。上記 Docker コマンドは、この後すぐ必要になるので、メモしておいてください。

次に、VM にゲートウェイ・クライアントをインストールして実行します。

  1. VM を作成したときに指定した認証鍵を使用して仮想マシンにログインします。UNIX/Linux シェルまたは Git Bash シェルから以下のコマンドを実行します。

    ssh -i todo.key ibmcloud@<仮想マシンの IP アドレス>

  2. Docker ランタイムが正常に稼働していることを確認するために、以下のコマンドを実行します。

    sudo docker run hello-world

  3. ゲートウェイの Docker クライアントをインストールして実行する目的で Bluemix に表示された、以下のコマンドを実行します。

    sudo docker run -it ibmcom/secure-gateway-client <ゲートウェイの ID>

ゲートウェイ・クライアントが稼働中になり、接続された状態として示されます。「Gateway (ゲートウェイ)」ページには、ゲートウェイが接続済みであることが示されます。クライアントを実行するために使用したシェルは、現在はコンテナーに付属していて、ゲートウェイ・クライアントのシェルを実行しています。このシェルは、接続が開いたり閉じたりすると表示されます。

ゲートウェイ・クライアントを構成する

ゲートウェイ・クライアントには、許可および拒否するホスト名とポートの組み合わせを指定する、アクセス制御リスト (ACL) が構成されます。新しく作成されたゲートウェイ・クライアントの ACL は、デフォルトでは空の状態になっています。つまり、ホスト名とポートのすべての組み合わせがブロックされるということです。これはセキュリティーのための機能であり、ゲートウェイ・クライアントの管理者が宛先のホスト名とポートの組み合わせをゲートウェイ・クライアントの ACL に追加しない限り、Bluemix のゲートウェイ管理者が新しい宛先へのアクセスを開始しようとしても、そのアクセスはブロックされます。

ゲートウェイが宛先に接続できるようにするために、ゲートウェイ・クライアントの ACL を構成します。

  1. ゲートウェイ・クライアントの Docker コンテナーを起動したときに、クライアントのシェルにはコマンド・ラインが付属していたので、Enter キーを押して、クライアントの CLI のプロンプトを表示します。
  2. 現在の ACL 構成を表示します。以下のように、すべてのポートがブロックされた状態になっています。
    cli> show acl
    [2016-01-01 12:00:00.000] [INFO] (Client PID 1) There are no Access Control 
    List entries, the ACL Deny All flag is set to: true
  3. 宛先のホスト名とポート (ゲートウェイの宛先を構成するために使用したホスト名とポート) を ACL に追加します。
    cli> acl allow 159.122.240.100:3306
    cli> show acl
    ------------------------------------------------------------------
      -- Secure Gateway Client Access Control List --
    hostname                               port      value
    virtual machine's IP address    3306    Allow
    ------------------------------------------------------------------

これで、<仮想マシンの IP アドレス>:3306 に位置する宛先へのアクセスをゲートウェイに許可するように、ゲートウェイ・クライアントの ACL が構成されました。

Secure Gateway 用にアプリケーション・サーバーを構成する

ここまでで、Secure Gateway サービス・インスタンスに、MySQL データベースに接続するためのゲートウェイと宛先が構成されたので、次は、そのゲートウェイの宛先を使用するようにアプリを変更する必要があります。宛先の構成を調べると (My Data Center ゲートウェイ・ページで、丸で囲まれた i ボタンをクリックしてください)、構成の「Cloud Host : Port (クラウド・ホスト: ポート)」に値が設定されていることがわかります。この例の場合、その値は cap-sg-prd-1.integration.ibmcloud.com:15000 です。これが、アプリがゲートウェイの宛先を介してデータベースにアクセスするために使用する URL です。

Eclipse で (「MySQL 用にサーバーを構成する」の手順で行ったように)、Liberty サーバーのサーバー構成を変更して、ゲートウェイの宛先 URL を使用するようにデータ・ソースを更新します。

  1. 「Servers (サーバー)」ビューで、サーバーに関連付けられている「Server Configuration [server.xml] (サーバー構成 [server.xml])」のファイルを開きます。
  2. 「Server Configuration (サーバー構成)」ビューで、「Designer (設計)」タブまたは「Source (ソース)」タブのいずれかを使用して、データ・ソースの URL を編集します。今回は、以下の値を使用します。
    • hostname (ゲートウェイ宛先のクラウド・ホスト): cap-sg-prd-1.integration.ibmcloud.com
    • port (ゲートウェイ宛先のクラウド・ポート): 15000
    • user (変更なし): admin
    • password (変更なし): passw0rd

「Console (コンソール)」ビューを見るとわかるように、Liberty サーバーが新しい構成で自動的に更新されます。

ゲートウェイ接続を使用してローカル・アプリをテストする

アプリケーションを実行するために、ブラウザーで http://localhost:9080/ にアクセスします。アプリの Favorites Organizer (旧 Java DB Web Starter) のウィンドウが開き、To Do リストのデータが表示されます。仮想マシンにログインしたシェルで、ゲートウェイ・クライアントの CLI へのログインを表示します。ログに新しい接続が開かれたことが記録されていれば、ローカル・アプリはゲートウェイを介してデータベースに接続していることになります。

ステップ 4. Bluemix にデプロイする

ゲートウェイを使用する場合も、ローカル・アプリが正常に機能するようになったので、今度はアプリを Bluemix にデプロイして、そこからも正常に機能することを確認します。

サーバーとアプリを Bluemix にデプロイする

アプリを Bluemix 上で実行するには、アプリ (アプリの JavaDBApp.war ファイル) とそのサーバー構成 (サーバーの server.xml ファイルとデータベース・ドライバー mysql-connector-java-5.1.35-bin.jar) をどちらもデプロイする必要があります。それには、サーバーをアプリにパッケージ化して、そのパッケージをデプロイします。この手順はコマンド・ラインから実行することも、Eclipse Tools for Bluemix を使用して実行することもできます。ここでは、コマンド・ラインを使用してサーバーをパッケージ化してプッシュする方法を説明します (この説明から、Eclipse ツールが自動的に実行するステップを理解できるはずです)。

パッケージ化してプッシュする

  1. ディスク上の Liberty サーバーのインストール・ディレクトリー LIBERTY_ROOT がカレント・ディレクトリーとなるようにします。
  2. サーバーが実行中の場合はサーバーを停止します。

    wlp/bin/server stop defaultServer

  3. 以下のコマンドを実行して、サーバーをパッケージ化します。

    wlp/bin/server package defaultServer --include=usr

  4. Cloud Foundry CLI から、自分の Bluemix アカウントの組織に含まれるスペースにログインします。

    cf login -a <API_URL> -u <ユーザー名> -o <組織> -s hybrid-cloud

    <API_URL> は、Cloud Foundry プロバイダー、つまり Bluemix の URL です (米国南部の https://api.ng.bluemix.net または英国の https://api.eu-gb.bluemix.net)。<ユーザー名> と <組織> は、通常は、両方とも e-メール・アドレスです)。
  5. パッケージ化されたサーバーを Bluemix にプッシュします。

    cf push <アプリ名> -p wlp/usr/servers/defaultServer/defaultServer.zip

    <アプリ名> は、Bluemix 内でアプリに指定する名前です。この名前は一意でなければなりません。従って、アプリの経路も一意になります。

通常、アプリのアップロードには 1、2 分かかり、アプリが起動するまでには数分かかります。Cloud Foundry CLI にアプリが起動したというメッセージが表示されて、Bluemix ダッシュボードにアプリが実行中になったことが示された時点で、デプロイメントは完了です。

デプロイされたアプリを確認する

アプリが Bluemix 内で実行中になったら、アプリを確認して、サーバー構成が正常にアップロードされたことを確認します。Bluemix ダッシュボードで、以下の手順に従ってください。

  1. アプリのページにナビゲートして、「Files (ファイル)」を選択します。
  2. app/wlp/usr/servers/defaultServer/server.xml までナビゲートして選択します。
  3. MySQL 用にサーバーを構成する」と「Secure Gateway 用にアプリケーション・サーバーを構成する」のステップでサーバー構成に対して行ったカスタマイズが、server.xml ファイル内に含まれていることを確認します。具体的には、以下の点を確認します。
    • JNDI 名が jdbc/mydbdatasource となっているデータ・ソースが含まれていること。
    • データ・ソースの URL プロパティーが cap-sg-prd-1.integration.ibmcloud.com に組み込まれていること。
    • データ・ソースがライブラリー mysql-connector にリンクしていて、mysql-connector-java-*.jar と一致するファイル・セットが設定されていること。
    • ファイルが、コンテキスト・ルートがルート・ディレクトリーとなっている Web アプリケーションを参照していること。
  4. app/wlp/usr/servers/defaultServer/lib までナビゲートします。このディレクトリーに、MySQL ドライバー (例えば、mysql-connector-java-5.1.35-bin.jar) が格納されていることを確認します。

これで、アプリが Bluemix にデプロイされていることだけでなく、アプリのサーバー構成もデプロイされていることを確認できました。

Bluemix でアプリをテストする

Bluemix 内でアプリを実行して、アプリがゲートウェイを介して正常に MySQL に接続することを確認します。アプリを実行するには、ブラウザーで http://<アプリ名>.mybluemix.net にアクセスします。アプリの Favorites Organizer (旧 Java DB Web Starter) のウィンドウが開き、To Do リストのデータが表示されます。仮想マシンにログインしたシェルで、ゲートウェイ・クライアントの CLI へのログインを表示します。ログに新しい接続が開かれたことが記録されていれば、Bluemix アプリはゲートウェイを介してデータベースに接続できるということになります。

まとめ

このチュートリアルでは、Java アプリケーションとそのサーバー構成を Bluemix にデプロイし、Secure Gateway を使用して VM 内で稼働している MySQL データベースにアプリを接続しました。基幹エンタープライズ・データベースを実行するプライベート・データ・センターがこの VM を置き換えたとしても、アプリケーションと Secure Gateway はほとんど同じように接続します。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Java technology, Web development
ArticleID=1033467
ArticleTitle=Bluemix を利用したハイブリッド・クラウドに Java アプリケーションをマイグレーションする、パート 4
publish-date=06172016