本文へジャンプ

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


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

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

  • 閉じる [x]

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

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

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


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

  • 閉じる [x]

プラグインを使って新しいアプリケーションを IBM PureSystems にデプロイする: 第 1 回

実際の SugarCRM ソリューションを有効にするための設計時の考慮事項と開発作業

Chin Huang, Cloud Solutions Architect, IBM
Chin Huang は、IT およびソフトウェア・アーキテクチャーを専門とするクラウド・ソリューション・アーキテクトです。IaaS プラットフォーム、SaaS インテグレーション、アナリティクス・クラウド、Web サービス、IWD プラグインを含む拡張ソリューションの開発で専門的経験を積んでいる彼は、認定クラウド・コンピューティング・ソリューション・アドバイザーであり、10 以上の技術雑誌で著作活動を行っています。彼は、カリフォルニア州シリコン・バレー在住です。
Ton Ngo, Cloud Solutions Architect, IBM
author photo
Ton Ngo は、カリフォルニア州サンノゼにある IBM Silicon Valley Lab に勤務するクラウド・ソリューション・アーキテクト兼シニア開発者です。最近では、シンガポールの南洋理工大学のハイパフォーマンス・コンピューティング・クラウド、そしてカナダ・ロイヤル銀行のテストおよび開発クラウドのアーキテクトを務めました。その前は、IBM T.J. Watson Research Center と Almaden Research Center での計 17 年間の研究者としての経歴を持ち、さまざまなテーマの研究論文を発表しています。

概要: アプリケーション、サービス、ハードウェア、さらには (ベスト・プラクティス・パターンという形で) 専門家の高度な知見までもまとめて提供する、エンタープライズ・レベルのエキスパート・インテグレーテッド・クラウド・システム IBM PureSystems の導入は、クラウド・コンピューティングを新しいレベルへと引き上げます。IBM PureSystems を利用するようにアプリケーションを準備する 1 つの方法は、アプリケーション・パッケージとこのシステムとの間を橋渡しするプラグインを作成することです。この記事では、IBM Cloud 研究所チームの専門家たちが独立系ソフトウェア・ベンダー (ISV) アプリケーションである SugarCRM を IBM PureSystems 上で実行可能にするために行った開発作業について説明します。

日付:  2012年 5月 17日
レベル: 初級 この記事の原文:  英語 PDF:  A4 and Letter (724 KB | 23 ページ)Adobe® Reader® が必要
アクティビティー: 4384 ビュー
お気軽にご意見・ご感想をお寄せください: 


アプリケーション、サービス、ハードウェア、さらには (ベスト・プラクティス・パターンという形で) 専門家の高度な知見までもまとめて提供する、エンタープライズ・レベルのエキスパート・インテグレーテッド・クラウド・システム IBM PureSystems の導入は、クラウド・コンピューティングを新しいレベルへと引き上げます。IBM PureSystems を利用するようにアプリケーションを準備する 1 つの方法は、アプリケーションとこのシステムの間を橋渡しするプラグインを作成することです。

この 2 回の連載では、著者たちが設計時の考慮事項、開発作業、そしてプロジェクトから学んだ教訓について説明します。第 1 回では、独立系ソフトウェア・ベンダー (ISV) アプリケーションである SugarCRM を IBM PureSystems 上で実行可能にするために行った開発作業を取り上げます。SugarCRM は PHP アプリケーションであることから、LAMP (Linux、Apache、MySQL、PHP) スタックが必要となります。LAMP は、そのままの IBM PureSystems ではサポートされません。そのため、チームは新しいパターン・タイプと、Linux および IBM AIX のベース・イメージを基にアプリケーションのモデル化、デプロイメント、操作をサポートする一連のプラグインを開発しました。第 2 回では、このプロジェクトから学んだ教訓を説明します。

IBM PureSystems は、アプリケーションのライフサイクル全体を管理します。このプロジェクトを開始するにあたり、私たちはまず SugarCRM を深く理解するために、IBM で IBM PureSystems サブジェクト・マター・エキスパートと情報を交換し、ISV とのワークショップを開き、この SugarCRM アプリケーションで実験を行いました。また、オープンソース・ソフトウェアとベンダー・ソフトウェアが関係してくることから、ライセンスの問題についても検討する必要がありました。サポートされるデータベースには、MySQL と、IBM にとってより戦略的な IBM DB2 があります。プラグインのアーキテクチャーを設計し、IBM PureSystems で SugarCRM のライフサイクルをサポートする方法を定義するには、全体像を理解していなければなりません。

アプリケーションをモデル化する際には、プラグインにより、ユーザーが SugarCRM を表すボックスをドラッグ・アンド・ドロップしてデータベースを表すボックスに接続できるようにします。データベースには MySQL と DB2 のいずれかを使用することができます。MySQL は既存のサーバーとしてモデル化する一方、DB2 は新規サーバーにも、既存のサーバーにもすることができます。

ユーザーが SugarCRM アプリケーション・パターンをクラウドにデプロイするときには、プラグインのスクリプトにより、すべてのミドルウェアとアプリケーションが自動的にインストールおよび構成されるようにします。これらのスクリプトは IBM PureSystems とやりとりすることでデプロイメント情報を取得し、ステータスを更新します。

アプリケーションのデプロイメントが完了した後は、プラグインによってユーザーが Apache サービスを起動、停止できるようにするとともに、SugarCRM からログを表示できるようにします。

私たちはこのプロジェクトから、プラグインの開発について理解する上でのみならず、アプリケーションをクラウドで使用可能にする際の思考プロセスを理解する上で、貴重な経験を得ました。開発を進める中、私たちは定期的に IBM PureSystems プラグイン開発チームと情報を交換し、PDK (Plug-in Development Kit) に関する指導を仰ぐとともに、フィードバックを提供しました。フィードバックの一部は、開発チームの新しい作業項目となったり、新たなベスト・プラクティスとなったりしました。さらに、私たちの設計が IBM の戦略的方向と一致することを確実にするために、製品チームにも相談しました。

取り組む課題を定義する

SugarCRM は、顧客関係管理のソリューションを提供している ISV アプリケーションです。SugarCRM ソリューションの長所としては、ユーザー・エクスペリエンスが直感的であること、そして極めて柔軟なオープンソース・プラットフォームであることなどが挙げられます。このソリューションには 4 つのエディションが用意されており、サイトにデプロイするか、企業あるいはクラウドでホストすることができます。

SugarCRM の概要

SugarCRM によるソリューションは、一般に LAMP (Linux、Apache、MySQL、PHP) スタック上で実行される PHP アプリケーションです。追加のサポート・ソフトウェアが、パフォーマンスを向上させるため (APC (Alternative PHP Cache) など)、そしてスケールアウトを実装するため (memcache) に使用されます。

IBM PureSystems は、LAMP スタックのサポートを初期セットアップの一環として提供しません。そこで、IBM Cloud 研究所チームは、SugarCRM を IBM PureSystems 上で実行するために必要なサポートを開発しました。

ビジネス・シナリオを定義する

最初のステップは、ビジネスの目標と技術ソリューションを一致させることでした。そこで、SugarCRM アプリケーションを実行したいと考えている IBM PureSystems のお客様を対象に、アプリケーションを使用可能にすることから実行するに至るまでのすべてのエクスペリエンスをサポートするためのビジネス・シナリオとして以下の 5 つを特定しました。

  • IBM PureSystems で SugarCRM とオープンソース・ソフトウェアを使用可能にする
  • SugarCRM アプリケーションをモデル化して構成する
  • SugarCRM アプリケーションを IBM PureSystems クラウドにデプロイして実行する
  • SugarCRM 実行インスタンスのライフサイクルを管理する
  • 2 つのデータベース (MySQL および DB2) をデータ・リポジトリーとしてサポートする

プラグイン・アーキテクチャーを定義する

プラグインのアーキテクチャーを定義するには、典型的な SugarCRM トポロジー、設計時の考慮事項、そして技術開発に影響する可能性のあるライセンスの問題を詳しく調べる必要があります。

PHP アプリケーションとしての SugarCRM

表 1 に、ISV が System x および System p に推奨しているソフトウェア・スタックを要約します。


表 1. SugarCRM に推奨されているソフトウェア・スタック
System xSystem p
Red Hat Enterprise Linux 5AIX 7.1
Apache 2.2Apache 2.2
必要な拡張機能を追加した PHP 5.3必要な拡張機能を追加した PHP 5.3
APC 3.1APC 3.1
MySQL 5.1DB2 9.7

SugarCRM のチームが示した典型的なトポロジーは、単一の Apache サーバーをデータベース・サーバーに接続するというものです (図 1 を参照)。


図 1. 単一のサーバーからなるトポロジー

上記のトポロジーほど一般的ではありませんが、クラスター技術では、Apache サーバーの数を増やしてユーザー数の増加に対処します (図 2 を参照)。


図 2. クラスター・トポロジー

この場合、SugarCRM は memcache をセッション・マネージャーとして使用し、nginx をロード・バランサーとして使用します。SugarCRM は、Apache が PHP ファイルとデータをホストするローカル・ディレクトリーにライトバックするので、複数の Apache サーバーが同じローカル・ディレクトリーを共有する必要があります。その方法として、この共有ディレクトリーを NFS サーバー上でホストします。SugarCRM の新しいバージョンへのアップグレードでは、共有ファイルシステムも役立ちます。共有ファイルシステムを使用することで、すべてのサーバーを同時にアップグレードできるためです。

設計時の考慮事項

IBM PureSystems の重要な概念は、クラウドのユーザーにアプリケーション中心の視点を与え、ユーザーがアプリケーションに重点を置き、その下層にあるインフラストラクチャーを無視できるようにすることです。IBM PureSystems は、アプリケーションのモデル化、デプロイメント、そして操作という 3 つの側面を管理します。この 3 つの側面に関係するシナリオはかなりの数に上るはずです。以下に、私たちが設計時の選択を行う際に扱った考慮事項を挙げます。

  • IBM PureSystems では、スケーリング・ポリシーを使用するという方法で SugarCRM のクラスター・トポロジーをサポートすることができますが、このプロジェクトのスコープは単一サーバー・トポロジーに限られています。
  • 標準的なデプロイメントでデータベースとしてよく使用されているのは MySQL ですが、このプロジェクトでは MySQL にも対応するものの、重点は DB2 に置いています。そのために、ユーザーが DB2 を新規インスタンスまたは既存のインスタンスとしてモデル化できるようにしました。MySQL は既存のインスタンスとしてのみサポートされます。
  • Apache/PHP ソフトウェア・スタックは、オープンソース Web サーバーに一般的なプラットフォームなので、このスタックをサポートする新しい一連のプラグインは、他のプロジェクトでも再利用することができます。私たちが最初に考えたのは、この Apache/PHP ソフトウェア・スタックをスタンドアロンのコンポーネントとしてモデル化し、SugarCRM をそれとは別のコンポーネントとしてモデル化して、この 2 つをリンクさせることです。このようにすれば、新しい PHP アプリケーションに対するサポートを簡単に追加することができます。けれども、このようなアプリケーション・パターンでは、インフラストラクチャーのソフトウェア・スタックを公開することになるため、アプリケーション中心の手法にはうまく当てはまらないという懸念がありました。そのため、私たちは SugarCRM アプリケーションと完全なサポート・ソフトウェア・スタックをまとめて 1 つのコンポーネントとしてモデル化することにしました。
  • SugarCRM の構成は比較的単純で、必要なパラメーターは少数です。これらのパラメーターのなかから、SugarCRM コンポーネントで公開するパラメーターを選択しました。
  • それよりも遥かに大きく影響するのは、データベースを構成するためのパラメーターのセットです。私たちは、SugarCRM に関連するパラメーターだけを公開し、残りのパラメーターはデフォルト値に設定しました。DB2 と MySQL はそれぞれ異なるコンポーネントに属しますが、パラメーターのセットはこの 2 つのデータベースでまったく同じです。

ライセンスの問題

一般に、ライセンスの問題は、技術設計においてあまり意味を持ちませんが、一部の ISV のワークロードには IBM 以外のソフトウェアが必要になる可能性があるため、ソフトウェアとミドルウェアのライセンスを適切に管理する必要があります。私たちは、以下の手法を基に決定を行いました。

  • ソフトウェアをプラグイン内にバンドルする。ソフトウェア・バイナリーまたはソース・コードをプラグイン zip ファイルに含めます。この場合、IBM PureSystems 管理コンソールでパターン・タイプとプラグインが有効にされると、ソフトウェアが使用可能になります。ソフトウェアのライセンス契約は、クラウド管理者がパターン・タイプの有効化プロセス中に検討し、同意します。ソフトウェアをバンドルするという手法では、ソフトウェアがプラグイン開発プロセスと有効化プロセスに密接に統合されます。

  • プラグインを有効にする際に、クラウド管理者がソフトウェア・バイナリーまたはソース・コードを提供できるようにする。プラグインはパターン・タイプ・パッケージと一緒に IBM PureSystems にインポートされます。その時点では、「使用不可」の状態です。クラウド管理者は必要なソフトウェアを収集した後、通常のライセンシング手順に従います。その上で、IBM PureSystems 管理コンソールで個々のプラグインの構成オプションを使用してプラグインを有効にすると、ソフトウェア・ファイルが IBM PureSystems ストア・ハウスに保持される結果となります。この場合、ソフトウェアのライセンス契約プロセスは、IBM PureSystems 環境の外部で行われます。

  • ソフトウェア・バイナリーまたはソース・コードをベースとなるオペレーティング・システム・イメージに組み込む。この場合、クラウド管理者は仮想マシンを IBM PureSystems カタログに追加するときに、ライセンス契約に同意しなければなりません。複数のパターン・タイプとプラグインで、ベースとなるオペレーティング・システム・イメージとして同じものが共有されることから、この手法はプラグイン固有のソフトウェアで使用する場合よりも、IBM PureSystems ドメイン全体を対象とした汎用ソフトウェアで使用する場合に功を奏します。

SugarCRM アプリケーションは、いくつかのサード・パーティーおよびオープンソースのソフトウェアに依存するため、プラグインには SugarCRM ファイルだけをバンドルし、プラグインを有効にする際に、追加の (IBM およびオープンソースの) ソフトウェア・バイナリーとソース・コードをクラウド管理者からの入力として取ることにしました。


設計と開発

以降のサブセクションの記載順は、SugarCRM プラグインを開発する際に私たちが行った設計および実装プロセスの流れにほとんど従っています。

ソリューションの設計

このソリューションの設計における重要な決定事項は、プラグインの役割と責任を特定することです。私たちは主として、以下の 2 つの手法を検討しました。

  • 最初の手法は、Apache、PHP、およびデータベース接続をサポートする汎用プラグインのセットを開発し、これらのプラグインへの入力として SugarCRM を適用することです。この手法ではより柔軟に、他の同じような PHP アプリケーションに拡張できる、真の汎用 PHP 機能を設計して実現することができます。

  • もう 1 つの手法は、SugarCRM に固有の PHP およびデータベース・プラグインを設計、実装して、完全に機能する SugarCRM アプリケーションにすることです。このようなアプリケーション中心の設計は仮想アプリケーションの概念にぴったり適合し、すべての関係者たちの間でプラグインの所有権と責任を定義しやすくなります。

PHP 構成は極めて動的であることを考慮し、私たちはアプリケーション中心の設計 (つまり、SugarCRM 専用の設計) を当座の有効化ソリューションとして選びました。そこには、モジュール式のコードを実装することによって、より一般的かつ再利用可能な手法について、後から再検討するという意図がありました。私たちは、『Plug-in Development Guide』に記載されている IBM PureSystems プラグインの相互作用に関するガイドラインに従って、3 つのプラグインを開発しました。以下に説明するように、これらのプラグインは、それぞれに明確な役割を持つように作られています。

  • SugarCRM プラグイン
    • SugarCRM をインストールする際のユーザー入力を定義し、収集します。
    • 必須オペレーティング・システム・パッケージをインストールします。
    • Apache、PHP、APC を含め、必須ソフトウェアをインストールして構成します。
    • SugarCRM Enterprise パッケージをコピーし、使用できるように準備します。
    • SugarCRM ログを監視します。
    • 基本的な実行時の操作をサポートします。
  • DB2 リンク・プラグイン
    • 既存の DB2 インスタンスのユーザー入力を定義し、収集します。
    • 新規 DB2 インスタンスを SugarCRM と同じアプリケーション・パターンでサポートします。
    • IBM データ・サーバー・クライアントおよび IBM DB2 PHP 拡張機能を含め、必須ソフトウェアをインストールして構成します。
    • DB2 と連動するように PHP を再構成します。
    • SugarCRM Enterprise をインストールし、DB2 をバックエンド・データベースとして使用して構成します。
  • MySQL リンク・プラグイン
    • 既存の MySQL インスタンスのユーザー入力を定義し、収集します。
    • MySQL クライアント・サイド・パッケージを含め、必須ソフトウェアをインストールして構成します。
    • MySQL と連動するように PHP を再構成します。
    • SugarCRM Enterprise をインストールし、MySQL をバックエンド・データベースとして使用して構成します。

Apache と PHP に伴うオープンソースの性質から、もう 1 つの重要な決定事項として、サード・パーティーのソフトウェア・バイナリーをバンドルするか、前提条件ソフトウェアをオンザフライでビルドするかを決めなければなりませんでした。私たちは、柔軟性と拡張性を高めるために、ユーザーが提供するソースからビルドすることにしました。

ソリューションのパッケージ化

設計に関する決定事項、およびライセンスに関する制約事項に基づき、SugarCRM 有効化ソリューションは複数のファイルとしてパッケージ化します。これらのファイルを使用して、IBM PureSystems でビジネス・シナリオを有効にします。

主要なプラグイン・ファイルは、パターン・タイプ定義と 4 つのプラグインの合計 5 ファイルが含まれるパターン・タイプ・パッケージです。このファイルには、SugarCRM アプリケーションのモデル化、デプロイメント、操作をサポートするために私たちが開発した Java コード、JSON 構成、Python、そしてシェル・スクリプトが含まれています。このファイルの名前は、sugarcrm-1.0.0.0.tgz です。


表 2. SugarCRM パターン・タイプ・パッケージの内容
ファイル名TGZ 内のサブフォルダー内容
sugarcrm-1.0.0.0.tgzバージョン 1.0.0.0 用の Sugarcrm パターン・タイプ定義
sugarcrm-1.0.0.2.tgzpluginsApache、PHP、APC、および SugarCRM Enterprise Edition v6.4.0 をサポートする Sugarcrm プラグイン
sugarcrmdb2-1.0.0.2.tgzpluginsDB2 と SugarCRM の接続をサポートする Sugarcrm DB2 リンク・プラグイン
sugarcrmmysql-1.0.0.2.tgzpluginsMySQL と SugarCRM の接続をサポートする Sugarcrm DB2 リンク・プラグイン
sugarcrm-samples-1.0.0.2.tgzpluginsサンプル・アプリケーション・パターンおよびテンプレートを提供する Sugarcrm サンプル・プラグイン

上記のパッケージ化されたソリューション・ファイルをダウンロードするには、SugarCRM サイトにアクセスしてください。

パターン・タイプ・パッケージ以外のプラグイン有効化ファイルには、自由にダウンロードできるサード・パーティーの製品およびソースが格納されています。クラウド管理者は、自らソースをビルドすることも、事前ビルドされたパッケージをダウンロードしてから個々のプラグインを IBM PureSystems ユーザー・インターフェースで構成することもできます。IBM PureSystems でサポートされる主要なプラットフォームの 1 つは Linux なので、以下に、Linux 対応の有効化ファイルの詳細を示します。

ファイル名TGZ 内のサブフォルダーソース内容
autoconf-latest.tgzLinux\SOURCEShttp://www.gnu.org/software/autoconf/PHPize が PHP 拡張機能をコンパイルするために必要となるツール
httpd-2.2.21.tgzLinux\SOURCEShttp://httpd.apache.org/download.cgiApache ソース・パッケージ
PHP-5.3.8.tgzLinux\SOURCEShttp://www.PHP.net/PHP ソース・パッケージ
APC-3.1.9.tgzLinux\SOURCEShttp://pecl.PHP.net/package/APCAPC ソース・パッケージ

表 4. DB2 リンク・プラグイン有効化パッケージの内容 (DB2LinkLinux.tgz)
ファイル名TGZ 内のサブフォルダーソース内容
ibm_data_server_client_linuxx64_v97.tar.gzLinux\Productshttp://www-01.ibm.com/support/docview.wss?rs=4020&uid=swg21385217db2 拡張機能をビルドするために使用する、IBM データ・サーバー・クライアント v9.7
ibm_db2-1.9.2.tgzLinux\SOURCEShttp://pecl.PHP.net/package/ibm_db2PHP 拡張機能「ibm_db2」のソース

表 5. MySQL リンク・プラグイン有効化パッケージの内容 (MySQLLinkLinux.tgz)
ファイル名TGZ 内のサブフォルダーソース内容
mysql-shared-compat-5.0.92-1.rhel5.x86_64.rpmLinux\RPMShttp://dev.mysql.com/downloads/mysql/5.0.html#downloadsMySQL オプションを使用する PHP に必要な RPM
mysql-devel-5.0.77-4.el5_4.2.x86_64.rpmLinux\RPMShttp://dev.mysql.com/downloads/mysql/5.0.html#downloadsMySQL オプションを使用する PHP に必要な RPM

出発点として PDK を使用する

プラグインは、Eclipse プロジェクトとして構成することができます。その場合、柔軟で強力なプラットフォームを利用して開発できると同時に、プラグインの内部構造は厳格なルールと規約に従うため、適格なパッケージにプラグインを組み込んで IBM PureSystems サブシステムで処理することができます。開発ツールが必要となる領域には、起動およびデバッグの 2 つがあることがわかりました。この目的のために、IBM PureSystems の一部として ZIP ファイル形式の PDK (Plug-in Development Kit) を入手することができます。この ZIP ファイルは IBM PureSystems のホーム・ページからダウンロードしてください。

PDK には、2 つのコンポーネント・プラグインと 1 つのリンク・プラグインがサンプル・セットとして用意されています。私たちはこれらのサンプル・プラグインを学習のために使用するとともに、サンプル・プラグインを変更することによって、プラグイン開発の出発点としました。暗黙的なルールと規約を開発中に正確に認識するのは簡単なことではありません。その結果取り込まれたエラーは、実行中に不可解な形で現れるため、デバッグを困難にします。ルールに対する違反がある場合には、ビルド中に、違反によるエラーが検出されるはずです。

デバッグについても、PDK はデバッグ・プラグインという手段で支援します。このコンポーネントは、仮想アプリケーション・パターンにドラッグ・アンド・ドロップすることができます。デバッグ・プラグインにより、以下の 2 つデバッグ手法が可能になります。

  1. ユーザーは、実際に VM をクラウドにデプロイすることなくパターンをデプロイすることができるため、トポロジー成果物を検査することができます。この手法は、開発の初期段階でコードがまだ機能する状態ではなく、ユーザーが長時間にわたる VM のデプロイメント・サイクルを避けたい場合に役立ちます。
  2. パターンがクラウドにデプロイされた後、アクティベーション中に使用されるファイルは、ユーザーがログインしてデバッグできるように VM に保持されます。この手法は、開発の後のほうの段階でシェルおよび Python スクリプトをデバッグする際に役立ちます。

パターン・タイプを使用する

パターン・タイプとは、特定のソリューションとトポロジーを識別する複数のプラグインを 1 つにまとめたものです。開発環境では、パターン・タイプはプロジェクトとして表示されます。開発者は patterntype.json 内に名前、バージョン、説明、およびライセンス契約を定義し、PDKに用意されているビルド・スクリプトを使ってパターン・タイプ・パッケージ・ファイルを生成することができます。

私たちは SugarCRM パターン・タイプ・ファイルに 3 つの機能プラグインと 1 つのサンプル・プラグインをパッケージ化しました。これにより、クラウド管理者はこのパターン・タイプをインポートして有効にし、「ソリューションのパッケージ化」セクションで説明した TGZ ファイルを使用して、機能プラグインをアクティブにすればよくなっています。サンプル・プラグインは構成の必要がないため、パターン・タイプが有効にされると同時に有効になります。

アプリケーション・モデルの開発

プラグインに関連付けられたコンポーネント、リンク、ポリシー、ユーザー入力パラメーターは、appmodel/metadata.json ファイル内にモデル化されています。「設計時の考慮事項」セクションで説明したモデル化に従って、私たちは 1 つのコンポーネントとしての SugarCRM プラグインと、コンポーネントとリンクの両方をサポートするための複数のデータベース・プラグインを作成しました。

  • コンポーネントまたはリンクの id 属性は、一意にする必要があります。この属性が、変換の際にコンポーネント名として使用されます。
  • type 属性は、コンポーネント、リンク、またはポリシーのいずれかを識別します。
  • コンポーネントのグラフィックに関する側面 (imagethumbnail など) を指定することもできます。

宣言型の手法を使用することで、IBM PureSystems アプリケーション・ビルダーがすべてのプラグインと対話し、ユーザー入力を収集し、アプリケーション・モデルを JSON 文書としてストア・ハウスに保持することが可能になります。

以下の JSON セグメントに示すように、コンポーネントとリンクを同じ metadata.json ファイルに定義しました。

{
	"id":"xDB2",
	"type":"component",
 	"thumbnail"  : "appmodel/images/thumbnail/existing_DB2_thumb.png",
	"image"      : "appmodel/images/existing_DB2.png"
}
{
        "id":"SugarCRMDB2",
	"type":"link",
	"source":[
            "SugarCRM"
	],
	"target":[
            "DB2",
            "xDB2"
	]
}

図 3 に示されているように、ユーザーは SugarCRM コンポーネントと、サポートされている 2 つのデータベース・コンポーネント (DB2 と MySQL) のいずれか一方を選択することができます。


図 3. コンポーネント・パレット

ユーザーはそれぞれのコンポーネントに必要なパラメーターを入力した後 (図 4 および図 5)、ドラッグによって、この 2 つのコンポーネントを接続します。DB2 コンポーネントは新しいサーバーでも既存のサーバーでも構いませんが、MySQL コンポーネントは既存のサーバーとしてのみサポートされます。


図 4. SugarCRM のパラメーター


図 5. データベース・コンポーネントのパラメーター

図 6 に、SugarCRM と既存の DB2 を使用したパターンの例を示します。便宜上、SugarCRM のパターン・タイプには複数の作成済みテンプレートが組み込まれています。


図 6. SugarCRM と既存の DB2 を使用したパターンの例

変換プログラムの実装

プラグインの開発で重要なタスクの 1 つとなるのは、変換プログラムの実装です。すべてのプラグインには変換プログラムが用意されています。この変換プログラムが、アプリケーション・モデルに含まれるコンポーネント、リンク、またはポリシーを、IBM PureSystems フレームワークでのデプロイメントに使用できるトポロジー文書フラグメントに変換します。アプリケーション・モデルとトポロジー文書は両方とも JSON 文書です。

変換プログラムを実装するには 2 つの方法があります。

  • 単純なモデルの場合、IBM PureSystems には TemplateTransform クラスがあります。このクラスでは、Apache Velocity Engine を使用して JSON ベースのテンプレートとして変換プログラムを作成することができます。したがって開発者は、JSON および Velocity マクロを使って、より視覚的に開発を行うことができます。
  • 複雑なモデルの場合、開発者は TopologyProvider クラスを継承した Java 実装を作成して、Java コードで動的かつ柔軟なトポロジー JSON オブジェクトを組み立てることになります。

私たちのデータベース・プラグインには、変換が比較的単純であるという理由で前者のテンプレート手法を選びました。既存のデータベース・コンポーネントとリンクのそれぞれにテンプレートを用意します。以下のテンプレート・セグメントに、既存の DB2 データベースの場合のパラメーター変換を示します。

#set( $db_type = $provider.componentName.substring(1) )
{
    "name"  : "xDB2",
    "type"  : "xDB2",
    "parms" : {
        "db_type"     : "$db_type",
        "db_name"     : "$attributes.db_name",
        "db_hostname" : "$attributes.db_hostname",
        "db_port"     : "$attributes.db_port",
        "user"        : "$attributes.user",
        "password"    : "$attributes.password",
        "service"     : "$prefix"
    }
}

SugarCRM コンポーネントの変換には、より高い機能性が必要であるため、Java 実装を使用した変換プログラムを開発しました。

Velocity テンプレートまたは Java コードの使用は、OSGI-INF ディレクトリー内の XML ファイルに宣言します。以下の XML セグメントでは、テンプレート templates/xdb2_component.vm を変換プログラムとして使用することを宣言しています。

<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="xDB2">
 <implementation class="com.ibm.maestro.model.transform.template.TemplateTransformer"/>
	<service>
		<provide interface="com.ibm.maestro.model.transform.TopologyProvider"/>
	</service>
 <property name="component.template" type="String" value="templates/xdb2_component.vm"/>
</scr:component>

コンポーネント文書 OSGI-INF/*.xml は、マニフェスト・ファイル META-INF/MANIFEST.MF に記載されている必要があります。以下に、DB2 リンク・プラグインに使用する 2 つのコンポーネント文書を記載したマニフェスト・ファイルのセグメントを示します。

Service-Component: OSGI-INF/SugarCRMDB2Transform.xml,OSGI-INF/xDB2Transform.xml

自動化スクリプト

SugarCRM をサポートする一連の新規プラグインには、以下のコンポーネントが含まれます。

  1. 既存の DB2: 既存の DB2 サーバーを表し、SugarCRM 用にデータベースを初期化するなどの必要な構成を行います。
  2. 既存の MySQL: 既存の MySQL サーバーを表し、SugarCRM 用にデータベースを初期化するなどの必要な構成を行います。
  3. DB2 リンク: SugarCRM と DB2 コンポーネントとの間の依存関係を表します。SugarCRM と DB2 サーバーの両方が使用可能になった時点で、最終的な構成を行います。これには、DB2 サーバーの IP アドレスを SugarCRM サーバーに伝播することも含まれます。
  4. MySQL リンク: SugarCRM と MySQL コンポーネントとの間の依存関係を表します。SugarCRM と MySQL サーバーの両方が使用可能になった時点で、最終的な構成を行います。これには、MySQL サーバーの IP アドレスを SugarCRM サーバーに伝播することも含まれます。

実際の実装のために、これらのプラグインのコードを以下の Eclipse プロジェクトとして編成しました。

  1. SugarCRM コンポーネントを 1 つのプロジェクトとして編成
  2. 既存の DB2 コンポーネントとリンクを結合プロジェクトとして編成
  3. 既存の MySQL コンポーネントとリンクを結合プロジェクトとして編成

『Plug-in Development Guide』に、プラグイン実装が従わなければならない Eclipse プロジェクトの構造が明確に定義された形で説明されています。図 7 と図 8 に、この 3 つの Eclipse プロジェクトの内部レイアウトを示します。図中では、コードが置かれているプラグイン・ディレクトリーに焦点を当てています。


図 7. SugarCRM のプラグイン実装


図 8. DB2 および MySQL のプラグイン実装

赤で強調表示されたファイルは、IBM PureSystems へのエントリー・ポイントです。つまり、ソフトウェアをインストールして構成する Python コードが格納されています。アクティベーション・エンジンがデプロイ中にこれらのコードを呼び出せるように、ファイルの名前と場所は常に同じです。

コードは通常、以下の順で呼び出されます。

  1. install.py
  2. configure.py
  3. start.py

上記以外のスクリプトは、主要なスクリプトから呼び出されるサポート・スクリプトです。プラグインと一緒にパッケージ化できるバイナリーは、files ディレクトリー内で Linux ディレクトリーと AIX ディレクトリーとに分けて配置されます。同様に、スクリプトも別々の Linux ディレクトリーと AIX ディレクトリーに配置されます。

一部の実装では、スクリプトが単一のソースになっています。これは、スクリプトが Linux プラットフォームと AIX プラットフォームの両方で実行されるように作成されていることを意味します。私たちのプラグインの場合、Linux プラットフォームと AIX プラットフォームとでは実装が大きく異なるため、別々に保守を行ったほうが管理しやすいと判断しました。

図 8 では、コンポーネントとリンクのコードが同じプラグイン内にまとめられていることに注目してください。

より使いやすくするために、事前に定義されたアプリケーション・パターンとテンプレートを使用したサンプル・プラグインを独立した Eclipse プロジェクトとして追加しました。サンプル・プラグインに組み込まれたパターンによって、エンド・ユーザーは実際的なパターンを簡単に完成させることができます。さらに、テンプレートを使用することで迅速なデプロイメントが可能になります。

図 9 に、テンプレートを使用した単純なユーザー入力によるデプロイメント画面を示します。


図 9. テンプレートを使用した SugarCRM アプリケーションのデプロイメント

メタデータを収集するためには、IBM PureSystems アプリケーションのエクスポート機能を使用しました。解凍したファイルは、/plug-in/applications フォルダーに配置します (図 10 を参照)。


図 10. サンプルのプラグイン構造

既存のプラグインを再利用する

同じアプリケーション・パターンで新しい DB2 サーバーを SugarCRM ノードと併せてデプロイする場合には、IBM PureSystems DB2 プラグインの機能を最大限に利用するのが理想です。そのために、私たちは IBM PureSystems 開発チームと協力して、以下の 2 つの新しい機能を特定して統合しました。

  • 新しいカスタム・パターン・タイプで既存のプラグインを再利用する機能
  • プラグインの機能とデータベース構成を拡張する機能

新しいカスタム・パターン・タイプでの既存のプラグインの再利用
私たちには、アプリケーションをモデル化する際に新しい DB2 コンポーネントを組み込み、アプリケーションのデプロイ中に、SugarCRM と連動する新規 DB2 サーバーを構成できるようにしたいと考えています。現在の製品機能では、それは不可能です。定義された DB2 プラグインが IBM PureSystems にロードされ、dbaaswebapp などの既知のパターン・タイプで機能するようになっているためです。

そこで私たちがリクエストしたのは、カスタム・プラグインがそのプラグイン定義に既存のパターン・タイプを (したがって、既存のプラグインも) 含めることを指示できるようにするための新しい機能です。“links” 節をプラグインの config.json で宣言するために、IBM PureSystems リンク機能が開発されました。これにより、フレームワークはリンクしているプラグインを、それが 2 次パターン・タイプ宣言で関連付けられているかのように使用することになります。

この機能は、すべてのパターン・タイプのプラグインを都合良く再利用できるようにする、汎用的で便利な製品機能になります。

DB2 プラグインの機能およびデータベース構成の拡張
SugarCRM には、以下の 2 つのインストール要件があります。

  • データベース・サーバーの全文検索機能。DB2 にはアドオン機能という形での全文検索機能があります。この機能は、DB2 プラグインを使用した IBM PureSystems 仮想アプリケーション・パターンのデプロイメントでのデフォルトでは有効になりません。
  • バッファー・プールおよびテーブル・スペースでカスタマイズ可能なデータベース構成

仮想アプリケーション・パターンでプロビジョニングされたデータベースがすべての要件を満たすようにするため、私たちは DB2 プラグイン開発チームと協力して、適切な拡張ポイントを明確に特定しました。新しい製品機能として作成されて提供されたカスタム・データベース・ワークロード標準では、エンド・ユーザーが、各拡張ポイントで実行されるカスタム・スクリプトを含めたスクリプト・パッケージ・ファイルを組み込んで、新しいデータベース・ワークロード標準を作成できるようになっています。カスタム・データベース・ワークロード標準は、仮想アプリケーション・パターンの DB2 構成に使用することができます。

この拡張のために、以下のスクリプトをカスタマイズしてパッケージ化しました。

  • tune_inst.sh: DB2 インスタンスの初期インストールおよび起動が完了した後、そのインスタンスをカスタマイズします。
  • tune_db.sh: データベースが作成された後、その構成をカスタマイズします。
  • post_start_inst.sh: DB2 が (再) 起動されるたびに、全文検索を開始します。

以上の新しく開発された 2 つの機能により、私たちは DB2 プラグインを SugarCRM の有効化に再利用するという目標を無事達成しました。


まとめ

この記事では、私たちのチームが既存の SugarCRM ソリューションを IBM PureSystems にデプロイできるようにするためのプラグインを作成する際に、開発プロセスを導くためのテンプレートとして使用した設計時の考慮事項を具体的に説明しました。また、その開発プロセスについても、以下のように順を追って紹介しました。

  • SugarCRM を有効にするための 3 つのプラグインの開発
  • プラグインのパッケージ化
  • 出発点としての (そして特に、プラグインのデバッグを目的とした) Plug-in Development Kit のサンプルの使用
  • プラグインのパターン・タイプおよびアプリケーション・モデルの定義 (プラグインを素早くデプロイできるようにするため)
  • 変換プログラムの実装 (変換プログラムは、アプリケーション・モデルの構成部分を IBM PureSystems でのデプロイメントに使用可能なトポロジー文書のフラグメントに変換する「エンジン」です。)
  • 実装タスクとデプロイメント・タスクを自動化するスクリプトの作成
  • SugarCRM ソリューションの要件を満たすための新しい 2 つのプラグイン機能の作成 (1 つはパターン・タイプを再利用するための機能、もう 1 つはデータベースを構成するための機能です。)

けれども、これで話が終わったわけではありません。第 2 回では、SugarCRM のプラグイン開発から学んだ教訓について詳しく説明します。

謝辞

このプロジェクトに多大な支援を提供してくださった方々に感謝の意を表します。

  • IBM Cloud 研究所チームおよび HiPODS チームの Willy Chiu 氏、Larry Hsiung 氏、Thomas Truong 氏、Jeffrey Coveyduc 氏、Kai Young 氏、Nauman Fakhar 氏、Chris Kiernan 氏、Raymond Wong 氏
  • IBM Workload Deployer 開発チームの Steve Ims 氏、Lin Sun 氏、Ted Kirby 氏
  • IBM Database as a Service 開発チームの Ning Wang 氏、Qi Rong Wang 氏
  • IBM Innovation Center チームの Nasser Momtaheni 氏、Joseph Peterson 氏、Rodney Johnson 氏
  • SugarCRM の Stas Malyshev 氏

参考文献

学ぶために

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

議論するために

著者について

Chin Huang は、IT およびソフトウェア・アーキテクチャーを専門とするクラウド・ソリューション・アーキテクトです。IaaS プラットフォーム、SaaS インテグレーション、アナリティクス・クラウド、Web サービス、IWD プラグインを含む拡張ソリューションの開発で専門的経験を積んでいる彼は、認定クラウド・コンピューティング・ソリューション・アドバイザーであり、10 以上の技術雑誌で著作活動を行っています。彼は、カリフォルニア州シリコン・バレー在住です。

author photo

Ton Ngo は、カリフォルニア州サンノゼにある IBM Silicon Valley Lab に勤務するクラウド・ソリューション・アーキテクト兼シニア開発者です。最近では、シンガポールの南洋理工大学のハイパフォーマンス・コンピューティング・クラウド、そしてカナダ・ロイヤル銀行のテストおよび開発クラウドのアーキテクトを務めました。その前は、IBM T.J. Watson Research Center と Almaden Research Center での計 17 年間の研究者としての経歴を持ち、さまざまなテーマの研究論文を発表しています。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


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=Cloud computing, Information Management
ArticleID=814597
ArticleTitle=プラグインを使って新しいアプリケーションを IBM PureSystems にデプロイする: 第 1 回
publish-date=05172012