RDS (Rapid Deployment Service) は、製品が仮想化されているか否かにかかわらず、その製品をユーザーがクラウド・プラットフォームにデプロイできるようにするサービスです。このサービスには、プラットフォームに依存しない IBM のスクリプト言語、SPiN (Simple Product Installation) が使われています。RDS を使用すれば、カスタマイズ可能な要素の非常に多い複雑なアセットを迅速にデプロイすることができ、ほとんど専門家の手を煩わせません。また RDS の自動化機能により、インストールの際に発生しがちなヒューマン・エラーの数を減らすことができます。
この記事では、IBM SmartCloud Enterprise 上でイメージをカスタマイズする方法として、RDS を使用して IBM HTTP Server をオンザフライでインストールする方法を説明します。使用するポート番号はインスタンス作成時に指定され、イメージにハードコーディングされているわけではありません。他のイメージを作成する場合にも、同様の方法で RDS を使用してインストールを行うことができます。
IBM SmartCloud Enterprise 上のイメージをカスタマイズし、イメージによってスクリプトを起動する方法 (そして、この記事で使用できるようにインスタンスをセットアップする方法) については、「カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する」を読んでください。
「RDS ファイルを取得する」では、必要なファイルと、それらのファイルの入手方法について説明します。また、IBM SmartCloud Enterprise にアクセスし、この記事で説明する機能をテストする必要もあります。
IBM SmartCloud Enterprise 上にイメージを作成する場合、そのイメージはユーザーのアカウントに追加された新しいアセットとして Rational asset catalog に保存されます。このアセットはユーザーのプライベート・コミュニティーの中、つまりプライベート・カタログの中にあります。プライベート・カタログの中にあるアセットは、自社コミュニティーのアセットとして自社のカタログから入手できるようにすることが可能です。
このアセットは Rational asset catalog の中にあり、Rational アセット・カタログは Rational Asset Manager をベースにしているため、Rational Asset Manager で操作する場合と同じように、このアセットにファイルをアップロードしたり、あるいはこのアセットの既存ファイルを上書きしたりすることができます。
標準的な IBM SmartCloud Enterprise イメージのアセットには、重要なファイルが 2 つあります。
- parameters.xml: このファイルには、インスタンスを要求する際にリクエスト・ウィンドウに表示されるパラメーターの説明が含まれており、インスタンス作成時のパネルを構築するために使われます。parameters.xml ファイルは実際の値と共にサーバーの /etc/cloud ディレクトリーにコピーされます。
- scripts.txt: このファイルはデフォルトではアセットに含まれていませんが、アセットの activation-scripts ディレクトリーの下に追加することで、activation-scripts ディレクトリー配下の各ファイルをインスタンスのどこにアップロードするかをこのファイルに記述することができます。scripts.txt を使用することで、インスタンス・ブート時の早い段階でインスタンス内の複数のファイルやスクリプトをアップロードすることができるため、非常に便利です。
この意味で非常に便利なもう 1 つのファイルが、cloud-startupx.sh ファイルです (ファイル名に含まれる x は、インスタンスのラン・レベルに応じて 3 または 5 に置き換えられます。
- cloud-startup3.sh
- cloud-startup5.sh
どちらのラン・レベルを選択した場合でも、このファイルにはインスタンスのブート時に起動されるコマンドが含まれています。従って、RDS を起動するためにこのファイルがフックされるようにすることも可能です。
parameters.xml ファイル、scripts.txt ファイル、cloud-startupx.sh ファイルが用意できると、ブート時のインストール/セットアップ・プロセスとして、RDS を使用してインストールを行うプロセスを構築する上で必要なすべてのファイルが揃ったことになります。
cloud-startupx.sh を用意できたら、このファイルに parameters.xml.done ファイルを検索するセクションを追加します (RDS による最初のインストールが完了した後で、parameters.xml.done ファイルを追加する必要があります)。parameters.xml.done ファイルにより、ブートのたびに RDS によるインストール・プロセスが実行されるのを防ぐことができます。
この記事で紹介する RDS の例では、あるプラットフォームに IBM HTTP Server をインストールし、このサーバーがリッスンするポート番号をカスタマイズします。この場合はプラットフォームとして SuSE Linux 11 SP1 を使用します。
「カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する」を読むと、イメージのセットアップに多様な方法があることを理解できるはずです。それらの方法の違いは主に、どのタスクをバリアント・タスクとみなし、どのタスクをインバリアント・タスクとみなすかによるものです。
可能な限り多くのファイルを最初のインスタンスにプリロードし、そのインスタンスのイメージをベース・イメージとして、その後のインスタンス作成リクエストに使用することができます。そうすることでインスタンス作成時にアップロードするデータの量を減らせますが、欠点として柔軟性がなくなります。プリロードされたファイルを 1 つでも変更しようとするたびに、新しいベース・イメージを作成する必要があり、開発が悪夢のような作業になります。
適切なバランスはその中間にありますが、この記事では概念を検証するだけなので、ファイルを 1 つ含むインスタンス・ファイルを Rational asset catalog にアップロードしました。皆さんがイメージをセットアップする場合には、イメージに含めたい複数のファイルを自由にイメージにプリロードして構いません。ただし一般的なルールとして、スクリプトをプリロードしてはなりません。そんなことをすると、イメージを作成するための作業が大幅に増えてしまいます。
では、作業を始めましょう。
- SuSE イメージはラン・レベル 3 で起動し、
yastを使用して Java 1.6.0 をインストールする必要があるため (yast はネットワークを使用してインストール・パッケージをアップロードします)、ブート時にベース・イメージを作成することはできません。単純な SuSE プラットフォームからインスタンスを作成し、sshを使用してそのインスタンスに接続します。 - 接続できたら、
sudo bashコマンドを実行してルートにアクセスし、以下のコマンドを実行して Java をインストールします。yast2 -install java-1_6_0-ibm
RDS を実行するためには Java が必要であり、Java は唯一の前提条件です。 - このインスタンスからイメージを作成します。ベース・イメージは「My dashboard (マイ・ダッシュボード)」の下にある Rational Asset Manager
に保存されます。
図 1. インスタンスからイメージを作成する
IBM Cloud ポータルから Rational Asset Manager にアクセスするために、「Control panel (コントロール・パネル)」タブで「View asset catalog (アセット・カタログを表示)」をクリックします。
図 2. Rational Asset Manager にアクセスする
イメージを作成したら、Rational asset catalog からアセットを選択し、それをローカル・ディスクにダウンロードします。
図 3. アセットをダウンロードする
サーバーがリッスンするポート番号を parameters.xml ファイルで定義します。parameters.xml ファイルを変更して field タグを追加します。ポート・フィールドを追加した後の parameters.xml ファイルは以下のようになります。
リスト 1. parameters.xml ファイル
<?xml version="1.0" encoding="UTF-8"?> <parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation= "platform:/resource/com.ibm.ccl.devcloud.client/schema/parameters.xsd"> <firewall> <rule> <source>0.0.0.0/0</source> <minport>1</minport> <maxport>65535</maxport> </rule> </firewall> <field name="webserver-ihs-http-port" label="IHS HTTP Port" type="number"> <values> <value>80</value> </values> </field> </parameters> |
このファイルの field タグで、名前として webserver-ihs-http-port が使われていることに注意してください。RDS プロパティー・ファイルでは、この変数名を使用してポートの値を定義します。同じ名前を使用することで、RDS プロパティー・ファイルを自動的にカスタマイズするのが容易になります。
- インスタンスのラン・レベルに応じて、cloud-startup3.sh ファイルまたは cloud-startup5.sh
ファイルを作成します。ラン・レベルを調べるためには、そのインスタンスのコマンド・プロンプトで
runlevelコマンドを発行します。ラン・レベルがわかったら、そのラン・レベルに対応する cloud-startupx.sh をローカル・ディスクにコピーします。これらのファイルは /etc/init.d ディレクトリーにあります。 - このファイルを変更して以下のようにします。
リスト 2. 変更された cloud-startupx.sh ファイル# Required-Stop: # Should-Stop: # Default-Start: 3 # Default-Stop: # Short-Description: Cloud startup # Description: Extract and set user password ### END INIT INFO case "$1" in start) echo "== Cloud Starting" if [ ! -e /etc/cloud/idcuser_pw_randomized ]; then echo "Randomizing idcuser password" echo idcuser:`< /dev/urandom tr -dc _A-Z-a-z-0-9 |head -c16` | /usr/sbin/chpasswd touch /etc/cloud/idcuser_pw_randomized fi if [ ! -e /etc/cloud/parameters.xml.done ]; then . /etc/cloud/launchRDS.sh /etc/cloud build-IHS.sh cp /etc/cloud/parameters.xml /etc/cloud/parameters.xml.done fi ;; stop) echo "== Cloud Stopping" ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac #Attach Dynamic disk modprobe acpiphp
追加されたコードは以下のとおりです。
if [ ! -e /etc/cloud/parameters.xml.done ]; then . /etc/cloud/launchRDS.sh /etc/cloud build-IHS.sh cp /etc/cloud/parameters.xml /etc/cloud/parameters.xml.done fi
この追加されたコードにより、parameters.xml.done ファイルが存在していないかどうかをチェックします。このファイルが既に存在している場合には、RDS によるインストールは既に済んでおり、再度行う必要はないからです。parameters.xml.done ファイルが存在していない場合には、launchRDS.sh ファイルを使用して RDS によるインストールを行い、続いて parameters.xml.done ファイルを作成します。
- SPiN を起動する前に、いくつか他のコマンドを起動する必要がありますが、ここではそれらのコマンドと SPiN の呼び出しを同じスクリプトに記述することにします (launchRDS.txt)。
リスト 3. SPiN の呼び出しと、他に必要なコマンド#Prepare SpiN package tar --directory=$1 -xvf $1/ihs.tar cp $1/7.0.0.7-WS-UPDI-LinuxIA32.tar $1/spinPackage2/software/was/v7/maint cp $1/7.0.0-WS-IHS-LinuxX32-FP0000007.pak $1/spinPackage2/software/was/v7/maint cp $1/7.0.0-WS-PLG-LinuxX32-FP0000007.pak $1/spinPackage2/software/was/v7/maint cp $1/7.0.0-WS-WASSDK-LinuxX32-FP0000007.pak $1/spinPackage2/software/was/v7/maint cp $1/C1G32ML.tar $1/spinPackage2/software/was/v7/nd cp $1/C1G33ML.tar $1/spinPackage2/software/was/v7/nd #Create wasadm group groupadd wasadm #Add directory mkdir -p $1/spinPackage2/software/WebSphere/Plugins touch $1/spinPackage2/software/WebSphere/Plugins/empty.txt #Adapt the Spin property file. echo "Adapt props" perl $1/replaceProperty.pl $1/spinPackage2/custom-spin/RDSDemo-WebSphere-V7-ND-ihsOnly.props webserver-ihs-http-port #Start installation echo "Start install" cd $1/spinPackage2 ./$2 #Setup firewall cp /etc/sysconfig/SuSEfirewall2 /etc/sysconfig/SuSEfirewall2.bak /sbin/SuSEfirewall2 stop perl $1/replace.pl $1/SuSEfirewall2 webserver-ihs-http-port cp $1/SuSEfirewall2 /etc/sysconfig/SuSEfirewall2 /sbin/SuSEfirewall2 start
- 最初のフェーズでは、SPiN スクリプトを含む ihs.tar を解凍し、次にすべてのインストール・パッケージを SPiN 専用のディレクトリーにコピーします。
- Perl スクリプトを呼び出します。このスクリプトの役割は、parameters.xml ファイルの中に指定された値を使って
webserver-ihs-http-port変数を設定することです。
リスト 4. replaceProperty.txt#!/user/bin/perl use strict; use warnings; my $cmd=""; if(-e $ARGV[0]) { $cmd = "cp $ARGV[0] $ARGV[0].bak"; `$cmd`; } else { print "File does not exist.\n"; exit; } my @result =`perl /usr/bin/extract-parameters.pl $ARGV[1] /etc/cloud/parameters.xml`; chomp(@result); open(INPUT,"$ARGV[0].bak") or die "Cannot open file: $!\n"; open(OUTPUT,">$ARGV[0]"); while(<INPUT>){ $_ =~ s/^$ARGV[1]=.*/$ARGV[1]=@result/g; print $_; print OUTPUT $_; } close INPUT; close OUTPUT;
- これを終えたら、SPiN によるインストールを呼び出し、いよいよファイアウォールのポートを開きます。
ここで説明したのは、基本的なインストールです。すべてのスクリプトは ihs.tar ファイルに用意されていますが、SPiN スクリプトと IBM HTTP Server アセンブリーは別です。(これらのファイルの入手については、「RDS ファイルを取得する」を参照してください。)
Rational asset catalog にスクリプトをアップロードする
アセットにファイルをアップロードする方法については、「カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する」の説明に従ってください。
変更された parameters.xml がアップロードされ、アセットの内容のルート・ディレクトリーに表示されます (下図参照)。
図 4. parameters.xml をアップロードする
activation_scripts ディレクトリーの中にあるほかのファイル (RDS アセット、スクリプト、アセンブリー・ファイル、fix pack) も表示されています。
図 5. 他のファイルをアップロードする
以下の手順でインスタンスを作成します。
- プライベート・カタログからイメージを選択します。
図 6. イメージを選択する
- 名前とキーを指定します。
図 7. 名前とキーを指定する
- ポート番号を入力します。
図 8. ポート番号を入力する
- 「Agree (同意)」と「Submit (送信)」をクリックします。
リクエストの送信には少し時間がかかります。これはプロビジョニング・エンジンが RAM からアセットをアップロードする必要があり、アセットにすべてのアセンブリー・ファイルが含まれているためです。テストするためには、指定された IP アドレスで指定のポートを使って HTTP Server にアクセスします。
以上で必要な作業はすべてです。
RDS については、こちらを参照してください。
RDS の製品ライブラリーには、製品をインストールしたアセットが既にいくつか含まれています。これらのアセットをカスタマイズすることによって顧客の要求を満たすことができます。
必要な IBM HTTP Server eAssembly ファイルと RDS パッケージ・アセットはライセンスを受けている場合にのみ提供されます。eAssembly ファイルは Extreme-leverage and RDS からダウンロードすることができます。
この記事では概念の検証として、RDS を使用して製品をインストールし、イメージ作成プロセスを迅速に行う方法を説明しました。この方法を適用してみたいビジネス事例がある場合には、RDS チームにご連絡ください。RDS チームは自動化されたプロビジョニング環境で RDS を実現する方法を示してくれるはずです。
学ぶために
- IBM SmartCloud Enterprise でタスクを実行する方法の資料として、他にも以下の記事があります。
- 「Windows インスタンスとの間でのファイルのアップロードとダウンロード」
- 「Windows Server 2008 R2 に IIS Web サーバーをインストールする」
- 「Linux のコマンド・ラインを使用して IBM Cloud にインスタンスを作成する」
- 「Create an IBM Cloud instance with the Windows command line」
- 「Extend your corporate network with the IBM Cloud」
- 「IBM Cloud での高可用性アプリケーション」
- 「カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する」
- 「Windows-targeted approaches to IBM Cloud provisioning」
- developerWorks
でクラウド開発者のためのリソースを調べてください。クラウドにデプロイするためにプロジェクトを構築しているアプリケーション開発者やサービス開発者の知識や経験を発見し、共有することができます。
- 次のステップとして、「IBM SmartCloud
Enterprise」にアクセスする方法を学んでください。
製品や技術を入手するために
- 「IBM SmartCloud
Enterprise」で利用可能な製品イメージを調べてください。
議論するために
- developerWorks
のクラウド・コンピューティング・グループに参加してください。
- developerWorks
でクラウドに関する優れたブログを読んでください。
- developerWorks
コミュニティーに加わってください。developerWorks コミュニティーは専門家のネットワークであり、接続、共有、および協力のための一連のコミュニティー・ツールを豊富に提供しています。
ここ数年、Dominique Vernier は Java 技術とクラウド・アーキテクチャーを中心とした業務を行っています。また彼は非常に長く情報技術に従事しており、メッセージング、データベース、SOA、EAI、クライアント/サーバー、C/C++、既存フレームワークなどに関して幅広い知識を得ています。また彼は、通信、CRM、ロジスティクス、保険などの業界にも幅広い知識を持っています。彼はステート・エンジンとリソース管理に関する 4 件の特許と共同特許を持っています。現在は South-West Europe Cloud Center of Excellence で、プライベートおよびパブリック・ソリューションのための Smart Business Development and Test Cloud に従事しています。