クラウドへのデプロイメントに IBM Application Pattern for Java を利用する

Java 仮想アプリケーションの作成とデプロイメントをわずか数分で行う

IBM Application Pattern for Java を使用すると、既存のあらゆる Java アプリケーションを簡単にクラウド環境に移して、そのアプリケーションをプラットフォームまたは変更可能なテンプレートのいずれかとして再利用することができます。この記事では、IBM Application Pattern for Java が IBM のクラウド・オファリングでどのように機能するかを説明します。2 本の動画によるデモと併せ、ステップバイステップの手順を通して、さまざまなシナリオでこのパターンを使って Java 仮想アプリケーションを作成、デプロイ、モニターする方法を学んでください。

Chris Bailey, Java Service Architect, IBM

Chris BaileyChris Bailey は、英国の Hursley Park Development Lab を拠点とする IBM JTC (Java Technology Center) チームの一員です。IBM Java サービスおよびサポート組織でテクニカル・アーキテクトを務める彼は、IBM SDK のユーザーをアプリケーション・デプロイメントの成功に導くことを任務としています。また、新しい要件の収集と評価、新しいデバッグ機能とツールの実現、資料の改善、そしてIBM SDK for Java の全体的な品質改善にも携わっています。


developerWorks
        プロフェッショナル著者レベル

2012年 10月 18日

クラウド・コンピューティングの狙いの 1 つは、ハードウェアとソフトウェアのインフラストラクチャーを理解して管理するという複雑な作業から開発者を解放して、開発者がアプリケーションの機能に専念できるようにすることです。IaaS (Infrastructure as a Service) タイプのクラウドと PaaS (Platform as a Service) タイプのクラウドは、この目標をそれぞれに異なるレベルで実現します。IaaS クラウドは、開発者が独自のソフトウェアをインストールできるハードウェアを提供します。PaaS クラウドはさらにソフトウェアを提供し、開発者がアプリケーションの作成とデプロイだけに集中できるように、インフラストラクチャーとミドルウェアのデプロイメントを開発者に代わって処理します。この記事では、クラウドで Java を実行する際の PaaS と IaaS の選択肢について概説した後、IBM が IBM Application Pattern for Java を介して提供しているサービスについて詳しく説明します。

クラウドでの Java アプリケーション

大手クラウド・プロバイダーの大半は、クラウド・サービスでの Java 技術の使用を許可しているか、あるいはユーザーが使用できる形で Java 技術を提供しています。クラウド・オファリングのうち、両極端のタイプの一方にあるのは Amazon EC2 です。Amazon EC2 はまさしく IaaS クラウドであり、ユーザーが AMI (Amazon Machine Image) をデプロイするという仕組みになっています。Amazon の説明によると、AMI とは「Amazon Elastic Compute Cloud (EC2) 内で仮想マシンを作成するために使用する、事前構成された特殊なタイプのオペレーティング・システムおよび仮想アプリケーション・ソフトウェア」です。つまり、Java ランタイムを含め、ユーザーが必要なソフトウェアを組み込んで作成したイメージをデプロイするか、あるいは該当するソフトウェアが含まれる既製のイメージを選択してデプロイする必要があります。

中間的なタイプとして位置するのは、Microsoft の Azure や Salesforce.com の Heroku などのクラウド・オファリングです。この 2 つは両方ともソフトウェア環境を提供する PaaS クラウドであり、Java アプリケーションを実行できるようになっています。ただし 2 つのうち、Java ランタイムが用意されているのは、OpenJDK 6 を使用できる Heroku だけです。Azure については、ユーザーが独自の Java ランタイムを提供しなければなりません。

Google App Engine と Amazon Elastic Beanstalk は、どちらも典型的なアプリケーション・オファリングです。ユーザーが仮想マシンやソフトウェアのインストールについて心配する必要はありません。ユーザーはただ単に、アプリケーションを提供するだけです。その一方、この 2 つで実行できるのは Web ベースのアプリケーションに限られます。さらに、どちらのサービスでも、これらの Web アプリケーションで実行可能な内容には制限が課せられます。


IBM が提供するクラウドへのデプロイメント

IBM SmarterCloud Application Services の無料試用版

developerWorks から、IBM SmartCloud Application Services の 90 日間無料試用版を入手することができます。試用版では、5 つまでの仮想マシンをデプロイし、最大 30GB のストレージを使用することができます。IBM Application Pattern for Java、ならびに Web Application、Transactional Database、および Data Mart の各パターンには、この試用版からアクセスすることができます。つまり、IBM が提供するクラウドに独自のアプリケーションを実際にデプロイすることも、サンプル・アプリケーション・テンプレートを使ってこの製品を試してみることもできます。

IBM では、IaaS タイプの機能と PaaS タイプの機能を併せ持つ一連の技術を提供するという手法を採っています。IaaS タイプの機能として提供されているのは、「仮想アプライアンス」をデプロイする機能です。仮想アプライアンスとは、標準の DMTF (Distributed Management Task Force) OVF (Open Virtualization Format) 仕様に従って 1 つのイメージに事前にパッケージ化されたソフトウェア・スタックのことです。ソフトウェア・スタックには、オペレーティング・システム、ソフトウェア・アプリケーション、ミドルウェア、アプリケーションおよび追加のライブラリー、そしてそのソフトウェア・スタックを構成して起動するためのメタデータが含まれます。仮想アプライアンスに含まれるソフトウェア・スタックは、スクリプトを使用して再構成することもできます。

PaaS タイプの機能は、「仮想システム・パターン」と「仮想アプリケーション・パターン」という 2 つのタイプのワークロード・パターンによって提供されています。

  • 仮想システム・パターンとは、トポロジーを中心としたデプロイメントの定義です。「Pattern Editor (パターン・エディター)」を使用すると、トポロジーを設計することができますが、そのために定義する必要があるのは、数々の仮想マシン・イメージ、これらの仮想マシンにインストールするソフトウェア・コンポーネント、そしてこれらのソフトウェアを構成するスクリプト・パッケージ (メタデータ) の使用についてです。デプロイメントを定義するには、手作業で作成した仮想マシン、インポートした仮想マシン、または IBM が提供する各種 Hypervisor Edition イメージのいずれかを使用することができます。アプリケーションをインストールするための構成スクリプトと併せ、繰り返されるトポロジーに対応する仮想システム・パターンを作成した後は、その仮想システム・パターンを標準のプラットフォームとして再利用することができます。
  • 仮想アプリケーション・パターンとは、アプリケーションを中心としたデプロイメントの定義です。「Virtual Application Builder (仮想アプリケーション・ビルダー)」を使用すると、データベース接続やメッセージング・キューなどに対処するコンポーネント、そしてスケーラビリティーやサービス・レベル・アグリーメント (SLA) などに対処するポリシーを使用して、アプリケーション本体とそのアプリケーションに必要なリソースの定義をプロビジョニングすることができます。

図 1 に、IBM が提供するクラウドへデプロイするためのこれら 3 つのメカニズムを示します。

図 1. IBM が提供するクラウドへデプロイするためのメカニズム
IBM が提供するクラウドへデプロイするためのメカニズムを示す図。仮想アプライアンスは、スタックに含まれるオペレーティング・システム、アプリケーション、メタデータを結合します。仮想システム・パターンは、仮想アプライアンスの集合です。仮想アプリケーション・パターンは、アプリケーション中心のメカニズムです。

表 1 に、3 つのデプロイメント・メカニズムの特徴を比較します。

表 1. デプロイメント・メカニズムの比較
仮想アプライアンス仮想システム・パターン仮想アプリケーション・パターン

OS 上でのソフトウェアの標準的なインストールと構成

従来の運営および管理モデル

インフラストラクチャー駆動の弾力性

拡張/取り込みによるイメージの作成

既存のアプリケーションを使用することによる、標準的な総所有コスト (TCO)

ミドルウェア・トポロジーの自動デプロイメント

従来の運営および管理モデル

アプリケーションおよびインフラストラクチャー駆動の弾力性

仮想アプリケーションを使用することで改善される TCO

エキスパート・パターンを使用した高度な自動デプロイメント

弾力性のあるワークロード管理サービスを利用

ビジネス・ポリシー駆動の弾力性

クラウド環境に応じて作成

クラウド・アプリケーションを使用することによる最善の TCO

IBM のクラウド・オファリング

仮想アプライアンス、仮想システム・パターン、および仮想アプリケーション・パターンは、IBM の 3 つのクラウド・オファリングのすべてで使用することができます。オファリングには以下のように、IBM 提供のパブリック・クラウドから、プライベート・クラウドで使用するハードウェアおよびソフトウェアを統合したアプライアンスまであります。

  • IBM SmartCloud: IBM SmarterCloud は、IBM によってホストされるクラウドです。特定のクライアント専用のプライベート・クラウドにすることも、個々のクライアントに合わせてプロビジョニングされたパブリック・クラウドとして利用することもできます。このオファリングは「IBM によって提供されるクラウド・ソリューション」だと思ってください。
  • IBM Workload Deployer: IBM Workload Deployer は、ユーザーが提供するハードウェアに仮想アプライアンスとワークロード・パターンをデプロイするためのプロビジョニング機能および管理機能を備えたハードウェア・アプライアンスです。このオファリングでは、既存のハードウェア・リソースにクラウドの機能を持たせることができます。このオファリングは「Bring Your Own Cloud (独自のハードウェアを利用したクラウド)」を実現するためのものだと思ってください。
  • IBM PureApplication System: IBM PureApplication System は、ワークロードを最適化したハードウェアおよびソフトウェアの統合アプライアンスです。プロビジョニング機能および管理機能と併せて、ワークロードをデプロイする対象として最適化されたハードウェアを提供します。このオファリングは「既製のクラウド・ソリューション」だと思ってください。

この 3 つのオファリングのすべてに同じデプロイメント・メカニズムと管理メカニズムが使用されているということは、あるデプロイメント・オファリングから別のオファリングにアプリケーションを容易に移せること、そして複数のデプロイメント・オファリングを使用したハイブリッド・モデルを実現できることを意味します。


IBM Application Pattern for Java

IBM Application Pattern for Java は、IBM が提供するクラウドに新規または既存の Java アプリケーションを迅速かつ簡単にデプロイすることを可能にする仮想アプリケーション・パターンです。デプロイメント・プロセスが単純化される理由は、このパターンには定義済みのビルディング・ブロックが用意されていて、デフォルトの機能が組み込まれているためです。この単純さが作業を迅速化し、大抵の Java 仮想アプリケーションは 3 分もかからずに作成することができます!

Java 仮想アプリケーションのビルディング・ブロック

IBM Application Pattern for Java には現在、新しい Java 仮想アプリケーションを作成するために使用できる、以下の 5 つの単純なビルディング・ブロックが用意されています。これらのビルディング・ブロックを使用すると、アプリケーションをデプロイできるのみならず、そのアプリケーションに追加で必要となるあらゆるライブラリーまたは構成ファイルをデプロイすることや、ファイアウォールの受信接続と送信接続を構成すること、さらにはアプリケーションのログ・ファイルを付属のモニター・フレームワークに追加することができます。

  • Java application (Java アプリケーション): このコンポーネントを使用すると、Java アプリケーションの主要部分の提供および構成が可能になります。アプリケーション本体は、コンパイル済み Java アプリケーション・コードを含むアーカイブ・ファイル (例えば、ZIP、TAR.GZ、TGZ などのファイル) として提供する必要があります。アプリケーションを提供した後、そのアプリケーションの実行方法に関する適切なオプションを宣言します。オプションの例としては、「Main Class (メイン・クラス)」(例えば、com.ibm.sample.HelloWorld と任意のパラメーターおよび追加クラスパス・エントリーを指定する方法) や「Command Line (コマンド行)」(起動スクリプト (/bin/start.sh など) によってアプリケーションを起動する場合) などがあります。

    Health Center

    IBM Monitoring and Diagnostic Tools for Java - Health Center は、IBM Java Virtual Machine 上で実行中の Java アプリケーションをモニターするために使用できる、オーバーヘッドの小さい無料の診断ツールです。このツールは、IBM Support Assistant の一部として入手することができます。IBM Application Pattern for Java の「遅延接続」機能を使用すれば、ユーザーが実行時に Health Center によるモニターを開始することができます。

    デプロイする Java アプリケーションを構成できる他にも、オプションで「JVM Policy (JVM ポリシー)」を追加して、Java ランタイムの構成を変更することができます。JVM ポリシーを使用すれば、Java ヒープの最小サイズと最大サイズを設定したり、デバッグ・モードや Health Center によるモニターを有効にしたり、あるいはその他の「Generic JVM arguments (一般 JVM 引数)」を追加したりすることができます。デバッグ・モードまたは Health Center によるモニターを有効にすると、必要なファイアウォール・ポートをオープンすることになるため、JVM ポリシーでは、Java アプリケーションへの接続を許可する IP アドレスの範囲を制限することができます。

  • Additional archive file (追加アーカイブ・ファイル): このコンポーネントを使用すると、仮想アプリケーションにファイルを追加できるようになります。そのためにこのコンポーネントでは、追加ファイルが含まれたアーカイブ・ファイルを提供するという方法を用います。追加アーカイブ・ファイルは、指定した場所にそのままの形でデプロイする Java アーカイブ・ファイル (例えば、JAR、WAR、または EAR ファイル) にすることも、追加ファイルが含まれた通常のアーカイブ・ファイル (ZIP、TAR.GZ、TGZ など) にして、後で目的の場所に解凍できるような形にすることもできます。Java アーカイブ・ファイルは、メインの Java アプリケーションが Apache Tomcat などのアプリケーション・サーバーである場合に、JDBC ドライバーなどのコンポーネントを追加したり、Web アプリケーションをデプロイしたりする際に役立ちます。通常のアーカイブ・ファイルは、デフォルトで使用されるポートを変更するためや、ユーザー ID を追加するために、server.xml ファイルなどのデフォルト構成ファイルに追加や上書きをする際に役立ちます。
  • Generic listener (一般リスナー): デフォルトでは、デプロイされたアプリケーションは、ネットワーク・トラフィックの送受信を許可しません。「Generic listener (一般リスナー)」コンポーネントを使用することで、ネットワーク・トラフィックを受信するためのファイアウォールの構成をすることができます。注意する点として、「Generic listener (一般リスナー)」はファイアウォールを構成するだけであり、これによって HTTP サーバーがデプロイされるわけではありません。ただし、IP アドレス/ネットマスクを指定して、アプリケーションへの接続を許可する IP アドレスの範囲を制限することはできます。
  • Generic target (一般ターゲット): 「Generic target (一般ターゲット)」は「Generic listener (一般リスナー)」と同等のコンポーネントですが、このコンポーネントは、ネットワーク・トラフィックの送信先へ接続できるようにするための構成に使用されます。「Generic target (一般ターゲット)」でも「Generic listener (一般リスナー)」と同様に、アプリケーションから接続可能な IP アドレスまたは IP アドレスの範囲を指定することができます。例えば、アプリケーションがデータベースに接続するとしたら、「Generic target (一般ターゲット)」を使ってデータベースへの接続を許可する必要があります。
  • Monitored file (モニター対象ファイル): このコンポーネントを使用すると、IBM SmarterCloud、IBM Workload Deployer、および IBM PureApplication System のユーザー・インターフェースが提供する「Workload Consolde (ワークロード・コンソール)」の「Log Viewer (ログ・ビューアー)」にファイルを追加することができます。「Monitored file (モニター対象ファイル)」コンポーネントでは、ワイルドカードを使用することができます。また、「Log Viewer (ログ・ビューアー)」にファイルやディレクトリーを複数追加する必要がある場合には、複数の「Monitored file (モニター対象ファイル)」コンポーネントを追加することもできます。例えば、/logs/*.log と指定すると、logs ディレクトリー内の .log 接尾辞を持つすべてのファイルが「Log Viewer (ログ・ビューアー)」に追加されます。

この 5 つの単純なコンポーネントを組み合わせることで、驚くほど幅広いサーバー・ベースの Java 仮想アプリケーションを作成してデプロイすることができます。

専門家の知見の統合: デフォルトの機能

以上のように、IBM Application Pattern for Java には、アプリケーションを簡単にデプロイし、JVM を構成し、送受信双方向のネットワーク接続を許可し、ファイルのモニター設定をするために使用できるコンポーネント一式が用意されています。けれどもそれだけではありません。このパターンには、Java アプリケーションのデプロイメントに関する専門家の知見に基づく数々のデフォルト機能も組み込まれています。例えば、以下の機能があります。

  • ライフサイクル・モニター機能: Java アプリケーションの状態をモニターし、IBM SmarterCloud、IBM Workload Deployer、および IBM PureApplication System の「Workload Consolde (ワークロード・コンソール)」に、その状態を表示します。その UI には、アプリケーションが実行中であるかどうか、アプリケーションでエラーが発生したかどうか (ゼロ以外の戻りコードで終了した場合や、異常終了または OutOfMemoryError が原因で障害が発生した場合など)、あるいは正常に終了したかどうかが示されます。エラーが発生した場合は、定義済みのロギング機能、モニター機能、およびFFDC (First Failure Data Capture) 機能を使用して、エラーの発生原因を判別できるようになっています。
  • 定義済みのロギング機能と定義済みのモニター機能: モニター対象ファイル・コンポーネントによって要求されるモニター情報の他、デプロイ済みのすべてのアプリケーションの stdoutstderr、および verbose:gc のデータが取り込まれて、ログ・ビューアーに表示されるようになっています。定義済みのモニター機能は、「Virtual Application Console (仮想アプリケーション・コンソール)」の「Monitoring (モニター)」タブから利用することもできます。また、Health Center のライブ・モニター・ツールに接続することも可能です。起動時に JVM ポリシーによって Health Center が使用可能にされていない場合には、実行時に使用可能にすることができます。
  • 定義済みの FFDC: デプロイされているアプリケーションでエラーが発生した場合に備え、特定のデータの収集があらかじめ定義されています。データ収集の一環として、必要に応じて javadump ファイルおよびシステム・ダンプ・ファイルが生成され、システム・ダンプに対して jextract ユーティリティーが自動的に実行されます。

Java 仮想アプリケーションの作成手順: Hello World

ビルディング・ブロックとデフォルトの機能が提供されていることから、Java 仮想アプリケーションを作成するのは比較的簡単なタスクとなっています。以降のセクションでは従来の Hello World アプリケーションを例に、IBM Application Pattern for Java を使用して Java アプリケーションを作成し、デプロイする方法を説明します。

アプリケーションを作成してデプロイする方法

アプリケーションをデプロイするには、まずアプリケーションを作成して、そのアプリケーションをアーカイブ (ZIP、TAR.GZ、または TGZ) ファイルとしてパッケージ化する必要があります。リスト 1 に、単純な HelloWorld クラスの実装を示します。この実装では、モニター・ツールへ接続するための時間を用意するために、アプリケーションの終了前に一定の遅延時間を設けています。

リスト 1. Hello World サンプル・アプリケーション
package com.ibm.sample;

public class HelloWorld {

    public static void main(String[] args) {
        /* Print "Hello World!" to stdout */
        System.out.println("Hello World!");
        try {
            /* Sleep for 5 minutes */
            Thread.sleep(5 * 60 * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

コードをコンパイルすると、com.ibm.sample.HelloWorld.class ファイルが作成されるので、このファイルを ZIP ファイルに追加しなければなりません。HelloWorld.zip (「ダウンロード」セクションで入手できます) に含まれるのは、/com/ibm/sample/HelloWorld.class ファイルだけです。

これでアプリケーションは用意できたので、次は、IBM Application Pattern for Java を使用して新しい仮想アプリケーションを作成します。以下のステップに従ってください。

  1. 「Patterns (パターン)」 > 「Virtual Applications (仮想アプリケーション)」の順に選択し、「Virtual Application Pattern (仮想アプリケーション・パターン)」パネルを開きます。
  2. 「Virtual Application Pattern (仮想アプリケーション・パターン)」プルダウン・メニューから、「Application Pattern Type for Java 1.0」を選択します。
  3. 新しい仮想アプリケーションを作成するために「+」ボタンをクリックします。
  4. Start Building (ビルドの開始)」ボタンをクリックして、空のテンプレートから新規アプリケーションの作成を開始します。

「Virtual Application Builder (仮想アプリケーション・ビルダー)」が新しいウィンドウで開きます。このウィンドウには、左側に使用可能なコンポーネントのパレット、中央にアプリケーションを作成するためのキャンバス、そして右側にアプリケーション・コンポーネントを構成するためのパネルがあります。以下のステップに従って (図 2 を参照)、HelloWorld の仮想アプリケーションを作成してください。

  1. パレットからキャンバスに「Java application (Java アプリケーション)」ウィジェットをドラッグします。
  2. 「Name (名前)」フィールドに Java アプリケーションの名前として、任意の名前 (例えば、「HelloWorld」) を入力します。
  3. 構成パネルの「Archive File (アーカイブ・ファイル)」フィールドで、ローカル・システム上のHelloWorld.zip ファイルの場所を参照します。
  4. 「Application launch type (アプリケーション起動タイプ)」リストから、「Main Class (メイン・クラス)」を選択します。
  5. 「Main Class (メイン・クラス)」の下に、アプリケーションのメインとなるクラスの名前 (この例では「com.ibm.sample.HelloWorld」) を指定します。
  6. オプションで、「Java application (Java アプリケーション)」ウィジェットに表示されている「+」アイコンをクリックして「JVM Policy (JVM ポリシー)」を追加します。構成パネル内に示されているスライダーを使用して Java ヒープ・サイズを構成し、「Enable Health Center (ヘルス・センターを使用可能にする)」ボックスにチェック・マークを付けて Health Center によるモニターを有効にします。
図 2. 「Virtual Application Builder (仮想アプリケーション・ビルダー)」で Hello World を作成するステップ
「Virtual Application Builder (仮想アプリケーション・ビルダー)」での Hello World の作成ステップを説明する画面

HelloWorld 仮想アプリケーションの名前と説明を入力し、左上隅にある「Save (保存)」をクリックして仮想アプリケーションを保存します。

「Virtual Application Pattern (仮想アプリケーション・パターン)」ウィンドウに戻り、新しく作成した仮想アプリケーションをデプロイします。

  1. 左側のアプリケーションのリストから、「HelloWorld」アプリケーションを選択します。
  2. Deploy (デプロイ)」ボタンをクリックします。
  3. 適切な環境プロファイルまたはクラウド・グループを選択して、「OK」をクリックします。

これでアプリケーションがデプロイされて、すぐに使用可能になります!

アプリケーションをモニターする方法: ログ・ファイル

デプロイされたアプリケーションは、「Virtual Application Instances (仮想アプリケーション・インスタンス)」パネルに表示されます。以下のステップ (図 3 を参照) に従うことで、デプロイされた Java アプリケーションの状態をモニターすることができます。

  1. 「Instances (インスタンス)」 > 「Virtual Applications (仮想アプリケーション)」の順に選択して、「Virtual Application Instances (仮想アプリケーション・インスタンス)」パネルを開きます。
  2. 「Virtual Application Pattern (仮想アプリケーション・パターン)」のプルダウン・メニューで、「Application Pattern Type for Java 1.0 (Java 1.0 用アプリケーション・パターン・タイプ)」が選択されていることを確認します。

    左側のパネルにはデプロイ済みの Java 仮想アプリケーションのすべてが表示され、それぞれがどのような状況であるかの概要 (「Running (実行中)」、「Stopped (停止)」、または「Error (エラー)」) が示されます。仮想アプリケーションについてさらに詳しく調べるには、以下の操作を行います。

    1. 左側のパネルでアプリケーションを選択します。
    2. 「VM Status (VM の状況)」の下にある「Log (ログ)」リンクをクリックして、「Log Viewer (ログ・ビューアー)」を開きます。
    3. Manage (管理)」アイコンをクリックして、「Virtual Application Console (仮想アプリケーション・コンソール)」を開きます。
図 3. 「Virtual Application Console (仮想アプリケーション・コンソール)」を起動するステップ
「Virtual Application Console (仮想アプリケーション・コンソール)」の起動ステップを説明する画面

「Log Viewer (ログ・ビューアー)」 (図 4 を参照) では、左側のパネルに表示されるツリー・ビューを使用して、デプロイ済みアプリケーションのログ・ファイルを参照することができます。Java アプリケーション自体のログ・ファイルを表示するには、以下のステップに従ってください。

  1. ツリー・ビューで、「JAVA」 > 「/opt/java-deploy」の順に選択します。
  2. stdout.log」を選択します。すると、アプリケーションからの「Hello World!」メッセージがメイン・パネルに表示されます。
  3. オプションで、「verbosegc001.log」を選択すると、ガーベッジ・コレクションの履歴が表示されます。
  4. オプションで、ファイルをダウンロードするには、ファイル名の右側にあるダウンロード・シンボルを選択します。
図 4. 「Log Viewer (ログ・ビューアー)」でログ・ファイルを表示するステップ
「Log Viewer (ログ・ビューアー)」でのログ・ファイルの表示ステップを説明する画面

ビューのこの部分には、すべてのダンプ・ファイルに加え、「Monitored file (モニター対象ファイル)」ウィジェットを使って「Log Viewer (ログ・ビューアー)」に追加されたすべてのファイルも表示されます。

アプリケーションをモニターする方法: ライブ・モニター

「Virtual Application Console (仮想アプリケーション・コンソール)」では、以下のタブを使用することができます。

  • Monitoring (モニター)」タブ: デプロイ済みアプリケーションのリソース使用状況をライブでモニターすることができます。
  • Logging (ロギング)」タブ: 「Log Viewer (ログ・ビューアー)」が開きます。
  • Operation (運用)」タブ: 実行中のアプリケーションに変更を加えることができます。

IBM Application Pattern for Java では、Health Center を使用可能にしてアプリケーションに接続できるようになっています。Health Center は、「Virtual Application Builder (仮想アプリケーション・ビルダー)」で「JVM Policy (JVM ポリシー)」を使って構成しなかったとしても使用可能にすることができます。それには、以下のステップ (図 5 を参照) に従ってください。

  1. 「Operation (運用)」タブを選択します。
  2. 使用可能な操作のリストから、「JAVA」エントリーを選択します。
  3. Attach Health Center (Health Center に接続する)」項目を展開します。
  4. Health Center に接続するための任意のポートを指定します。
  5. 接続可能な任意の Health Center クライアントの IP アドレスまたは IP アドレス/ネットマスクを指定します。
  6. Submit (送信)」ボタンをクリックします。
図 5. 実行時に Health Center によるモニターを有効にするステップ
実行時に Health Center によるモニターを有効にするためのステップを説明する画面のスクリーン・ショット

上記のステップにより、IBM Support Assistant に用意されている IBM Monitoring and Diagnostic Tools for Java - Health Center クライアントをアプリケーションに接続して、極めて低いオーバーヘッドでアプリケーションの実行状況をモニターできるようになりました。Health Center はさらに、ダンプ・ファイルの生成を要求する手段にもなり、より高度なデータ収集を可能にします。その一例として、割り当てのプロファイルを作成することもできます。


Java 仮想アプリケーション・パターンの使用シナリオ

HelloWorld は、Java アプリケーションを仮想アプリケーションとしてデプロイする手順を説明するには便利な例でしたが、実際のアプリケーションに役立つ例であるとは言えません。特に、仮想アプリケーションをサーバー・ベースのクラウド環境にデプロイするとしたら、HelloWorld では例として役不足です。そこでこれから、遥かに実用的な例をいくつか紹介し、IBM Application Pattern for Java を使って既存のアプリケーションをクラウドに移行する方法を説明します。これらの例はいずれもオープンソースの Java アプリケーションを使用したものなので、ライセンス・コストをかけずに実際に試してみることができます。

オープンソースのミドルウェア: Apache Tomcat

IBM Application Pattern for Java は、仮想アプリケーションを作成するために使用できるだけではありません。ミドルウェアをアプリケーションの一部として提供すれば、あらゆる Java ベースのミドルウェアを作成することもできます。その好例は、Apache Tomcat と Web アプリケーションのデプロイメントです。Apache Tomcat と Web アプリケーションをデプロイするには、2 つの方法のうちのいずれかを使用することができます。その 1 つは、Apache Tomcat と Web アプリケーションをまとめてアーカイブ・ファイルにバンドルし、そのアーカイブ・ファイルを Java アプリケーション・コンポーネントにアップロードするという方法です。もう 1 つの方法では、Apache Tomcat を Java アプリケーションとしてデプロイし、Web アプリケーションについては追加アーカイブ・ファイル・コポーネントを使ってデプロイします。通常は、後者の方法のほうが推奨されます。それは、アーカイブ・ファイルを扱う必要がなく、さらに Apache Tomcat 構成をテンプレートとして保存すれば、後は Web アプリケーションを追加するだけで新しい仮想アプリケーションを作成できるためです。

演習として、今から「Virtual Application Builder (仮想アプリケーション・ビルダー)」で Apache Tomcat 7.0.27 をデプロイして、その後に別途サンプル Web アプリケーションを追加します。まずは、Apache.org から Tomcat アーカイブをダウンロードして保存することと、私がこの記事のために用意したサンプル Web アプリケーション (simpleapp.war) をダウンロード (「ダウンロード」を参照) して保存することから始めます。その上で、以下のステップ (図 6 を参照) に従います。

  1. パレットからキャンバスに「Java application (Java アプリケーション)」ウィジェットをドラッグします。この Java アプリケーションが Tomcat サーバーになるので、適当な名前 (例えば、「Apache Tomcat 7.0.27 Server」) を指定します。
  2. 「Archive File (アーカイブ・ファイル)」構成フィールドで、Apache.org からダウンロードした Tomcat アーカイブ (例えば、apache-tomcat-7.0.27.tar.gz) を参照します。このファイルはダウンロードしたままの状態で使用してください。ファイルに変更を加える必要はありません。
  3. Java アプリケーション・コンポーネントの「Application launch type (アプリケーション起動タイプ)」として「Command Line (コマンド行)」を選択し、Tomcat 起動スクリプト (例えば、/apache-tomcat-7.0.27/bin/startup.sh) を指定します。これは、(apache.org からのダウンロードに含まれている) 起動スクリプトで、Tomcat サーバーを起動するために使用されます。
  4. パレットの「Assets (アセット)」の下に表示された「Other Components (その他のコンポーネント)」から、「Generic listener (一般リスナー)」)」をキャンバスにドラッグして追加し、ポート 8080 で接続を許可するように「Generic listener (一般リスナー)」を構成します。この構成により、ファイアウォールは、Tomcat がリッスンするポート 8080 で受信される接続を許可することになります。
  5. 「Other Components (その他のコンポーネント)」から「Monitored file (モニター対象ファイル)」をキャンバスにドラッグし、Tomcat のログ・ファイル (例えば、/apache-tomcat-7.0.27/logs/*.log) をモニターするように構成します。これにより、Tomcat によって生成されたログ・ファイルが「Log Viewer (ログ・ビューアー)」に追加されることになります。*.log でワイルドカードを使用しているということは、このディレクトリーに置かれているすべての .log ファイル (catalina.log、manager.log など) を選択することを意味します。
  6. simpleapp.war Web アプリケーションをデプロイするための「Additional archive file (追加アーカイブ・ファイル)」を追加します。「Deploy path (デプロイ・パス)」の値として「/apache-tomcat-7.0.27/webapps/」を指定し、アーカイブ・ファイルのタイプとして Java アーカイブ・ファイルを選択します。
図 6. Virtual Application Builder (仮想アプリケーション・ビルダー) で Apache Tomcat をデプロイするステップ
Virtual Application Builder (仮想アプリケーション・ビルダー) での Apache Tomcat のデプロイメント・ステップを説明する画面

これで、Apache Tomcat のインスタンスに SimpleApp Web アプリケーションをデプロイすることができます。アプリケーションがデプロイされると、指定した IP アドレスとポート 8080 で使用可能になります (http://<IP アドレス>:8080/ にアクセスすると、Tomcat フロント・ページが表示されます)。

さらにリッチな Web アプリケーションの仮想パターン

IBM では、Web アプリケーション (ならびにエンタープライズ・アプリケーションおよび OSGi アプリケーション) をクラウドにデプロイするための機能が一段と充実した専用の Web Application Pattern を用意しています。このパターンには、データベースへの接続とメッセージング・キュー、さらにロード・バランシング機能を備えた自動スケーリングが組み込まれています。ただし、特定のアプリケーション・サーバー (例えば Tomcat など) をクラウドで実行したい場合には、現在は単純な手段として IBM Application Pattern for Java を使用できるようになっています。

SimpleApp Web アプリケーションを追加する代わりに、「Additional archive file (追加アーカイブ・ファイル)」コンポーネントを追加し、このコンポーネントを構成して「Deploy path (デプロイ・パス)」を指定するという方法を採ることもできます。この方法では、Web アプリケーションを追加せずに、「Additional archive file (追加アーカイブ・ファイル)」オプションをテンプレートの中で唯一ロックされていない (変更可能な) フィールドにして、仮想アプリケーションを再利用可能なテンプレートとして保存することができます。こうすれば、他のユーザーが標準の Tomcat 7.0.27 プロファイルにそれぞれの Web アプリケーションを追加するだけで、独自のアプリケーションを作成できるようになります。

クラウド・ベースの負荷テスト: Apache JMeter

IBM Application Pattern for Java は、クラウド・ベースの負荷テストというシナリオにも使用することができます。このシナリオは、Web (またはその他の) アプリケーションの負荷テストを行うために、クラウド・ベースのエンジンをデプロイするというものです。この場合、IBM Application Pattern for Java を使って Apache JMeter をデプロイして、JMeter に備わったサーバー負荷テスト用のエンジン機能を利用することができます。

Apache から JMeter アーカイブをダウンロードして保存したら、Virtual Application Builder (仮想アプリケーション・ビルダー) で以下のステップ (図 7 を参照) に従って、サーバー・モードの Apache JMeter 2.7 のデプロイメントを行います。

  1. パレットからキャンバスに「Java application (Java アプリケーション)」ウィジェットをドラッグします。この Java アプリケーションが JMeter サーバーになるので、適当な名前 (例えば、「Apache JMeter 2.7 Server」) を付けます。
  2. 「Archive File (アーカイブ・ファイル)」構成フィールドで、Apache.org からダウンロードした JMeter アーカイブ (例えば、apache-jmeter-2.7.tar.gz) を参照します。ダウンロードしたファイルに変更を加える必要はありません。
  3. 「Application launch type (アプリケーション起動タイプ)」リストから「Command Line (コマンド行)」を選択し、「Command Line (コマンド行)」フィールドに「/apache-jmeter-2.7/bin/jmeter-server -Jserver.rmi.localport=6437」と入力します。これは JMeter サーバーを起動するための (apache.org からのダウンロードに含まれている) サーバー起動スクリプトです。このスクリプトの追加オプションで、無作為に割り当てられたポートを使用する代わりに (こうすると、ファイアウォールで問題が発生します) RMI 接続ポートを設定します。
  4. ポート 1099 で「RMI Registry (RMI レジストリー)」をリッスンする「Generic listener (一般リスナー)」と、(localport オプションで指定された) ポート 6437 で RMI 接続をリッスンする「Generic listener (一般リスナー)」を追加します。2 つの「Generic listener (一般リスナー)」が必要になる理由は、1 つの「Generic listener (一般リスナー)」には 1 つのポートしか指定できないためです。「RMI Registry (RMI レジストリー)」はデフォルトでポート 1099 に設定されます。RMI 接続ポートは、「Command Line (コマンド行)」で Jserver.rmi.localport=6437 オプションを使用して指定されています。
  5. テスト対象の Web アプリケーションをホストするアプリケーション・サーバー (図 7 の「AppServer」) 用に、「Generic target (一般ターゲット)」をポート 9080 に追加します。サーバーの IP/ネットマスクを 0.0.0.0/0.0.0.0 にすると、任意のアプリケーション・サーバーの IP アドレスが許可されます。ポート 9080 が指定された「Generic target (一般ターゲット)」コンポーネントが意味するのは、アプリケーション・サーバーがターゲット・サーバー上のポート 9080 にトラフィックを送信できるということです。ポート 9080 は、Web Application Pattern を使用してデプロイされたアプリケーションが使用するポートです。この設定は、ターゲット・アプリケーションの場所がまだわからない場合に役立ちます。また、ターゲット・アプリケーションの場所を特定の IP アドレスまたは IP アドレスの範囲に制限することもできます。
  6. Monitored file (モニター対象ファイル)」をドラッグして、JMeter のログ・ファイルをモニターするように構成します。これらのログ・ファイルには、/jmeter-server.log や、サーバーから実行中の負荷テストの状況を示すデフォルトの JMeter ログ・ファイルが含まれます。
図 7. Virtual Application Builder (仮想アプリケーション・ビルダー) で Apache JMeter をデプロイするステップ
Virtual Application Builder (仮想アプリケーション・ビルダー) での Apache JMeter のデプロイメント・ステップを説明する画面

JMeter サーバー・アプリケーションがデプロイされた後は、JMeter をインストールしたクライアントあるいはデスクトップ・マシンから負荷テストを実行することができます。それには、-Jremote_hosts=[コンマ区切りのサーバー・リスト] オプションを指定してクライアントを起動し、JMeter のクライアント UI で「Run (実行)」 > 「Remote Start (リモート開始)」オプションを使用して、クラウド内のサーバーからテストを起動します。

以下のステップに従って、「Web Application Pattern Type 2.0 (Web Application Pattern タイプ 2.0)」パターンの一部として提供されている「Sample Web application only (サンプル Web アプリケーション専用)」サンプルのデプロイメントに対して、サンプル JMeter テスト・プラン (「ダウンロード」および関連する脚注を参照) を実行することができます。

  1. コマンド行から、JMeterサーバー・デプロイメントの IP アドレスを指定して JMeter を実行します。以下に示すのが、その一例です。
    jmeter -Jremote_hosts=172.17.108.222
  2. JMeter 内で「File (ファイル)」 > 「Open (開く)」の順にクリックして、テスト・プランを開きます。
  3. SampleWebAppTestPlan.jmx」ファイルを選択します。
  4. 左側パネルのツリー・ビューで、「Test Plan (テスト計画)」 > 「Thread Group (スレッドグループ)」 > 「HTTP Requests Defaults (HTTP リクエストのデフォルト)」の順に選択します。
  5. 「Web Server (Web サーバ)」を変更します。メイン・パネルに示されている「Server Name or IP (サーバ名または IP)」が、デプロイした「Sample Web application only (サンプル Web アプリケーション専用)」サンプル用のエンドポイントのアドレス部分になるように変更します。
  6. 「HTTP Request (HTTP リクエスト)」を変更します。パスが、/webapp/ の前にあるエンドポイント・アドレス以外の部分になるように変更します。
  7. 「Run (実行)」 > 「Remote Start (開始(リモート))」 > [JMeter サーバーのアドレス] の順に選択して、テストを開始します。

以下のステップに従うことで、「Sample Web application only (サンプル Web アプリケーション専用)」サンプルに対して負荷がかけられているかどうかを確認することができます。

  1. デプロイ済みのサンプルで「Manage (管理)」を選択し、「Virtual Application Console (仮想アプリケーション・コンソール)」を起動します。
  2. 「Monitoring (モニター)」 > 「Middleware (ミドルウェア)」の順に選択します。
  3. リストから Web アプリケーションの項目 (例えば、「Web-Application-was.11342004774648」) を選択します。

以上のステップによって、メイン・パネルに複数のグラフが表示されます。これらのグラフを使用して、デプロイされている Web アプリケーションをモニターすることができます。Web アプリケーションが JMeter サーバーからのリクエストを受信している場合、「WebApplications Request Count (Web アプリケーション・リクエスト・カウント)」グラフに、アプリケーションが対応しているリクエストの数が示されます (図 8 を参照)。

図 8. 負荷テスト対象のデプロイ済みサンプル Web アプリケーションに対する Web アプリケーション・リクエストの表示
負荷テスト対象のデプロイ済みサンプル Web アプリケーションに対する Web アプリケーション・リクエストの表示画面を示すスクリーン・ショット

その他の使用事例

Apache Tomcat および Apache JMeter を使用した仮想アプリケーションのデプロイメントだけでなく、他にもさまざまな使用事例やミドルウェアを対象とした仮想アプリケーションを作成することができます。例えば、以下の仮想アプリケーションを作成することができます。

  • Eclipse Jetty
  • JBoss
  • Apache ftpServer
  • Apache Derby
  • Apache MINA

サード・パーティーのミドルウェアを使用して新しい仮想アプリケーションを作成する場合、一般に問題になるのは、「Generic listener (一般リスナー)」コンポーネントと「Generic target (一般ターゲット)」コンポーネントを使用して構成する必要がある受信用および送信用のファイアウォール・ポートを判断することです。開放する必要のあるポートが製品ドキュメントに記載されていなければ、アプリケーションをデプロイしてから製品ログで SocketException を調べるか、あるいは製品をローカルにデプロイして、netstat などのツールで使用されているポートを調べるという方法があります。

出発点として役立つように、この記事では Tomcat と JMeter のテンプレートを用意しています (「ダウンロード」を参照)。Eclipse Jetty、JBoss、Derby、ftpServer などのテンプレートは、今後 IBM Application Pattern for Java ブログから入手できるようになるはずです (「参考文献」を参照)。テンプレートを使用するには、該当するミドルウェア・パッケージをダウンロードして、「Virtual Application Builder (仮想アプリケーション・ビルダー)」でそのパッケージを Java アプリケーション・コンポーネントにアップロードし、最後に「Deploy (デプロイ)」をクリックするだけで済みます!


まとめ

IBM Application Pattern for Java が IaaS オファリングまたは PaaS オファリングのどちらであるかと言うと、それぞれの言葉の純然たる意味からすれば、そのどちらでもありません。あらゆるアプリケーションをデプロイできるという、このパターンの柔軟性には、トレードオフが伴います。それは、ユーザーが何らかのトポロジーを定義しなければならないこと、さらにミドルウェア・サービスが必要な場合には、そのミドルウェアを提供しなければならないことです。その意味では、IBM Application Pattern for Java は IaaS の定義により近いと言えます。その一方で、IBM Application Pattern for Java にはいくつものプラットフォーム機能が備わっています。具体的に言うと、Pure Java ベースのアプリケーションを単純で繰り返し可能な方法でデプロイするためのランタイムには、チューニングからライフサイクル管理、そしてアプリケーション・モニターにまで及ぶ専門家の知見が組み込まれています。既存のあらゆる Java アプリケーションが、IBM Application Pattern for Java によってクラウド・ベースの環境に簡単に移行できる可能性があります。しかも、クラウドに移行した Java アプリケーションは、プラットフォームとしても、あるいは変更可能なテンプレートとしても再利用することができます。この点に関しては、IBM Application Pattern for Java はより PaaS オファリングに近いと言えます。


ダウンロード

内容ファイル名サイズ
HelloWorld applicationHelloWorld.zip1KB
Apache Tomcat 7.0.27 Application TemplateTomcat-7.0.27-Template.zip2KB
Simple web application for use with Apache Tomcatsimpleapp.war2KB
Apache JMeter 2.7 Application TemplateJMeter-2.7-Template.zip2KB
Sample JMeter test plan1SampleWebAppTestPlan.jmx6KB

  1. このテスト・プランの実行対象は、「Web Application Pattern Type 2.0 (Web Application Pattern タイプ 2.0)」パターンの一部として提供されている「Sample Web application only (サンプル Web アプリケーション専用)」サンプルです。したがって、IP アドレスとパスを調整する必要があります。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology, Cloud computing
ArticleID=840739
ArticleTitle=クラウドへのデプロイメントに IBM Application Pattern for Java を利用する
publish-date=10182012