 | レベル: 中級 Dustin Amrhein, Staff Software Engineer, IBM
2009年 5月 20日
この連載記事の第 1 回では、クラウド・コンピューティング全般、クラウドを構成する各層、そしてそれぞれに異なるクラウドのタイプをその利点および欠点と併せて紹介し、クラウド・コンピューティングへの移行がエンタープライズ開発者にとって重要である理由を説明しました。今回の記事ではパブリック・クラウドに注目し、IBM® WebSphere® sMash と IBM DB2® Express-C の AMI (Amazon Machine Image) を使用して EC2 パブリック・クラウド・インフラストラクチャーにホストされた Web アプリケーションを提供する方法を説明します。
IBM WebSphere Developer Technical Journalより.
はじめに
パブリック・クラウド、プライベート・クラウド、ハイブリッド・クラウドの 3 つのタイプのうち、おそらく最も知名度が高く、そのオファリングの点でも充実しているのはパブリック・クラウドでしょう。パブリック・クラウドの人気につながった重要な特徴には、利用しやすさと値ごろ感があります。この特徴を実現するパブリック・クラウドとして Amazon EC2 (Elastic Compute Cloud) インフラストラクチャーが提供しているインフラストラクチャーでは、Amazon Machine Image インスタンスをホストし、これらのインスタンスによってユーザーに機能を提供します。IBM では最近、ユーザーが EC2 を利用できるように、よく使われているソフトウェア・オファリングをパッケージ化した EC2 プラットフォーム向け AMI (Amazon Machine Image) をリリースしました。これらの AMI は、開発ライセンスの下では無料で使用することができます。さらに、IBM の既存のソフトウェアのなかから特定のものを EC2 インフラストラクチャー内で実行するソフトウェアとしてサポートしています。
この記事ではパブリック・クラウドの概要を説明し、IBM WebSphere sMash および IBM DB2 Express-C Amazon Machine Image を使用して EC2 インフラストラクチャーにホストされた Web アプリケーションを提供する方法を説明します。
企業とパブリック・クラウド
企業ではどのようにパブリック・クラウド・コンピューティング・ソリューションを利用できるかを理解するために、以下の 2 つのケースについて考えてみましょう。
- 企業がパブリック・クラウドに提供されているアプリケーションを使用するケース。この場合に使用するアプリケーションとしては、従業員の給与データを処理するように設計されたアプリケーション、あるいは顧客関係管理システムなどが考えられます。クラウドに提供されているソフトウェアを利用することによって、企業はアプリケーションをプライベート・データ・センターにインストールして管理するという負担を取り除くことができます。また、ほとんどのクラウド・プロバイダーは使用量に基づいて料金を請求することから、ライセンス料に伴うコストを削減することができます。
- 企業がクラウド・ベースのホスティング・ソリューションを利用してユーザーにアプリケーションを提供するケース。この場合、企業は本番システムの保守および維持の作業から解放されます。アプリケーションに対するユーザーの要求を満たすようにインフラストラクチャー・リソースを提供する責任はクラウド・プロバイダーにあるからです。このモデルの場合、パブリック・クラウドによって提供されるソリューションにはネットワークに接続可能な任意のマシンからいつでもアクセスできるため、企業のサービスをさらに普及させることにもなります。
どちらのケースにも共通のテーマは、ビジネスにとっての最終的な価値です。パブリック・クラウドは明らかに、組織がソフトウェアおよびデータ・センター・インフラストラクチャーのコンポーネントを所有するのに伴うコストを削減する上で役立ちます。また、直接的な効果ではありませんが、パブリック・クラウドの使用によってもたらされる価値としては、サービスに対する需要の変化に企業が素早く対応できるようになること、サービスの新たな市場を開拓できること、そして貴重な人材を (ビジネスをサポートする技術的インフラストラクチャーの実現にではなく) ビジネス革新の実現に専念させられることも挙げられます。
IBM とパブリック・クラウド
パブリック・クラウドに積極的に貢献している IBM では、企業がパブリック・クラウドのアプリケーションを利用して企業独自のエンド・ユーザー・アプリケーションを提供できるようにするためのソリューションを用意しています。アプリケーション・プロバイダーの観点から、IBM はパブリック・クラウドでホストされる IBM Lotus® Live、IBM Lotus Sametime® Unyte®、そしてソフトウェア開発ツールを提供しています。こうしたツールのセットが用意されているおかげでユーザーは、クラウドが提供するサービスを利用するだけで、他のユーザーと知り合い、議論し、協力し、あらゆるものを革新することができます。IBM はこれらのサービスを提供するだけでなく、IBM の Global Business Services 部門では、組織がパブリック・クラウドのオファリングを利用してクラウドに求められている価値を実現するためのソリューションを実装するお手伝いをしています。
この記事の残りでは、IBM ではどのようにして、パブリック・クラウド・インフラストラクチャーを利用することでユーザーが効果的なアプリケーションを提供できるようにしているかを重点に説明を進めます。前述のとおり、IBM は複数のエンタープライズ製品オファリングを Amazon Machine Image としてパッケージ化し、人気の高い Amazon EC2 インフラストラクチャーで使用できるようにしています。IBM AMI として提供されている製品には以下のものがあります。
- IBM WebSphere Portal
- IBM Lotus Web Content Management Standard Edition
- IBM WebSphere sMash
- IBM Informix® Dynamic Server Developer Edition 11.5
- IBM DB2 Express-C 9.5
これらのソフトウェアを無料の開発ライセンスの下、Amazon EC2 インフラストラクチャーで使用できるようにすることで、IBM は 400,000 人を超えるユーザーを擁するエコシステムに働きかけ、クラウド・コンピューティング開発サービスを利用する全開発者の約 80% を魅了しています。
開発者およびクラウド・コンピューティングに対する IBM の展望についての詳細は、developerWorks スペースの Cloud Computing サイトにアクセスしてください。この記事で焦点とするのは、WebSphere sMash AMI と DB2 Express-C AMI がそれぞれに持つ PaaS (Platform as a Service)、DaaS (Data as a Service) の機能です。
WebSphere sMash と DB2 Express-C
WebSphere sMash と DB2 Express-C はそれぞれ単独でも、開発者にとって強力なツールとなっています。WebSphere sMash を使用することによって、DOJO、PHP、Groovy、および REST サービスといったよく知られた技術とパターンを使って Web 2.0 スタイルのアプリケーションを作成することができます。一方、DB2 Express-C は効率的で応答性および信頼性に優れたエンタープライズ・データのストレージを提供し、純粋な XML の処理を行う機能を備えています。これらの技術を組み合わせることで、リッチで応答性の高いデータ指向の Web アプリケーションを提供し、さらに高いレベルの価値を実現することができます。
この記事に付属のサンプル・アプリケーションでは、レストランの客席手配アプリケーションの例を用いて WebSphere sMash ZRM (Zero Resource Model) と DB2 Express-C データベースに備わった機能を垣間見られるようになっています。このアプリケーションのパターンは、極めて複雑なデータとデータ関係に対処するように簡単に拡張することができます。またこのアプリケーションでは、DB2 Express-C に統合された Zero Resource Model を使用しているため、軽量ながらも効率的で応答性に優れたバックエンドに支えられた、リッチなフロント・エンドのエクスペリエンスを実現します。
 | | IBM AMI は無料の開発ライセンスの下に提供されていますが、IBM AMI の終了時にインスタンスを終了することを忘れないでください。これを忘れると、インスタンスのホストに対する Amazon の通常時間料金が請求され続けることになります。 |
|
- AMI をセットアップする
IBM AMI を使用するには、以下のステップを実行します。最初のステップは前提条件です。
- ご自分の AWS (Amazon Web サービス) アカウントを設定します。このアカウントは、EC2 を使用するための管理に使用します。
- WebSphere sMash AMI および DB2 Express-C AMI を取得し、構成します。DB2 Express-C インスタンスを構成するときには、この記事で行うデモ用にデフォルトのユーザー名を使用してください。データベースはこの時点ではまだ作成しません。詳細な作成手順については、次のセクションで説明します。
- 付属のマニュアルに従って、AMI を AWS アカウントにデプロイします。
- データベースを作成して起動する
DB2 Express-C AMI と WebSphere sMash AMI の両方を EC2 にデプロイしたら、実行中の DB2 Express-C インスタンスのデータベースを構成します。アプリケーションはこのデータベースに含まれる表を使用します。
- SSH を使用して DB2 AMI インスタンスにログインし、認証を行います。ログインした後、
su - db2inst1 コマンドを実行して db2inst1 ユーザーに切り替えます。
- createDatabase コマンドを使用して、アプリケーション用のデータベースを作成します。それには、/home/db2inst1/bin ディレクトリーから
./createDatabase RSTDB コマンドを入力します。
図 1. データベースの作成
- 新規データベースを起動するために、DB2 サービスを停止してから再起動します。その方法として、
su コマンドを使用して root ユーザーに切り替え、rcdb2 stop コマンド、続いて rcdb2 start コマンドを実行します。
図 2. データベースの起動
サービスを再起動すると、RSTDB データベースが起動し、DB2 Express-C インスタンスがポート 50001 で実行中の状態になります。DB2 Express-C インスタンスの構成は、これで完了です。WebSphere sMash の ZRM を使用してバックエンドを統合するため、すべてのデータベース表は自動的に構成されます。
- アプリケーションをセットアップする
WebSphere sMash AMI インスタンスをセットアップしたら、http://<ec2_host>:8070/ から AppBuilder アプリケーションにログインします。これから行う作業は、サンプルで使用する WebSphere sMash アプリケーションの作成です。それには、AppBuilder の左パネルにある Create new application をクリックしてサンプル・アプリケーションを作成します。名前の入力を求められたら、RestaurantSeating と入力してください。アプリケーションを作成した後、コンソールの中央パネルに表示されたアプリケーション名をクリックして、アプリケーションへのコンテンツの追加を開始します。
- ZRM を利用する
WebSphere sMash がサポートする ZRM (Zero Resource Model) は、バックエンドのデータ・ストアへの REST スタイルのアクセスを提供するプロセスを劇的に単純化するように設計されています。ZRM は、このアクセスを提供する手段をほんの少しのコードと構成だけでサポートします。作成するのはデータのモデルと、REST によるデータ操作を行うために呼び出すリソース・ハンドラーだけです。リソース・ハンドラーには受信データを処理するためのコードがわずかに含まれるだけで、バックエンドのデータベースとのやりとりは ZRM によって完全に隠されます。
- サンプルの ZRM を使い始めるために、データのリソース・モデルを作成します。リソース・モデルではアプリケーションに含まれるリソースのデータ・フォーマットを定義します。ZRM はこれらのリソース・モデルを使用して、データベースに保管されたデータにアクセスできるようにします。AppBuilder にはすでにログインしているので、New file => Zero Resource Model in app/models => New form の順に選択してください。
図 3. AppBuilder での新規リソース・モデルの作成
- それぞれのエントリーごとに JSON データ・モデルを作成します。これらの JSON モデルが、リソースのそれぞれを構成する属性を定義します。定義には、属性のデータ型に関する情報の他、デフォルト値、データ長などの情報も含まれます。ここではレストランの客席手配システムを作成しているので、以下の 4 種類のエンティティーを対象としたリソース・モデルを作成する必要があります。
- 席を待っている客
- レストランのテーブル
- 着席状況
- ウェイター
WebSphere sMash では、これらのモデルは JSON フォーマットで宣言します。宣言の方法としては、AppBuilder の設計エディターを使用することも、リソース・モデルの JSON 宣言を直接入力することもできます。いずれの場合にしても、リスト 1 に記載する 4 つの JSON ファイルが宣言されることになります。
リスト 1. リソース・モデルの宣言
// start patron.json (model for waiting customers)
{
"fields": {
"name": {
"label": "Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
},
"capacity_requested": {
"label": "Number needed",
"required": true,
"type": "integer",
"description": "",
"default_value": ""
},
"seated": {
"label": "",
"required": true,
"type": "string",
"description": "",
"default_value": "false",
"max_length": 5
}
}
}
// end patron.json
// start rest_table.json (model for restaurant tables)
{
"fields": {
"capacity": {
"label": "Capacity",
"required": true,
"type": "integer",
"description": "",
"default_value": ""
},
"table_type": {
"label": "Type",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
}
}
}
// end rest_table.json
// start waiter.json (model for waiters)
{
"fields": {
"name": {
"label": "Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
}
}
}
// end waiter.json
// start seating.json (model for a seating in the restaurant)
{
"fields": {
"table_id": {
"label": "Table Id",
"required": true,
"type": "integer",
"description": "",
"default_value": ""
},
"patron_name": {
"label": "Patron Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
},
"waiter_name": {
"label": "Waiter Name",
"required": true,
"type": "string",
"description": "",
"default_value": "",
"max_length": 50
}
}
}
// end seating.json |
- 今度は、リソース・ハンドラーをセットアップする番です。リソース・ハンドラーは、リソース・モデルが定義するデータへの REST アクセスを提供します。この例の場合、リソース・ハンドラーは Groovy 言語で実装します。app/resources で New file => Resource handler の順に選択し、リソース・モデルごとにリソース・ハンドラーを 1 つずつ作成します。つまり、4 つのリソース・ハンドラーを作成することになります。リソース・ハンドラーにはリソース・モデルと同じ名前を付けなければなりませんが、ファイル拡張子は .json ではなく .groovy です。作成し終わったら、app/resources で Resource handler を選択してください。各リソース・ハンドラーには onRetrieve、onCreate、onUpdate、および onDelete メソッドが含まれています。それぞれのメソッドは、HTTP メソッドの GET、POST、PUT、DELETE に相当します。リスト 2 は、ウェイター・リソース・モデルに対応するリソース・ハンドラーの例です。
リスト 2. waiter.groovy ファイル
def onList()
{
ZRM.delegate();
}
def onRetrieve()
{
ZRM.delegate();
}
def onCreate()
{
ZRM.delegate();
}
def onUpdate()
{
ZRM.delegate();
}
def onDelete()
{
ZRM.delegate();
} |
前に記載した Groovy での宣言は、ファイルの内容全体を ZRM.delegate() という 1 行に置き換えることで、さらに単純にすることができます。それぞれのメソッドを定義する必要はありませんが、定義した場合には、必要に応じて各メソッドにカスタム・コードを挿入することができます。
- データベース表を作成する
リソース・モデルとリソース・ハンドラーの両方を作成したら、次は WebSphere sMash のコマンドライン・ツールと構成ファイルを使ってデータベース表を作成します。
- SSH を使用して WebSphere sMash AMI インスタンスにログインし、/home/smash/apps/RestaurantSeating/config/zero.config ファイルを更新します。このファイルに、バックエンドのデータ・ストアの名前、ロケーション、構成を追加してください。
リスト 3. ZRM と DB2 Express-C の統合
/config/db/zero-resource = {
"class" : "com.ibm.db2.jcc.DB2SimpleDataSource",
"driverType" : 4,
"serverName" : "ec2-75-101-207-229.compute-1.amazonaws.com",
"portNumber" : 50001,
"databaseName" : "RSTDB",
"user" : "db2inst1",
"password" : "passw0rd"
} |
- db2cc.jar と db2cc_license_cu.jar を WebSphere sMash アプリケーション・ライブラリーにコピーします。前の手順で、ZRM に必要な情報としてデータ・ソースのクラス名、データベースのロケーション、そしてデータベースのアクセス情報を提供しました。その情報ではデータ・ソース・クラスとして com.ibm.db2.jcc.DB2SimpleDataSource が指定されているため、適切な DB2 ライブラリーが WebSphere sMash で使用できることを確実にする必要があります。SCP プログラムを使用して、DB2 Express-C AMI インスタンスから /home/db2inst1/sqllib/java/db2cc.jar ファイルと /home/db2inst1/sqllib/java/db2cc_license_cu.jar ファイルを取得してください。この 2 つのファイルを /home/smash/apps/RestaurantSeating/lib ディレクトリーにコピーします。続いて WebSphere sMash インスタンスの /home/smash/apps/RestaurantSeating ディレクトリーから zero resolve を実行し、コピーした 2 つの新しい JAR ファイルがアプリケーションのクラスパスに追加されるようにします。
- この時点で、データベース表の初期データを定義することもできます。表を作成した後にデータを入力する時間を節約するには、表の作成と同時に表に入力する初期データを定義する機能を使用します。このデータは、アプリケーション内の app/models/fixtures ディレクトリーにある initial_data.json ファイルに定義します。このファイルに含まれる項目は、前の手順で定義したリソース・モデルのインスタンスです。表を生成し、その表に初期データを入力するには zero model
sync コマンドを実行します。その結果、DB2 Express-C AMI インスタンスに表が作成され、この表に initial_data.json ファイルに定義したデータが挿入されます。
- ユーザー・インターフェースを作成する
次は、システムのユーザーがデータを表示できるようにし、そのデータを操作できるようにする必要があります。WebSphere sMash には、ZRM の機能を使用して保管されたデータにアクセスするためのカスタム DOJO ウィジェットが用意されています。これらのウィジェットが提供する機能は、設定なしでそのまま使えます。また、ウィジェットは HTML ページのどこにでも配置することができます。そしてウィジェットに必要な構成情報を提供すると、前に作成したリソース・ハンドラーを使ってバックエンド・データにアクセスし、作成、読み取り、更新、削除を実行できる使いやすいユーザー・インターフェースが出来上がります。
- ZRM リソース・ハンドラーとやりとりする DataStore、そしてその DataStore を利用する DataGrid を定義します。レストラン客席手配システムには、接客係が現在席の案内を待っている客を確認するための機能、新しい客を追加するための機能、そして現在の着席状況を表示するための機能が必要です。zero.resource.DataStore と zero.grid.DataGrid を使用することで、客の情報を表示することができます (この手法は、ZRM を使用するように構成された着席状況データ (あるいは関連するあらゆるデータ) に適用することができます)。
リスト 4. 客の DataGrid および DataStore
// patron DataStore
<span dojoType="zero.resource.DataStore" id="patronDataStore"
jsId="patronDataStore"
contextRoot="./resources"
resourceCollection="patron">
</span>
// patron DataGrid
<div dojoType="zero.grid.DataGrid"
id="patronDataGrid"
visibleFields="name,capacity_requested,id"
store="patronDataStore"
readonly="true"
style="width: 348px; height: 271px;">
</div> |
DataStore は客 (patron.json) のリソース・コレクションを参照し、DataGrid は DataStore を参照します。図 4 は、出力の一例です。
図 4. 客の zero.grid.DataGrid
DataGrid でデータを表示するだけでなく、新しい客を追加することも、席の案内を待っている客に席を手配することも可能です。ZRM を利用すれば、バックエンドのデータ・ストアに新しいデータを容易に追加することができます (この情報を取得するために使用する HTML フォームとスタイルについては、記事に付属のダウンロード・ファイルに含まれるサンプル・コードを参照してください)。
リスト 5. 新しい客データの追加
function addPatron() {
dojo.xhrPost({
url: "resources/patron",
form: "addPatronForm",
load: function (data) {
hideAddPatron();
displayWaitingPatrons();
},
// Call this function if an error happened
error: function (error) {
console.error ('Error: ', error);
}
});
} |
- HTML および JavaScript™ を使用して、ZRM リソース・ハンドラーと通信できるようにします。前の例では、patron.groovy リソース・ハンドラーを呼び出し、その内部で処理を ZRM に委任することで、DB2 データベースに新規データを入力しました。図 5 では前述の概念を拡張し、現在の着席状況に関する情報の表示および更新に対処しています。多少の HTML およびJavaScript コードを使用した結果、ユーザー・インターフェースは図 5 に示すようになりました。
図 5. レストラン客席手配システムのユーザー・インターフェース
このように、簡潔で見た目もわかりやすく、印象的なユーザー・インターフェースになりました。このユーザー・インターフェースを使えば、接客係はレストラン内の着席状況を完全に管理することができます。

 |
自分で試してみてください
この記事で説明したサンプル WebSphere sMash アプリケーションの完全なコードは、ダウンロードすることができます。アプリケーションを試す上で、リソースはほとんど必要ありません。WebSphere sMash と DB2 Express-C 両方のプラットフォームをホストする AMI と EC2 を利用できるからです。上記で説明した一般的な手順に従えば、簡単に両方の AMI を起動して構成し、Amazon EC2 で使用できるようになります。
WebSphere sMash の ZRM のおかげで、開発者はデータベースと通信するための詳細な設定に力を注ぐ代わりに、データや、データ同士の関係、そしてこれらの関係をユーザーに表現する最善の方法に専念することができます。これらの利点を DB2 Express-Cが提供する堅牢で応答性に優れた包括的なデータベース機能と組み合わせると、リッチなデータ指向のユーザー・エクスペリエンスを直接ブラウザーにもたらせるようになります。
ダウンロード | 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|
| Code sample | restaurantSample.zip | 52 KB | HTTP |
|---|
参考文献 学ぶために
製品や技術を入手するために
議論するために
著者について  | |  | Dustin Amrhein は、WebSphere Application Server 開発チームのメンバーとして IBM に入社しました。この開発チームに在籍している間、彼が主に取り組んでいたのは Web サービス・インフラストラクチャーと Web サービス・プログラミング・モデルです。さらに、彼は Java ランタイムを対象とした RESTful なサービス・フレームワークの開発にも携わりました。現在の任務は、IBM WebSphere ポートフォリオの新しい技術を広めることです。 |
記事の評価
|  |