IBM SmartCloud Enterprise でのソリューションの作成: ベスト・プラクティスとツール

クラウド・エンタープライズ IT の管理を効率化する

ソフトウェア・バンドルとは、ソフトウェアのインストール・ファイル、構成ファイル、およびメタデータをまとめて仮想マシン・インスタンスにデプロイできるようにしたファイル一式です。このシリーズの最初の記事では、IBM SmartCloud Enterprise におけるソフトウェア・バンドルおよびイメージの管理と、それらのリソース・モデルについて説明し、このリソース・モデルを管理するプラットフォームと他のソフトウェア・パッケージ管理プラットフォームとの比較を行います。さらに、このリソースの使用例と、使用可能なツールについても説明します。以上の内容については、エネルギー節約のためのエネルギー計算アプリケーションを例に説明します。

このシリーズでは、エンタープライズ IT 管理での実際的な問題を解決するために、IBM SmartCloud Enterprise 上でソフトウェア・バンドルおよびイメージを使用および管理する方法と他のツールを使用する方法を説明します。

Alex Amies (aamies@cn.ibm.com), Senior Software Engineer, IBM

Alex Amies photoAlex Amies は、中国の IBM GTS Development Lab に勤務するシニア・ソフトウェア・エンジニアです。彼は現在、アーキテクトとして IBM Smart Business Development and Test on the IBM Cloud の設計に携わっています。以前は、IBM 内の他のグループでクラウドおよびエキュリティー製品のアーキテクト、開発者として活躍していました。



Alexei Karve (karve@us.ibm.com), Research Scientist, I.B.M.

Alexei は、SmartCloud Enterprise 設計チームの一員として、クラウド・ビジネス・サポート・システムのソフトウェア・バンドル、ICON、PN/VLAN に取り組んでいます。彼は米国を拠点としています。



Andrzej Kochut, Ph.D., Research Staff Member, IBM

Andrew は、ビジネス・サポート・システムに取り組んでいる SmartCloud Enterprise 設計チームのメンバーです。彼は米国を拠点としています。



Hidayatullah Shaikh, Senior Technical Staff Member, I.B.M.

Shaikh は、IBM Master Inventor の肩書きを持つ、Business Support Systems for IBM SmartCloud Enterprise and Enterprise+ オファリングの技術主任で、米国を拠点としています。



Qiangguo Tong, Advisory Software Engineer, IBM

Qiang Guo Tong は 2004年に IBM に入社しました。現在、IBM SmartCloud Enterprise development チーム・リーダーの一人として新機能の作成を担当しています。彼は、SmartCloud のグローバリゼーション・イネーブルメント・ソリューションのアーキテクトでもあり、グローバリゼーション技術と JavaEE 技術を専門としています。JavaEE アーキテクチャーをベースに、Dojo、JSON-RPC などの Web 2.0 技術を重視した Web アプリケーション開発で 8 年間の経験を積んでいます。



Randy Rendahl, Senior Engineer, IBM

Randy は、Master Inventor の肩書きを持つ、SmartCloud Enterprise 設計チームのメンバーです。現在は、課金とレーティング、ビジネス・プロセス・イネーブルメント、および BSS データ・モデル設計専門にビジネス・サポート・サービスに取り組んでいます。1999年に IBM に入社して以来、システム管理分野で積み上げてきたさまざまな経験を基に、ノースカロライナ州リサーチ・トライアングル・パークを拠点にクラウド BSS 技術の幅広い知識を生かしています。



Scott Peddle, Advisory Software Developer, IBM

Photo of Scott PeddleScott Peddle は、IBM SmartCloud Enterprise の顧問ソフトウェア開発者であり、クラウド環境での Rational Asset Manager の統合を焦点としたプロジェクトを率いています。彼は、WebSphere Business Modeler や WebSphere Integration Developer などの WebSphere BPM ツールを Rational Asset Manager によって統合するプロジェクトのリーダーも経験しました。また、Rational Software Architect および Rational Application Developer などの Rational の設計および構成製品のリリース・エンジニアでもあります。



2012年 4月 19日

クラウド・コンピューティングの目標の 1 つは、クラウドの利用者が豊富な選択肢のなかから実際に使用できるリソースを選べるようにすることです。その一方で、イメージおよびソフトウェアの開発者たちがサポート作業をこなせるレベルに維持するという目標もあります。この 2 つの目標は相反するように思えるかもしれませんが、このシリーズ (シリーズの概要を参照) では、ソフトウェア・バンドルおよびイメージといったリソースを効果的に使用および管理することで、両方の目標を達成する方法を、実例を用いて説明します。

この記事の内容は以下のとおりです。

  • IBM SmartCloud Enterprise におけるソフトウェア・バンドルおよびイメージの管理について概説します。
  • 上記のソフトウェア・バンドルおよびイメージのリソース・モデルを説明します。
  • このリソース・モデルを管理するプラットフォームと他のソフトウェア・パッケージ管理プラットフォームを比較します。
  • このリソースの使用例を説明します。
  • 使用可能なツールについて説明します。

上記内容については、エネルギー節約のためのエネルギー計算アプリケーションを例に説明します。この記事を読んで、RPM パッケージを作成するためにわずかな量の Python コードと命令しか含まれていない単純なソリューションを実装する方法と、このソリューションをソフトウェア・パッケージとしてクラウド上の仮想マシンにデプロイする方法を学んでください。シリーズの今後の記事では、今回と同じサンプル・アプリケーションを使用して、個々のツール、API、使用例についてさらに詳しく探る予定です。

この記事で対象とする読者は、継続可能な方法で効率的にクラウド・リソースを管理する方法を知りたいと思っている、クラウドの利用者およびクラウドの利用を計画している方々です。この記事を理解するのにプログラミングの知識は必要ありません。いくつかの非常に短いサンプル・スクリプトを記載しますが、必要なすべての基本知識は記事の中で説明します。サンプル・スクリプトでは Linux を使用しますが、このスクリプトは Windows で作業する場合にも簡単に適応させることができます。

このシリーズでは、エンタープライズ IT 管理での実際的な問題を解決するために、IBM SmartCloud Enterprise 上でソフトウェア・バンドルおよびイメージを使用および管理する方法と他のツールを使用する方法を説明します。クラウド上で利用可能なさまざまな機能やツールについて、エネルギー節約のためのエネルギー計算アプリケーションを例に説明します。

今後の記事では以下のトピックを取り上げます。

  • IBM SmartCloud Enterprise でのソフトウェア・バンドルとイメージの管理についての概要
  • IBM SmartCloud Enterprise へのイメージのインポート
  • IBM SmartCloud Enterprise での ICCT を使用したソフトウェア・バンドルの管理
  • IBM SmartCloud Enterprise の API を使用したソフトウェア・バンドルの管理
  • IBM SmartCloud Enterprise での CohesiveFT を使用したソフトウェア・バンドルの管理
  • IBM SmartCloud Enterprise 上で IBM Workload Deployer を使用して実現するエンタープライズ・サービス
  • ソフトウェア・バンドルおよびイメージを使用および管理するさまざまな例
  • IBM SmartCloud Enterprise のイメージのコピー
  • IBM SmartCloud Enterprise でのエンタープライズ・サービスの作成

IBM SmartCloud Enterprise のコンテキスト

IBM SmartCloud Enterprise のコンテキストにおけるソフトウェア・バンドルとは、仮想マシン・インスタンスにデプロイできる、ソフトウェアのインストール・ファイル、構成ファイル、およびメタデータを集めたものです。

IBM SmartCloud Enterprise でソフトウェア・バンドルを作成し、管理するには、IBM Image Construction and Composition Tool (ICCT)、IBM SmartCloud Enterprise の REST API、そしてサード・パーティーのツールを使用することができます。

一般に、仮想マシン・イメージに含まれるソフトウェアは、イメージ開発者がすでにインストールして構成済みとなっています。このような「フリーズ・ドライ」方式での問題は、必要なソフトウェアの組み合わせを持つイメージを見つけられない場合があることです。その場合、既製の仮想マシン・イメージを選んで、それをベースに独自のソフトウェアをインストールするという、「ドゥ・イット・ユアセルフ」方式を採ることになります。これが、仮想マシン・イメージの増殖を招く原因であり、このような現象を IT の世界では「仮想マシン・イメージのスプロール」と呼んでいます。

もう 1 つの問題は、特定の使用ケースを対象に設計された仮想マシン・イメージは、イメージ開発者が意図していたその特定の使用ケース以外のシナリオには、ほとんど使いものにならないことです。IBM SmartCloud Enterprise は、フリーズ・ドライ方式とドゥ・イット・ユアセルフ方式の溝を埋めるために、仮想マシン・パラメーター、アクティベーション・スクリプト、ソフトウェア・バンドルを使用して、IBM SmartCloud Enterprise 上にテンプレート・イメージを作成します。

ソフトウェアを仮想マシンに追加するための、より移植性に優れたソリューションには、IBM Image Construction and Composition Tool (ICCT) というスタンドアロンのツールもあります。ICCT は現在、IBM Workload Deployer 3.1、IBM SmartCloud Provisioning 1.2、IBM SmartCloud Enterprise に組み込まれています。ICCT はイメージを Open Virtual Format Archive (OVA) パッケージとして保管します。OVA パッケージは、IBM Workload Deployer 3.1、IBM SmartCloud Enterprise、および VMware 製品を使用してデプロイすることが可能です。

仮想マシン・イメージには、以下のものを含めることができます。

  • オペレーティング・システム
  • ミドルウェア
  • アプリケーション
  • ユーザー固有の構成

イメージに多くのものを追加すればするほど、そのイメージは再利用しにくくなります。個々のイメージが再利用しにくければ、その分イメージの数も増えてくるでしょう。ちなみに、イメージに含めるものを少なくすればするほど、クラウドの利用者にとってイメージの有用性は低くなります (これもまた重要な内容です)。

イメージに何を含めるかを決めることと、イメージをテンプレートにする方法を決めることは、イメージ開発という技術における 2 つの基本作業です。


IBM SmartCloud Enterprise のリソース・モデル

図 1 に、簡単な論理リソース・モデルを示します。

図 1. イメージおよびソフトウェア・バンドルのリソース・モデル
イメージおよびソフトウェア・バンドルのリソース・モデル

表 1 に、リソースについての説明と、属性および関係を記載します。

表 1. リソースの説明と、属性および関係
リソース説明属性および関係
Image (イメージ)保管可能なバイナリー・ファイル。仮想マシン・インスタンスと、その仮想マシン・インスタンスについて記述するメタデータにインスタンス化することができます。イメージは Location に保管されます。state は、そのイメージが使用できる状態にあるか、何らかの遷移状態にあるかを示します。イメージをインスタンス化することで、インスタンスを作成することができます。
Location (場所)物理マシンが置かれているデータ・センターまたは特定の場所。イメージ、インスタンス、および VLAN は同じ場所になければなりません。
Instance (インスタンス)仮想マシン。プロビジョニング・プロセスでは、イメージと InstanceType、そしてオプションでアドレスとボリュームを入力として取り、実行状態のインスタンスを作成します。state は、そのインスタンスが実行状態であるか、それ以外の状態にあるかを示します。
InstanceType (インスタンス・タイプ)仮想マシンに関連付けるリソースのテンプレート。仮想 CPU の数、メモリー、ディスク、およびアーキテクチャー (32 ビットまたは 64 ビット)。
SoftwareBundle (ソフトウェア・バンドル)インストール・スクリプトとアクティベーション・スクリプト。オプションで、バイナリー・ファイルとそれ以外のインストール可能なリソース。SoftwareBundle はイメージに追加することができます。イメージがインスタンス化されるときに、SoftwareBundle およびアクティベーション・スクリプトが仮想マシンのファイルシステムに注入されます。
Volume (ボリューム)データとイメージを保管するために使用できる仮想ブロック・ストレージ・デバイス。ボリュームは、インスタンスのプロビジョニング時、またはインスタンスが実行状態になってから、インスタンスに接続することができます。ボリュームがインスタンスに接続されない限り、そのボリュームに保管されたデータにはアクセスすることができません。
Address (アドレス)IP アドレスの表現。独立したリソースとして管理することもできます。アドレスはインスタンスに追加することもできます。アドレスは常に VLAN に関連付けられます。
VLAN仮想ローカル・エリア・ネットワークまたはサブネット。VLAN はパブリックまたはプライベートのいずれかにすることができます。接続は VLAN またはマルチホーム仮想マシンを介してのみ許可されます。
Key (鍵)SSH 鍵の表現。秘密鍵は、ユーザーが保持する必要があります。ユーザーは必要に応じて随時、クラウドが用意している公開鍵を使って新しい鍵を生成することができます。Linux 仮想マシンは、プロビジョニング中に鍵が組み込まれてから起動します。

ソフトウェア・パッケージ管理システム

ソフトウェア・パッケージの管理は、コンピューティング・システムを管理する上で不可欠な側面です。クラウド・システムを管理する上でもそれは変わりませんが、クラウドのコンテキストでは、動的にプロビジョニングされる仮想マシン・インスタンスを扱うため、クラウドでのパッケージ管理は通常とは異なります。仮想マシン・インスタンスが動的にプロビジョングされるということは、追加のソフトウェアをオンザフライでプロビジョニングできるということであり、システムが「そのままで機能する」というユーザーの期待も大きくなります。

クラウド・ソフトウェア・パッケージ管理システムは、オペレーティング・システムやソフトウェア開発プラットフォームにバンドルされているパッケージ管理システムと概念の点で似ており、これらのパッケージ管理システムを取り込むことができます。

このセクションでは、Linux のソフトウェア・パッケージ管理システムの概要を説明し、これをクラウド・システムに適用します。そして以降のセクションで、Python でソフトウェア・モジュールを作成し、そのモジュールを RPM としてバンドルし、プロビジョニングの際にクラウド・ベースの仮想マシンに注入する手順を説明します。

RPM および YUM によるパッケージ管理

Red Hat が 1990年代に開発したパッケージ管理システム、Red Hat Package Manager (RPM) は、現在 Linux Standard Base に組み込まれています。IBM AIX などの他のオペレーティング・システムにも移植されている RPM には、以下の特徴があります。

  • パッケージ間の整合性を維持するのに役立ちます。
  • インストール済みパッケージに関する情報を取得するために使用することができます。
  • 暗号署名を使用してパッケージの真正性を検証します。
  • インストール済みパッケージを更新します。
  • インターネットからパッケージを取得することができます。

RPM には、Yellow Dog Updater Modified (YUM) や、up2date、Zypper、Smart Package Manager など、いくつかのフロント・エンドがあります。RPM は主に Red Hat Enterprise Linux、CentOS、および Fedora で使用されています。Debian ベースのシステム (SUSE および Ubuntu を含む) では、Debian パッケージ管理が使用されます。

YUM は、Red Hat Linux システムを管理するための RPM のフロント・エンドとして、デューク大学で開発されました。RPM に自動更新および依存関係管理の追加機能を提供する YUM は、中央ソフトウェア・パッケージ・リポジトリーと連動します。RPM は依存関係を認識するものの、解決することはしません。YUM は、この問題に関して RPM を大いに支援します。

rpm コマンドでパッケージをインストールするには、以下のように -i オプションを使用します。

# rpm -i <package-name>

必要な依存関係があると、rpm コマンドは失敗します。パッケージをインストール、削除、更新するには、root 権限が必要です。

YUM でパッケージをインストールする場合には、install オプションを指定した yum コマンドを使用します。例えば、dos2unix をインストールするとしたら、以下のコマンドを実行します。

# yum install dos2unix

YUM の場合、必要な依存関係は YUM が自動的にインストールします。

Debian でのパッケージ管理

Advanced Packaging Tool (APT) は、SUSE および Ubuntu を含む Debian システムで使用されているパッケージ管理システムです。RPM と YUM の場合と同じく、パッケージ・データは中央データベースに保管されます。

パッケージをインストールするには、apt-get install コマンドを使用します。dos2unix パッケージをインストールする場合には、以下のコマンドを実行します。

# apt-get install dos2unix

apt-get はリモート・リポジトリーでパッケージ情報を検索し、その依存関係を判断して、パッケージをダウンロードし、インストールします。

Python モジュール

Python には、モジュールを配布およびインストールするための機能が組み込まれています。Python ソフトウェアをインストールして使用する場合、モジュールをダウンロードして解凍し、セットアップ・コマンドを実行することで、これらの機能を簡単に利用することができます。サンプル・ソフトウェアを配布および管理するプロセスを実際に示す上で Python は便利な言語です。このセクションで説明する内容さえ把握しておけば、他に Python の知識がなくてもこの記事の内容を十分に理解することができます。

プロセスを開始する前に、Python コードの再利用に関する基本用語を表 2 に記載します。

表 2. Python コードの再利用に関する用語
用語説明
モジュールPython で再利用可能なコードの単位
pure Python モジュールPython で作成され、module.py というファイルに格納されるモジュール
パッケージ__init__.py 初期化ファイルと 1 つ以上の pure Python モジュールが含まれるディレクトリー
拡張モジュールC/C++ または Java (Jython の場合) で作成されたモジュール
配布モジュール1 つのリソースとして配布されるモジュールの集合。これは、他の多くのプラットフォームでは一般的な意味のソフトウェア・パッケージに相当します。

Python モジュールをインストールするには、以下のコマンドを実行します。

# python setup.py install

通常は、このコマンドを root として実行します。すると、モジュールがディレクトリー {INSTALL_ROOT}/site-packages (例えば、/usr/lib/python2.6/site-packages) にインストールされます。あるいは、一般ユーザーとして以下のコマンドを実行し、ユーザーのホーム・ディレクトリー・ツリーにモジュールをインストールすることもできます。

$ python setup.py install --user

モジュール作成者が上記のコマンドを使用可能にするソフトウェアを配布できるように、Python では Distutils ツールキットを提供しています。


サンプル・コード: Python 配布モジュール

ここからは、Python モジュール (インストール・スクリプト) を作成し、そのモジュールをインストールしてテストする作業に取り掛かります。このパッケージは ecalc という名前のエネルギー計算プログラムで、EnergyCalculator クラスのモジュール energy_calculator だけが含まれています。この単純な例では、コードがサンプル・データを出力するだけですが、これと同じ概念は、高度に作成されたソフトウェア・パッケージ管理システムを必要とする複雑なシナリオにも簡単に適用することができます。

EnergyCalculator クラスのコードは以下のとおりです。

# energy_calculator.py
"""
energy_calculator module for computing energy usage
"""

class EnergyCalculator:
    """EnergyCalculator class"""

    def __init__(self):
        self._base = 200

    def energy_used(self):
        return self._base

このコードは、以下のようにしてエネルギー計算プログラムのクライアントから呼び出します。

#!/usr/bin/python
# energy_client.py

""" EnergyCalculator client """

from energy_calculator import EnergyCalculator

ec = EnergyCalculator()
print("You used {0} kJ today".format(ec.energy_used()))

以下に示すのは、コードが呼び出されたときの出力例です。

$ ./energy_client.py
You used 200 kJ today

まず、セットアップ・スクリプトを作成します。

# setup.py
# Setup script for libenery

from distutils.core import setup
setup(name='libenergy',
      version='0.1',
      py_modules=['energy_calculator'],
      )

次に、配布モジュールを作成します。

$ python setup.py sdist

上記の例でのセットアップ・スクリプト・コマンドによって、ソース配布パッケージが作成されます。このコマンドは、dist ディレクトリーを作成し、そこに圧縮ファイル libenergy-0.1.tar.gz を作成します。パッケージをインストールする際には、このファイルを使用することができます。この TAR ファイルには、クライアント・スクリプト energy_client.py は含まれていません。そのため、作成者、URL、README に関する情報が欠落しているという警告が出されます。セットアップ・スクリプト・コマンドは、TAR ファイルに含まれる MANIFEST ファイル内にマニフェストも作成します。libenergy-0.1.tar.gz ファイルをターゲット・マシンにコピーする際には、以下のようにセキュア・コピー (scp) コマンドを使用してください。

$ scp -i ${key} libenergy-0.1.tar.gz idcuser@${vm}:libenergy-0.1.tar.gz

上記のコマンドは、ユーザーが Linux 上で作業していることを前提としています。Windows 上で作業をする場合も同様のコードになりますが、scp コマンドがインストールされている必要があります。scp は OpenSSH に同梱されています。上記のコマンドは SSH 鍵 ${key} を使用して、ホスト名または IP アドレスが ${vm} の仮想マシンに idcuser としてファイルをコピーします。値を再入力しなくても済むように、これらの値にはシェル変数を定義してください。これで、dist ディレクトリーから以下のコマンドを実行することで、リモートからバンドルを解凍してインストールすることができます。

$ ssh -i ${key} idcuser@${vm} 'gunzip libenergy-0.1.tar.gz; 
 tar -xvf libenergy-0.1.tar; cd libenergy-0.1; sudo python setup.py install'

上記の SSH スクリプトは、sudo コマンドによって root に変更し、リモートからバンドルを解凍してインストールします。リモート・コマンドは単一引用符で囲まれ、その中で各コマンドはセミコロンで区切られます。

これで、energy_calculator モジュールがターゲット・マシンにインストールされたので、クライアント・プログラムを使って以下のスクリプトでモジュールを呼び出すことができます。

$ scp -i ${key} energy_client.py idcuser@${vm}:energy_client.py
$ ssh -i ${key} idcuser@${vm} './energy_client.py'
You used 200 kJ today

上記に示されているコマンドは、クライアント・スクリプトをコピーしてから実行します。これらのコマンドは、クライアント・スクリプトが格納されているディレクトリーから実行してください。

ここまでの時点で行った作業を以下にまとめます。

  • サンプル Python モジュールと、そのモジュールを実行するクライアント・スクリプトを作成しました。
  • モジュールのインストール・バンドルを作成しました。
  • SSH を使用して、仮想マシンへのモジュールのインストールをリモートから行いました。
  • クライアント・スクリプトを使用して、仮想マシン上のモジュールの呼び出しをリモートから行いました。

この例では、皆さん自身でソフトウェアを作成して、そのソフトウェアを使用しているということを考えれば、ここまでの成果はなかなかのものです。けれども、この単純な例では、以下の欠点が明らかになってきます。

  1. Python モジュールをインストールするには、利用者がその方法を知っていなければなりません。他の言語で作成されたソフトウェア・パッケージでも同じ方法でインストールできるようにするのが理想です。
  2. Python プログラマー以外の人たちにとって、Python モジュールを見つけたり、場合によっては更新したりする作業は手間がかかります。
  3. 必要とされるオペレーティング・システムの種類やエディション、および Python のバージョンなどの前提条件が記述されていません。
  4. イメージのスプロールという問題を回避するには、クラウド・コンソールからパッケージをインストールして仮想マシンに注入できるようにしなければなりません。少なくとも、この例で使用したような複雑に見える bash スクリプトを作成する以外の方法が必要です。

望ましくは、プロビジョニング時や自動更新の必要がある場合に、エネルギー計算プログラムのモジュールを仮想マシンに注入できることです。


RPM による Python モジュールのインストール

Python には、Red Hat Package Management (RPM)、Windows、およびその他のフォーマットに対応したインストール・バンドルを作成して、前述の 1、2、3 の欠点を解消するのに役立つツールもあります。アクティベーション・スクリプトと起動スクリプトを作成する際には、これらのフォーマットを使用するほうがより重宝します。

このセクションでは、エネルギー計算プログラムのモジュールがインストール済みであるかどうかをテストする、アクティベーション・スクリプトを作成する方法を説明します。モジュールがインストールされていなければ、rpm コマンドを使ってインストールすることができます。

RPM パッケージを作成するには、以下のコマンドを実行します。

$ python setup.py bdist_rpm

このコマンドによって、dist ディレクトリーに RPM パッケージ libenergy-0.1-1.noarch.rpm が作成されます。RPM パッケージをターゲット仮想マシンにコピーするには、scp コマンドを使用します。

$ scp -i ${key} libenergy-0.1-1.noarch.rpm idcuser@${vm}:/tmp/libenergy-0.1-1.noarch.rpm

以下のコマンドを実行して、エネルギー計算プログラムのモジュールをインストールします。

$ sudo rpm -i /tmp/libenergy-0.1-1.noarch.rpm

rpm コマンドは、モジュールがインストールされているかどうかを調べ、既にインストールされている場合には、インストールしません。

モジュールがインストールされていることを、前に記載したエネルギー計算プログラムのクライアント energy_client.py を実行して確認してください。以降のセクションでは、この RPM ファイルとコマンドを使って、クラウドで仮想マシンがプロビジョニングされるときに、その仮想マシンにエネルギー計算プログラム・モジュールを注入します。


IBM SmartCloud Enterprise の Web ポータルを使用したイメージの複製

ソフトウェア・バンドルを手動で作成するプロセスは、ICCT などのツールを使用する場合のように単純には行きませんが、ソフトウェア・バンドル・プロセスの詳細を明らかにすることは確かです。また、手動プロセスには、IBM SmartCloud Enterprise の API を使用した自動化を容易に適用することができます。これらの理由から、最初に手動によるプロセスについて説明します。

最初に行わなければない作業の 1 つは、イメージを作成し、その所有権を持つことです。作成したイメージの所有権がなければ、そのイメージをベースに仮想マシンをプロビジョニングするために、メタデータを編集したり、仮想マシンに注入するファイルを追加したりすることはできません。この作業を行うには、以下の 2 つの方法があります。

  1. 仮想マシン・インスタンスを起動して、必要に応じてカスタマイズします (カスタマイズには、ソフトウェアのインストールも含まれます)。
  2. 既存のイメージを複製します。

イメージの複製は、イメージ管理の自動化ツールと作成ツールに最も適用しやすい手法なので、ここではイメージを複製する方法について説明します。

以下の手順に従って、イメージを複製します。

  1. IBM SmartCloud Enterprise の Web ポータル・ページで、「Control Panel (コントロール・パネル)」 > 「Images (イメージ)」の順に選択し、「Add Image (イメージの追加)」ボタンをクリックします。すると、「Base images (基本イメージ)」ウィンドウが開きます。
    図 2. IBM SmartCloud Enterprise の Web ポータル・ページでのイメージの複製
    IBM SmartCloud Enterprise の Web ポータル・ページでのイメージの複製
  2. Next (次へ)」ボタンをクリックします。すると、ウィザードのステップ 2 が表示されます。
    図 3. イメージの複製ウィザードのステップ 2
    イメージの複製ウィザードのステップ 2
  3. 複製後のイメージの名前と説明を入力します。ウィザードのステップ 3 で、データを確認してから「Next (次へ)」ボタンをクリックします。
  4. ステップ 4 では、使用条件に同意した上で、「Submit (送信)」ボタンをクリックします。イメージの複製には数分かかります。複製が完了すると、「Control Panel (コントロール・パネル)」および「Asset Catalog (アセット・カタログ)」に複製されたイメージが表示されます。

アセット・カタログには、図 4 のようなイメージ・アセットの内容が表示されます。

図 4. アセット・リポジトリーに格納されている、複製されたイメージのファイル
アセット・リポジトリーに格納されている、複製されたイメージのファイル

これらのファイルのなかには、入力パラメーターを記述する parameters.xml や、イメージのトポロジーをモデル化するファイルがあります。現在行っている作業に最も関連のあるファイルは、activation_scripts フォルダーに格納されています (図 5 を参照)。

図 5. activation_scripts フォルダー内のファイル
activation_scripts フォルダー内のファイル

プロビジョニング時の VM へのインストール・スクリプトの注入

前のセクションで複製したイメージの内容は、アセット・カタログでは以下のように表示されます。

図 6. アセット・リポジトリーに格納されている、複製されたイメージのファイル
アセット・リポジトリーに格納されている、複製されたイメージのファイル

これらのファイルのなかには、入力パラメーターを記述する parameters.xml や、イメージのトポロジーをモデル化するファイルがあります。現在行っている作業に最も関連のあるファイルは、activation_scripts フォルダーに格納されています (図 7 を参照)。

図 7. activation_scripts フォルダー内のファイル
activation_scripts フォルダー内のファイル

プロビジョニング時にファイルを仮想マシンに注入する上でカギとなるのは、scripts.txt ファイルです。以下に、複製した RHEL 6 イメージに含まれている scripts.txt ファイルの内容を示します。

cloud-startup3.txt=/etc/init.d/cloud-startup3.sh
activate.txt=/etc/cloud/activate.sh

このコードによって、仮想マシンには cloud-startup3.txt ファイルが /etc/init.d/cloud-startup3.sh として注入され、activate.txt が /etc/cloud/activate.sh として注入されます。

独自のファイルを仮想マシンに注入する方法は以下のとおりです。

  1. activation_scripts フォルダー内のファイルをダウンロードして、同じ名前のフォルダー内に配置します。
  2. そのフォルダーに libenergy-0.1-1.noarch.rpm ファイルを追加します。
  3. スクリプト libenergy-activate.sh を作成します。
    /usr/bin/logger 'installing libenergy-0.1'
    rpm -i /tmp/libenergy-0.1-1.noarch.rpm  2> /tmp/energy.log
    /usr/bin/logger < /tmp/energy.log
  4. UNIX スタイルの改行コードを使用するか、dos2unix ユーティリティーを実行する必要があることに注意してください。このスクリプトは、仮想マシンにコピーして、起動時に実行する必要があります。そのためには、スクリプトを activation_scripts フォルダーに追加して、scripts.txt ファイルを以下のように編集します。
    cloud-startup3.txt=/etc/init.d/cloud-startup3.sh
    activate.txt=/etc/cloud/activate.sh
    libenergy-0.1-1.noarch.rpm=/tmp/libenergy-0.1-1.noarch.rpm
    libenergy-activate.sh=/home/idcuser/libenergy-activate.sh
  5. このスクリプトを、クラウド起動スクリプト cloud-startup3.sh から呼び出します。それには、 cloud-startup3.sh を編集して以下に太字で示されている行を追加してください。
        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
            /sbin/restorecon -R -v /home/idcuser/.ssh
    chmod +x /home/idcuser/libenergy-activate.sh
            /home/idcuser/libenergy-activate.sh
            ;;
  6. activation_scripts フォルダーを圧縮して、その圧縮ファイルに activation_scripts という名前を付けます。複製したイメージのイメージ・アセットを編集してから、ZIP ファイルをアップロードしてください。ZIP ファイルは、アップロード・プロセス中に解凍されます。

複製して変更したイメージをテストするには、複製したイメージをベースに仮想マシンをプロビジョニングします。以下のように、エネルギー計算プログラムのクライアント energy_client.py を実行して、モジュールがインストールされていることを確認します。

$ scp -i ${key} energy_client.py idcuser@${vm}:energy_client.py
$ ssh -i ${key} idcuser@${vm} './energy_client.py'
You used 200 kJ today

You used 200 kJ today」という出力が表示されない場合は、メッセージ・ログ・ファイル /var/log/messages でエラーをチェックしてください。

ここまでで、実行状態の仮想マシンをインストールすることなく、ソフトウェア・モジュールを仮想マシンに注入する方法を学んできました。仮想マシンを起動したのは、結果を確認するときだけです。クラウドでイメージ管理を自動化できるようにする上で、これは大きな飛躍であり、ユーザーが仮想マシン・イメージを管理するために利用できる数々のツールのベースとなります。

以降のセクションでは、これらのツールのうちのいくつかを使用する方法、そして API を使用してさらに効果的に自動化する方法を説明します。また、もう 1 つ注意する点として、今回はクラウド内に独立したソフトウェア・バンドル・リソースを作成する代わりに、RPM インストール・ファイルとインストール・スクリプトをアセット・リポジトリー内の仮想イメージ・メタデータと直接マージしました。クラウド・ベースのソフトウェア・バンドル・リソースについては、今後の記事で説明します。


構成可能なソフトウェア・バンドルの作成

構成可能なソフトウェア・バンドルを作成するには、IBM SmartCloud Enterprise のアセット・カタログに用意されているテンプレートのいずれかをダウンロードして変更します。アセット・カタログで、左側の列にある「Composable Software Bundles (構成可能なソフトウェア・バンドル)」という検索リンクを探し (図 8 を参照)、この検索によって返される結果を閲覧してください。

図 8. 構成可能なソフトウェア・バンドルの検索結果 (一部)
構成可能なソフトウェア・バンドルの検索結果 (一部)

テンプレートとして使用できるバンドルには、さまざまなものがあります。バンドルを複製して変更するには、「Asset Manager Clone (アセット・マネージャー複製)」ボタンを使用してください。この機能によって、独自の自動化ツールで使用できるリソースを作成し、そのリソースを仮想マシン・イメージの間で共有することができます。ただし、これらのリソースは、作成した本人にしか表示されません。他の人にも再利用可能なソフトウェア・バンドルを作成するには、ICCT などのツールを使用してリソースを登録する必要があります。


ICCT によるソフトウェア・バンドルの管理

IBM SmartCloud Enterprise イメージ・カタログに含まれている ICCT を使用すれば、ソフトウェア・バンドルをクラウド上で実行できるようになります。ICCT を使用するには、IBM SmartCloud Enterprise の「Control Panel (コントロール・パネル)」に進んで、以下の手順に従ってください。

  1. Instance (インスタンス)」を選択して「Add Instance (インスタンスの追加)」ボタンをクリックします。
  2. データ・センターを選択し、カタログから ICCT イメージを選択して、プロビジョニング・ウィザードを使って新しいインスタンスをプロビジョニングします。
  3. ICCT のユーザー名とパスワードを入力します。仮想マシン・インスタンスがプロビジョニングされた後は、「Getting Started (開始)」ページのリンクを使って ICCT にログインできるようになります。
  4. ICCT にログインしたら、「Build and Manage Software Bundles (ソフトウェア・バンドルのビルドと管理)」リンクをクリックします。
  5. 左のパネルには、「Enablement Bundle for SmartCloud Enterprise」という名前のバンドルがあるはずです。ICCT または IBM SmartCloud Enterprise のソフトウェア・バンドル API を使用する場合には、このバンドルを拡張して、独自のソフトウェア・バンドルを作成してください。

まとめ

この記事では、単純なサンプル・アプリケーションについて説明するなかで、IBM SmartCloud Enterprise が提供するイメージおよびソフトウェア・バンドルの機能について幅広く説明しました。今後の記事では、このサンプル・アプリケーションを基にして、さらに複雑なサンプル・アプリケーションを作成するための機能を持ったツールを使用し、今回手動で行った作業の多くを自動化していきます。

参考文献

学ぶために

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

議論するために

コメント

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, Linux
ArticleID=810111
ArticleTitle=IBM SmartCloud Enterprise でのソリューションの作成: ベスト・プラクティスとツール
publish-date=04192012