目次


仮想アプリケーション・パターンの作成とカスタマイズ

IBM Workload Plug-in Development Kit を使用してコンポーネントと機能を追加する

Comments

IBM PureApplication System は、仮想アプリケーションを使用した、アプリケーション中心のデプロイメント・モデルをサポートしています。デプロイ担当者は、アプリケーションの成果物 (コンポーネントと、リンクによるコンポーネント同士の接続)、そして必要なサービス品質 (ポリシー) の観点で仮想アプリケーションを記述します。仮想アプリケーションをホストするために必要なプラットフォーム (インフラストラクチャーとミドルウェア) は、デプロイ時に決定されます。

Platform as a Service 機能は PureApplication System とワークロード特有のコンテンツとを組み合わせることで実現されます。PureApplication System は、仮想アプリケーションを設計、デプロイ、管理するための汎用フレームワークとして、また拡張機能メカニズムとして機能します。ワークロード特有のコンテンツは拡張機能 (プラグイン) として追加されます。これらのプラグインは、仮想アプリケーション・パターンの記述に使用されるコンポーネント、リンク、ポリシーを定義し、またデプロイメントの際にそれらのパターンを実現するために必要なミドルウェアと自動機能も定義します。

プラグインの作成は開発者が行い、そのプラグインを使用してデプロイ担当者がパターンの記述およびデプロイメントを行います。この記事では、IBM Workload Plug-in Development Kit (PDK) を使用してプラグインを作成する方法について説明します。

プラグインとは何か?

プラグインは顧客のワークロードやアプリケーションに対応した拡張機能を PureApplication System に実現、インストールするための主要メカニズムです。例えば、プラグインは仮想アプリケーションのワークロードとしてのコンテンツの基本単位です。プラグインは通常、WebSphere Application Server (WAS) プラグインや WAS/DB プラグインのように特定の機能を実装しています。WAS プラグインは WebSphere Application Server 上の WAR/EAR/EBA アプリケーションをホストするためのコンポーネントを提供し、WAS/DB プラグインは WAR/EAR/EBA をデータベースと接続するためのリンクを提供しています。

プラグインは仮想アプリケーションの重要部分であり、そのアプリケーションをクラウドにデプロイするための基礎となる実装でもあります。

Virtual Application Builder

PureApplication System には、仮想アプリケーションを作成するための Virtual Application Builder (仮想アプリケーション・ビルダー) が用意されています。Virtual Application Builder (仮想アプリケーション・ビルダー) では以下のようにして仮想アプリケーションを作成します。

  • 仮想アプリケーションはコンポーネントから作成されます。
  • コンポーネントにポリシーを適用することができます。
  • コンポーネント同士をリンクによって接続することができます。
  • コンポーネント、リンク、ポリシーは属性を持つことができ (ユーザー ID、パスワード、データベース名、(WAR ファイルなどの) アーカイブ・ファイルなど)、ユーザーは仮想アプリケーションを作成する際、これらの属性に値を指定することができます。

PureApplication System では、完成して保存される仮想アプリケーションはアプリケーション・モデル JSONObject として保存されます。このように保存されると、後でこのアプリケーション・モデルをデプロイすることができます。

仮想アプリケーションを作成する場合には、まず Virtual Application Builder (仮想アプリケーション・ビルダー) を開いてパターン・タイプを選択します。パターン・タイプはプラグインの集合です。パターン・タイプによって Virtual Application Builder (仮想アプリケーション・ビルダー) でのオプションとユーザー・エクスペリエンスが決まります。ユーザーは、そのパターン・タイプ内のプラグインによって公開される一連のコンポーネント、リンク、ポリシーから仮想アプリケーションを作成します。

ある 1 つのコンポーネントまたはリンクを提供するプラグインにより、そのコンポーネントまたはリンクのセマンティクスと動作が完全に決まります。仮想アプリケーションがデプロイされる際と、その仮想アプリケーションのライフサイクル全体を通じて、そのコンポーネントやリンクの機能をプラグインが実現します。例えば、プラグインは仮想アプリケーションのさまざまなライフサイクル・イベントを利用して仮想アプリケーションを管理するための適切なライフサイクル・スクリプトを提供する必要があります。

プラグインの機能として最もユーザーの目に触れやすいのはコンポーネント、リンク、ポリシーですが、プラグインの機能は他にもあります。ユーザーが独自のプラグインを作成してビルドできるように、IBM Workload PDK が用意されています。ユーザーはこれらのプラグインを PureApplication System にインポートし、それらのプラグインを使用して新しい機能を追加することができます。

PureApplication System では、ユーザーは仮想アプリケーション・コンソール上での操作を通じて、実行中の仮想アプリケーションを操作することができます。このコンソール上での操作と、それによる仮想アプリケーションの実行は、プラグインによって実現されます。

パターン・タイプとは何か?

パターン・タイプは、さまざまなタイプの仮想アプリケーションで必要となる、ソリューション特有のリソースやトポロジー特有のリソースを格納するコンテナーです。プラグインの集合でもあるパターン・タイプの例としては、Web アプリケーション (IBM Workload Deployer Pattern for Web Applications)、データベース (IBM Workload Deployer Pattern for DB2 Workgroup Edition) などがあります。

PureApplication System のクラウド管理者はパターン・タイプと個々のプラグインをインポートすることができます。プラグインは、PureApplication System のクラウド管理者が設定可能なグローバル構成オプションを公開する場合もあります。

アプリケーションを中心にプラグインを設計する

プラグインは、アプリケーションを中心にした使い方をする前提で設計する必要があります。つまりコンポーネント、リンク、ポリシーはアプリケーションの成果物とサービス品質を表現する必要があり、インフラストラクチャーやミドルウェアの成果物を明確に表現する必要はありません。例えば、アプリケーションの成果物は WAR ファイルとデータベース・インスタンスかもしれません。WAR ファイルとデータベース・インスタンスとを関連付けるにはリンクが必要です。

プラグインは、例えば Web アプリケーションの弾力的なスケーリングが行われるように拡張することができます。スケーリングはサービス品質であり、WAR ファイル・コンポーネントのポリシー・オブジェクトとしてモデル化することができます。(スケーリング・ポリシーを追加すると、プロキシー、セッションを複製するためのキャッシュ、等々を用意するといった追加のプロセスがデプロイ時に必要になるかもしれませんが、プラグインはデプロイ担当者の意図に従って詳細な処理を行います。)

プラグインを設計する際には、アプリケーションの管理についても考慮する必要があります。例えばデプロイ担当者はデプロイメントの実行中に WAR ファイルを置き換える必要があるかもしれません。

ユーザー・エクスペリエンスを分離するために、プラグイン開発者は新しいパターン・タイプを作成することができます。新しいパターン・タイプを作成する代わりに、Web Application Pattern Type (Web アプリケーション・パターン・タイプ) などの既存のパターン・タイプにプラグインを追加することもでき、そうすればデプロイ担当者は新しいプラグインと既存のプラグインのどちらも利用することができます。

パターン・タイプとプラグインとの関連付けはプラグインによって制御されます。パターン・タイプは名前付きの集合を表し、各プラグインはそのプラグインと 1 つまたは複数のパターン・タイプとの関連を指定することができます。このようにパターン・タイプはメンバー駆動であるため、サードパーティーが任意のパターン・タイプを拡張することができます。

プラグインは、さまざまな時点で PureApplication System を拡張することができます。例えば、設計時 (コンポーネント、リンク、ポリシーで)、デプロイメント時 (バイナリーや自動化スクリプトで)、変換ロジック内、管理の際などです。

プラグインはパターン・タイプとの関連付けを patterntypes オブジェクトで宣言します。プラグインは 1 つのプライマリー・パターン・タイプおよび 1 つまたは複数のセカンダリー・パターン・タイプと関連付けることができます。プライマリー・パターン・タイプとの関連付けはライセンス許可された関連付けを意味します。単純な共有を示すためにセカンダリー・パターン・タイプとの関連付けを指定することもできます。プライマリー・パターン・タイプとの関連付けが指定されている場合、そのプライマリー・パターン・タイプが有効になるまで、そのプラグインを利用することができません。

packages オブジェクトはプラグインによって提供される特定のパーツを抽象化します。パーツは必要に応じて仮想マシンにインストールされるファイルのグループであり、そのターゲット・マシン専用の場合もあります (オペレーティング・システム、アーキテクチャーなど)。変換プログラムを使用すると、アプリケーション・モデルのコンポーネント、リンク、ポリシーを変換し、フレームワークがデプロイメントの際に使用可能なトポロジー文書フラグメントにすることができます。変換プログラムのメリットは、単純にパッケージを VM テンプレートに追加できることです。後で PureApplication System がそれらのパッケージを解決し、ターゲット・マシンに合ったパーツにします。そのため、変換ロジックにおいてマシン特有の詳細事項を扱う必要がありません。

PDK を使用すると何ができるのか?

PDK は PureApplication System プラグイン開発者が Workload Deployer のための独自のプラグインやパターン・タイプをビルドするのを支援するために設計されたツールです。PDK には、プラグインとパターン・タイプのビルド環境、サンプル、そして新しいプラグイン・プロジェクトを作成するためのツールが含まれています。詳細についてはプラグイン開発ガイドを参照してください。

プラグインとパターン・タイプは Apache Ant を使用してビルド、パッケージ化されます。PDK には、そのための Ant ビルド・ファイルが XML ファイルとして用意されています。これらのビルド・ファイルはコマンドラインから実行することも、Eclipse から実行することもできます (他の開発環境でも実行できるかもしれませんが、PDK がサポートしているのはコマンドラインと Eclipse のみです)。

PDK を使用するためには以下のものが必要です。

  • Java SE6、32 ビット
  • Apache Ant 1.7 またはそれ以降のバージョン
  • Eclipse V3.6.2、32 ビット。JEE (Java Enterprise Edition) バージョンが推奨です。

Eclipse は必須ではありませんが、Eclipse を使用する場合は上記のバージョンを使用する必要があります。Eclipse を使用する場合には Eclipse に付属の Ant を使用することができ、Ant を別途インストールする必要はありません。Ant は Eclipse をインストールしたディレクトリーにあります (eclipse/plugins/org.apache.ant_1.*)。

PDK をインストールする

最初のステップはワークステーションに PDK をダウンロードすることです。PureApplication System にログインした後、「Welcome (ようこそ)」画面から PDK をダウンロードすることや、PDK のウィキからダウンロードすることができます。PDK は ZIP ファイルになっており、ダウンロードして解凍したら、その ZIP ファイルを解凍したディレクトリーでコマンド・プロンプトを開いて Ant を実行します。

PDK はライセンス製品です。Ant を実行すると、ライセンス画面が表示されます。この先に進んで PDK の ZIP ファイルを解凍するためには、表示されたライセンス条件を受け入れる必要があります。ライセンス条件を受け入れると PDK のファイルの内容が表示されます。

patterntype.hello サンプルの紹介

サンプルの hello パターン・タイプを使用すると、単純な hello 仮想アプリケーションをデプロイすることができます。パターン・タイプにコンポーネント、リンク、ポリシーが含まれている場合があり、Virtual Application Builder (仮想アプリケーション・ビルダー) でそれらを利用して仮想アプリケーションを作成することができます。

hello パターン・タイプには以下のような 2 つのコンポーネントと 1 つのリンクが含まれています。

  • HCenter: このコンポーネントは HelloCenter という単純なメッセージ・センター・ミドルウェアを含む仮想マシンをデプロイします。HelloCenter はポート 4000 を開いて、クライアント・リクエストをリッスンし、挨拶メッセージを生成して返します。
  • Hello: このコンポーネントは HelloCenter というクライアント・コンポーネントを含む仮想マシンをデプロイします。このクライアントはメッセージ送信者の ID を含むリクエストを HelloCenter に送信し、返された挨拶メッセージを取得してコンソールに表示しようとします。
  • HClink: このリンクは Hello コンポーネントと HCenter コンポーネントとをリンクします。このリンクによって、HCenter サーバーの IP アドレスが Hello クライアントに提供され、Hello クライアントはこの IP アドレスを使用してサーバーにリクエストを送信することができます。また、このリンクには挨拶メッセージの受信者の名前を指定するための属性があります。

この patterntype.hello サンプルでは、これらのコンポーネントとリンクを提供するのは、それぞれと同じ名前を持つ固有のプラグインです。一般的には、1 つのプラグインが任意の数のコンポーネント、リンク、ポリシーを提供することができます。

PDK を使用してプラグインとパターン・タイプをビルドする

PDK でプラグインまたはパターン・タイプをビルドするためには、コマンドラインから以下のコマンドを入力します。

cd iwd-pdk-workspace/plugin.depends
ant                                 /*This command will build all the plug-ins in 
                                      the workspace.*/
cd ../patterntype.hello
ant -f build.patterntype.xml        /*This command will build the hello pattern type, 
                                      the sample included in the PDK described following.
                                      The export directory contains the built pattern 
                                      type ready for installation into IWD.*/

これらの Ant ビルド・スクリプトが Eclipse (または他の IDE) からも実行できることに注意してください。Eclipse で実行する場合には build.xml ファイルを右クリックして「Run As (実行)」 > 「Ant build (Ant ビルド)」の順に選択します。

hello パターン・タイプをビルドすると、そのパターン・タイプを PureApplication System にインポートすることができます。そしてそのパターン・タイプのコンポーネントから仮想アプリケーションを作成し、その仮想アプリケーションをデプロイすることができます。

PDK の内容と詳細

この記事のこれから先では、PDK の内容の詳細について、サンプル・アプリケーションを例に説明します。

plugin.depends プロジェクト/ディレクトリー

plugin.depends プロジェクト/ディレクトリーには、開発用の Workload Deployer プラグイン・ライブラリー、プラグインとパターン・タイプのためのビルド・ツール、そして Ant ビルド・ライブラリーが含まれています。以下はその一部です。

  • lib フォルダー: プラグイン開発に必要な Java アーカイブ・ファイル (JAR) をすべて含んでいます。
  • lib-build フォルダー: プラグインのビルド・スクリプトに必要なすべてのライブラリーを含んでいます。
  • build/build.plugins.xml ファイル: 1 つのプラグインをビルドするためのベースとなる内部用のビルド・スクリプト・ファイル。各プラグインのビルド・スクリプト・ファイルは最初にこのビルド・スクリプト・ファイルをインポートし、必要に応じてアクションを追加します。
  • build/build.patterntypes.xml: パターン・タイプをビルドするための汎用的なスクリプト。各パターン・タイプのビルド・スクリプト・ファイルは最初にこのビルド・スクリプト・ファイルをインポートし、必要に応じてアクションを追加します。
  • create.plugin.project.xml: ワークスペース内にプラグイン用のプロジェクトを作成するために使用される Ant スクリプト。

plugin.depends の create.plugin.project.xml を使用すると、プラグイン用のプロジェクトを作成することができます。このファイルを使用して作成されるのは、テンプレート・プロジェクトか Java ベースのプラグイン・プロジェクトです。create.plugin.project.xml を使用するにはプロジェクト名とプラグイン名という 2 つのパラメーターが必須となります。この 2 つのパラメーターを使用すると、テンプレート・プロジェクトを作成することができます。3 つ目のパラメーター、java.classname はオプションです。このオプションに有効なクラス名が指定されると Java プラグイン・プロジェクトが作成されます。クラス名は MyPlugin のような単純な名前でも com.acme.iwd.plugin.MyPlugin のようにパッケージ名で修飾した名前でも構いません。また、.java 拡張子が最初から想定されているため、最後に .java を追加しないことが重要です。

  • plugin-project-template は、Ant スクリプト create.plugin.project.xml がプラグイン・プロジェクトを作成するために使用します。

パターン・タイプとプラグインの例

PDK の ZIP パッケージには 4 つのプロジェクトがプラグインの形で含まれています。これらのプラグインを見ると、プラグインのアプリケーション・モデル、構成、仮想マシン・テンプレート、Python スクリプトの設計方法を理解することができます。

HCenter プラグインのプラグイン・プロジェクト
plugin.com.ibm.sample.hellocenter

このプラグインは、HelloCenter サーバー機能とともにデプロイされる仮想マシンを表す HelloCenter コンポーネントを提供します。このプラグインにより、HelloCenter のようなミドルウェアをインストール、構成、起動、停止するためのライフサイクル・スクリプトの作成方法を学ぶことができます。使用できる Python スクリプトは以下のとおりです。

  • install.py: ストアハウスから成果物をダウンロードしてミドルウェアをインストールします。ストレージ・サーバーから TGZ インストール・ファイルをダウンロードして解凍したい場合には、このスクリプトではなく downloadx 関数を使用します。
  • configure.py: プラグインによってアップロードされた成果物をダウンロードしてミドルウェアを構成し、ファイアウォールを開いて顧客のリクエストを受け付けます。構成したミドルウェアの IP アドレスをエクスポートします。
  • start.py: HelloCenter サーバーを起動し、ロール・ステータスを Running に変更します。
  • stop.py: HelloCenter サーバーを停止します。

maestro モジュールにアクセスし、ロガーを使用してメッセージをログに記録することもできます。maestro モジュールと maestro.trace_call のような高度なログについての詳細はプラグインの PDK を参照してください。

Hello プラグインのプラグイン・プロジェクト
plugin.com.ibm.sample.hello

このプラグインはデプロイされたマシンを表現するコンポーネントを提供し、そのマシンが HelloCenter にアクセスします。つまり、このプラグインは HClink プラグインと一緒に使えるようでなければなりません。このプラグインには以下のスクリプトが含まれています。

  • configure.py: 送信者の情報をログに記録します。
  • start.py: ロール・ステータスを Running に変更します。

HClink プラグインのプラグイン・プロジェクト
plugin.com.ibm.sample.hclink

このプラグインは Hello プラグインと一緒に同じ仮想マシンにインストールされ、Hello プラグインと HelloCenter プラグインとをリンクします。このプラグインには以下のスクリプトが含まれています。

  • changed.py: このスクリプトは Hello プラグインと HelloCenter プラグインのロール・ステータスが Running になった後にのみ実行されます。このスクリプトでは、必要なロールである HelloCenter プラグインが存在するかどうかをチェックし、存在する場合は HelloCenter プラグインの configure.py スクリプト内でエクスポートされる HelloCenter から転送されたパラメーターを読み取ります。 このスクリプトは HelloCenter の IP アドレスを使用して HelloCenter にアクセスし、返されたメッセージを出力します。このスクリプトを見るとメッセージのローカライズ方法も理解することができます。

Hello プラグイン、HelloCenter プラグイン、HClink プラグインにより、以下の内容を学ぶことができます。

  • 2 つのプラグインの間でパラメーターを転送する方法
  • 2 つ以上のプラグインを協調動作させる方法

これらのプラグインには、サンプル・アプリケーションのモデルと構成、仮想マシン・テンプレート、仮想マシン・テンプレートの構成が含まれています。

ゼロの状態から作成するのではなく、これらのサンプル・アプリケーションのモデルと構成、仮想マシン・テンプレート、仮想マシンの構成を基に、独自の成果物を設計することができます。詳細については PDK を参照してください。

patterntype.hello パターン・タイプ・プロジェクト
patterntype.hello

patterntype.hello パターン・タイプ・プロジェクトには以下のファイルが含まれています。

  • patterntype.json ファイルはパターン・タイプを構成する方法の例を提供します。
  • build.patterntype.xml ファイルはパターン・タイプをビルドしてパッケージにするために使用されます。注: このスクリプトを実行する前に、plugin.depends プロジェクトの build.xml を実行し、ワークスペース内のすべてのプラグインをビルドする必要があります。
  • licenses フォルダーには、サポートされているすべての言語のライセンス・ドキュメントがすべて含まれています。
  • locales フォルダーには、PDK でサポートされているすべての言語に message.json ファイルを翻訳したファイルがすべて格納されています。

まとめ

この記事が IBM Workload Plug-in Development Kit の概要をわかりやすく伝えられたことを願っています。この他にも関連する記事として、「IBM Workload Plug-in Development Kit を使用する」では PDK を実際に操作するための 4 つの基本的なタスクについて説明しています。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, WebSphere, Information Management
ArticleID=816659
ArticleTitle=仮想アプリケーション・パターンの作成とカスタマイズ
publish-date=05242012