目次


カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する

IBM Cloud 上の Linux イメージをパラメーター化するための概念と手順を学ぶ

Comments

カスタムのクラウド・イメージを作成する方法は 2 通り (静的な方法と動的な方法) あります。静的な方法では、インスタンスを作成してカスタマイズし、そのカスタマイズされたインスタンスからイメージを作成します。静的な方法は非常に簡単です。

カスタムのクラウド・イメージを望みどおりに作成しようとする場合、そのイメージの特性のなかにはインスタンス作成時にしか存在しない情報に依存している特性があります。そのため、カスタマイズされた最終的なインスタンスを作成するには、その情報をインスタンス作成プロセスに動的に転送する必要があります。

この記事では、イメージをパラメーター化する方法について、そのプロセスを概念レベルで説明し、各サブタスクを実行する手順について説明します。いったんイメージがパラメーター化されると、それらのパラメーターを IBM® Cloud (IBM Smart Business Development and Test Cloud) のポータルまたは API を使ってインスタンス作成プロセスに送信することができます。

この方法ではカスタマイズされたインスタンスをオンザフライで作成できるため、IBM Cloud のこの振る舞いは非常に重要なものになります。

この記事では、VNC を使ってアクセスするように構成され、ユーザーが既に作成された新しいイメージを作成します。パラメーターは以下のとおりです。

  • VNC のパスワード
  • ユーザー名
  • ユーザーのパスワード

目標は、パラメーター化されたイメージに基づくインスタンスの作成を IBM Cloud ポータルを介して要求できるようにすることです。以下では、パラメーターを提供し、パラメーターに指定されたユーザー名とパスワードを使って VNC を介してサーバーにアクセスする方法について説明します。

まず、パラメーター化に関する概念を説明し、続いてパラメーター化の全体的なプロセスについて説明します。

パラメーター化に関する概念

一般的に、「パラメーター」というのは値や型のプレースホルダーであり、使用時に実際の値や型に置き換えられるものです。「パラメーター化」というのは、完全な仕様や関係する仕様に必要なパラメーターを決定し、定義するプロセスです。

「バリアント・タスク」はパラメーターを必要とするタスクであるため、バリアント・タスクの処理にはパラメーター化が最も有効です。この記事では、バリアント・タスクの例として VNC のパスワードを設定する例やユーザーを作成する例を紹介します。

「インバリアント・タスク」はパラメーターを必要としないタスク (例えば、オペレーティング・システムのインスタンスを要求するタスクなど) です。インバリアント・タスクは静的な方法で容易に実現することができます。

パラメーター化のプロセス

パラメーター化の全体的なプロセスは以下のとおりです。

  1. バリアント・タスクかインバリアント・タスクかを判断する
  2. インスタンスを作成し、インバリアント・タスクを実装する。このプロセスは以下のように分解することができます。
    1. インスタンスを要求する
    2. /etc/xinetd.d/vnc ファイルを編集する
    3. xstartup ファイルを追加する
    4. ファイアウォールをセットアップする
  3. インスタンスをイメージとしてプライベート・カタログに保存する。このプロセスは以下のように分解することができます。
    1. インスタンスを保存する
    2. 対応する Rational® Asset Manager (RAM) アセットをダウンロードする
  4. バリアント属性を作成する
  5. バリアント・タスクを実装する。このプロセスは以下のように分解することができます。
    1. VNC のパスワードを追加する
    2. ユーザーを作成し、パスワードを設定する
  6. 実装されたタスクを呼び出す
  7. 実装されたタスクをどこにアップロードするかを記述する
  8. スクリプトによって Rational Asset Manager を更新する
  9. 新しいカスタム・イメージに基づいてインスタンスを作成する

IBM Cloud にはイメージをパラメーター化する手段が用意されています。イメージは Rational® Asset Manager に保存されます。イメージを表現する Rational Asset Manager アセットにファイルを送信することで、インスタンス作成プロセスを操作することができます。

それらのファイルの 1 つが parameters.xml ファイルです。このファイルに XML タグを追加し、インスタンスを要求する際にキャプチャーしたいフィールドを記述します。以下に示すのは field タグの例です。

<field name="userID" label="User ID" type="string"/>

タグについての情報は、IBM Cloud ポータルに用意されたサポート・ドキュメントを参照してください。

parameters.xml ファイルは /etc/cloud ディレクトリーのインスタンスにコピーされます。このファイルを読み取ることにより、インスタンスを要求する際に入力されたフィールドの値を抽出することができます。

また Rational Asset Manager では、インスタンスのブート・プロセスの早い段階で複数のファイルをインスタンスにアップロードすることもできます。scripts.txt というファイルを使うことで、Rational Asset Manager からインポートするファイルと、そのファイルが最終的に配置されるインスタンス上の場所を記述します。以下に示すのは scripts.txt ファイルの一例です。

cloud-startup5.sh=/etc/init.d/cloud-startup5.sh
addvncpassword.txt=/etc/cloud/addvncpassword.sh
createUser.txt=/etc/cloud/createUser.sh
replace.txt=/etc/cloud/replace.pl

cloud-startup5.sh はインスタンスを GUI モード (init 5 レベル) で起動するときに使われます。起動レベル 3 の場合には cloud-startup3.sh が実行され、インスタンスはテキスト・モードで起動されます。ここで使用しているインスタンスは GUI モードで起動されるので、cloud-startup5.sh ファイルを更新する必要があります。

もう 1 つのファイルは Linux® イメージに対してデフォルトで提供される Perl スクリプト・ファイルです。このファイルは XML ファイルから特定のタグの値を取得するために使われます。この XML ファイルは /usr/bin/extract-parameters.xml にあり、インスタンスを要求する際に設定されたパラメーターを抽出するためにインスタンス作成プロセスで使われます。

では、イメージをパラメーター化するための手順を説明しましょう。

ステップ 1. バリアント・タスクかインバリアント・タスクかを判断する

環境を設定するためのタスクは以下のように分解することができます。

  1. OS のインスタンスを要求する
  2. /etc/xinetd.d/vnc ファイルを編集する
  3. VNC のパスワードを設定する
  4. xstartup ファイルを追加する
  5. ファイアウォールをセットアップする
  6. ユーザーを作成する
  7. ユーザーのパスワードを設定する

次に、そのタスクがバリアント・タスクなのかインバリアント・タスクなのかを判断します。そのタスクにパラメーターが必要であれば、そのタスクはバリアント・タスクです。

  1. OS のインスタンスを要求する
    インバリアント・タスクでは、この OS をベースにカスタマイズが行われます。
  2. /etc/xinetd.d/vnc ファイルを編集する
    インバリアント・タスクでは、このファイルの設定にパラメーターは必要ないため、変更をハードコーディングすることができます。
  3. VNC のパスワードを設定する
    バリアント・タスクでは、パスワードはパラメーターの 1 つです。
  4. xstartup ファイルを追加する
    インバリアント・タスクでは、このファイルにパラメーターは必要ありません。
  5. ファイアウォールをセットアップする
    インバリアント・タスクでは、VNC にアクセスするためのポートは静的です。
  6. ユーザーを作成する
    バリアント・タスクでは、ユーザー名はパラメーターの 1 つです。
  7. ユーザーのパスワードを設定する
    バリアント・タスクでは、パスワードはパラメーターの 1 つです。

ステップ 2. インスタンスを作成し、インバリアント・タスクを実装する

インスタンスを作成してインバリアント・タスクを実装するためには、以下の手順に従います。

  1. インスタンスを要求します。SuSE 11 オペレーティング・システムをベースにインスタンスを要求し、通常どおり、名前や、キーのペア等を入力します。
  2. /etc/xinetd.d/vnc ファイルを編集します。IBM Cloud ポータルの「Support (サポート)」タブから IBM Cloud Developer User Guide にアクセスし、指定されている手順に従います。
  3. xstartup ファイルを追加します。IBM Cloud ポータルの「Support (サポート)」タブから IBM Cloud Developer User Guide にアクセスし、指定されている手順に従います。
  4. ファイアウォールをセットアップします。IBM Cloud ポータルの「Support (サポート)」タブから IBM Cloud Developer User Guide にアクセスし、指定されている手順に従います (図 1 を参照)。この図を見るとわかるように、IBM Cloud Developer User Guide には、このステップに関する重要な詳細事項が含まれています。
図 1. ファイアウォールをセットアップする
ファイアウォールをセットアップする
ファイアウォールをセットアップする

ステップ 3. インスタンスをイメージとしてプライベート・カタログに保存する

すべてのインバリアント・タスクは実行されるため、このイメージをプライベート・カタログに保存することができます。このイメージからインスタンスを再作成するためのパラメーターは、アセットとして Rational Asset Manager に保存されます。このアセットをダウンロードして必要に応じて変更することができます。

インスタンスをイメージとしてプライベート・カタログに保存するためには以下の 2 つのステップがあります。

  1. インスタンスを保存します。通常の方法を使ってインスタンスをイメージとして保存することができます。このイメージの名前と説明を入力します。
    図 2. プライベート・イメージを構成する
    プライベート・イメージを構成する
    プライベート・イメージを構成する
  2. このイメージに対応する Rational Asset Manager アセットを Rational asset catalog からダウンロードします。
    1. IBM Cloud ポータルの「Control panel (コントロール・パネル)」で「View asset catalog (アセット・カタログを表示)」をクリックします。すると Rational Asset Manager にリダイレクトされます。
      図 3. Rational アセット・カタログ
      Rational アセット・カタログ
      Rational アセット・カタログ
    2. My Dashboard (マイ・ダッシュボード)」をクリックします。
    3. 対象のアセットをクリックします。
      図 4. 「My Dashboard (マイ・ダッシュボード)」
      「My Dashboard (マイ・ダッシュボード)」
      「My Dashboard (マイ・ダッシュボード)」
    4. そのアセットをダウンロードし、ローカルの環境に保存します。
      図 5. アセットをダウンロードする
      アセットをダウンロードする
      アセットをダウンロードする
    5. コンテンツを選択します。
      図 6. コンテンツ・リスト
      コンテンツを選択する
      コンテンツを選択する

いくつかのファイルが表示され、その中に parameters.xml もあります。

ステップ 4. バリアント属性を作成する

バリアント属性を作成するためには以下の手順に従います。

  1. ローカル環境から parameters.xml ファイルを開きます。
  2. ファイアウォールのルールがいくつか表示されます。
  3. 最終的な parameters.xml ファイルに「field (フィールド)」タグを追加します (リスト 1)。
    リスト 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="userID" label="User ID" type="string"/>
    	<field name="userPassword" label="User Password" type="password"
            pattern="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"
            patternErrorMessage="Invalid Password. Must contain at least 1 number, 
           at least 1 lower case letter, and at least 1 upper case letter.">
    	</field>
    	<field name="vncPassword" label="VNC Password" type="password"
            pattern="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"
            patternErrorMessage="Invalid Password. Must contain at least 1 number, 
           at least 1 lower case letter, and at least 1 upper case letter.">
    	</field>
    </parameters>
  4. 注意: 最終的なファイルに行頭復帰/改行 (CR/LF) を含んではならず、許されるのは改行 (LF) のみです。dos2unix などの DOS エディター・コマンドを使って CR/LF を LF に変更します。Rational Asset Manager アセットにアップロードされるすべてのファイルで、このルールを守る必要があります。

    また、タグの間に LF があってはなりません。

  5. parameters.xml をアセットにアップロードし、「pencil (ペンシル)」をクリックしてそのアセットを編集します。新しい parameters.xml ファイルまでブラウズします。
    図 7. アセットを編集する
    アセットを編集する
    アセットを編集する
  6. そのページの一番下にある「Update (更新)」をクリックし、コメントを入力します。
  7. ポータルに戻り、プライベート・カタログからイメージを選択します。
    図 8. イメージを選択する
    イメージを選択する
    イメージを選択する
  8. ポップアップ・ウィドウの一番下にある「Next (次へ)」をクリックします。
  9. 通常どおり「name (名前)」を入力し、「Next (次へ)」をクリックします。すると、新しいポップアップ・ウィンドウが表示され、parameters.xml ファイルで定義したさまざまなパラメーターが表示されているはずです。表示されない場合は、イメージの仕様がブラウザーにキャッシュされている可能性があるので、ポータル (www-147.ibm.com) に関連するすべてのクッキーを削除し、再度試してみます。これで問題が解決されるはずです。
    図 9. インスタンスを追加する
    「Add instance (インスタンスの追加)」ウィンドウ
    「Add instance (インスタンスの追加)」ウィンドウ
  10. Cancel (キャンセル)」をクリックします。

ステップ 5. バリアント・タスクを実装する

簡単に言えば、3 つのスクリプトが必要です。

  • VNC のパスワードを追加するためのスクリプト
  • ユーザーを作成するためのスクリプト

これらのスクリプトは cloud-startup5.sh から呼び出されます。そして最後の (すなわち 3 番目の) スクリプトには、他のスクリプトをアセットのどこにアップロードするかを記述します。

私は習慣的に、すべてのカスタム・スクリプトを /etc/cloud ディレクトリーに配置しています。こうすることでカスタム・スクリプトを容易に見つけることができます。すべてのスクリプトは Rational Asset Manager アセットの activation_scripts ディレクトリーの下に配置されています。

これらのスクリプトはインスタンスの中で実行し、テストすることができます。

ステップ 5.1 VNC のパスワードを追加する

以下に示すのは VNC のパスワードを追加するためのスクリプトです。ファイル名は addvncpassword.txt です。

mkdir /root/.vnc
echo "vncPassword" | vncpasswd -f > /root/.vnc/passwd
chmod 777 /var/lib/gdm

最後の行は SuSE 11 ベースのイメージに問題があるために追加されています。この行をスクリプトに追加しないと、VNC を使ってインスタンスに接続している間にエラーがポップアップ表示されます。このスクリプトの最初の行と最後の行は、このファイルに含めずに静的なメソッドを使って実行することもできます。

ステップ 5.2 ユーザーを作成し、パスワードを設定する

以下に示すのはユーザーを作成するためのスクリプトです。ファイル名は createUser.txt です。

useradd -m userID
echo "userPassword" | passwd --stdin userID

セキュリティーのために、パスワードが失効するように設定することができます。そうすることで、ユーザーが初めてログインする際に強制的にパスワードを入力させることができます。

ステップ 6. 実装されたタスクを呼び出す

実装されたタスクは cloud-startup5.sh によって呼び出されます。cloud-startup5.sh は init 5 (SuSE OS、マルチユーザー、GUI ベースを表します) の時に起動します。

cloud-startup5.sh をリスト 2 のように変更します。

リスト 2. 実装されたタスクを呼び出すようにシェル cloud-startup5.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
            echo "VNC Create password"
            perl /etc/cloud/replace.pl /etc/cloud/addvncpassword.sh vncPassword
            . /etc/cloud/addvncpassword.sh
            echo "Create user"
            perl /etc/cloud/replace.pl /etc/cloud/createUser.sh userID
            perl /etc/cloud/replace.pl /etc/cloud/createUser.sh userPassword
            . /etc/cloud/createUser.sh
            cp /etc/cloud/parameters.xml /etc/cloud/parameters.xml.done
        fi
        ;;
    stop)

        echo "== Cloud Stopping"

        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

追加された行は以下のとおりです。

        if [ ! -e /etc/cloud/parameters.xml.done ]; then
            echo "VNC Create password"
            perl /etc/cloud/replace.pl /etc/cloud/addvncpassword.sh vncPassword
            . /etc/cloud/addvncpassword.sh
            echo "Create user"
            perl /etc/cloud/replace.pl /etc/cloud/createUser.sh userID
            perl /etc/cloud/replace.pl /etc/cloud/createUser.sh userPassword
            . /etc/cloud/createUser.sh
            cp /etc/cloud/parameters.xml /etc/cloud/parameters.xml.done
        fi

ファイル /etc/cloud/parameters.xml.done をセマフォーとして使い、サーバーが最初に起動された時にのみ、これらの行を実行するようにしています。

Perl スクリプト replace.pl を使い、キーワードをそれに対応する値で置き換えています。キーワードに対応する値は、指定されたファイルの parameters.xml の中にあります。同じ結果が得られるのであれば、他の任意の方法を使って構いません。

最初の Perl コマンドによって、addvncpassword.sh ファイルの中にあるキーワード vncPassword を parameters.xml の中にあるこのキーワード用の値で置き換えます。

次に addvncpassword.sh ファイルを呼び出します。addvncpassword.txt ファイルを /etc/cloud にアップロードするメカニズムについては後ほど説明します。

2 番目の Perl スクリプトによって userID キーワードを置き換えます。3 番目の Perl スクリプトによって、createUser.sh ファイルの中にある userPassword キーワードを parameters.xml の中にある情報で置き換えます。

次に createUser.sh を呼び出します。

最後に parameters.xml ファイルを parameters.xml.done にコピーし、これらの行が 2 度実行されないようにします。

セキュリティーのために、このスクリプトに何行かを追加し、parameters.xml からパスワードの値を消去することもできます。

ステップ 7. 実装されたタスクをどこにアップロードするかを記述する

インスタンスを作成する際に、これらすべてのタスクやスクリプトを適切な場所にアップロードする必要があります。IBM Cloud に用意されたメカニズムでは、scripts.txt というファイルを作成し、この scripts.txt ファイルに各ファイルのアップロード先を記述します。

以下に示すのは scripts.txt ファイルの例です。

cloud-startup5.sh=/etc/init.d/cloud-startup5.sh
addvncpassword.txt=/etc/cloud/addvncpassword.sh
createUser.txt=/etc/cloud/createUser.sh
replace.txt=/etc/cloud/replace.pl

この例では、cloud-startup5.sh/etc/init.d/cloud-startup5.sh という場所にアップロードする、等々の内容が記述されています。

ステップ 8. スクリプトによって Rational Asset Manager を更新する

既に parameters.xml をアップロードしたので、今度は以下のスクリプトをアセットの activation_scripts ディレクトリーの下にアップロードします。

  • addvncpassword.txt
  • cloud-startup5.sh
  • createUser.txt
  • replace.txt
  • scripts.txt

これらのスクリプトをアップロードするためには以下の手順に従います。

  1. アセットを編集し、「More options (他のオプション)」をクリックします。
    図 10.「More options (他のオプション)」
    「More options (他のオプション)」
    「More options (他のオプション)」
  2. activation_scripts をクリックします。activation_scripts が存在しない場合には、「Create a folder (フォルダーを作成)」オプションを使って activation_scripts を作成します。
    図 11. activation_scripts
    activation_scripts
    activation_scripts
  3. Ajouter (追加)」をクリックし、対象のファイルまでブラウズします。
    図 12. ファイルを追加する
    追加対象のファイルを選択する
    追加対象のファイルを選択する
  4. Update (更新)」をクリックします。
    図 13. 更新
    更新
    更新
  5. コメントを追加した後、再度「Update (更新)」をクリックします。この場合はコメントとして「Upload scripts (スクリプトをアップロード)」を追加します。
    図 14. コメントを更新する
    コメントを更新する
    コメントを更新する
  6. これで、テストを行うことができます。

ステップ 9. 新しいカスタム・イメージに基づいてインスタンスを作成する

新しいカスタム・イメージに基づいてインスタンスを作成するためには、以下の手順に従います。

  1. プライベート・カタログにアクセスし、カスタマイズされたイメージを選択します。
    図 15. イメージを選択する
    イメージを選択する
    イメージを選択する
  2. Next (次へ)」をクリックします。
  3. Request Name (リクエスト名)」を入力し、「Next (次へ)」をクリックします。
    図 16. イメージを構成する
    イメージを構成する
    イメージを構成する
  4. VNC のユーザー名とパスワードを入力します。
    図 17. 他のパラメーターを構成する
    他のパラメーターを構成する
    他のパラメーターを構成する
  5. Next (次へ)」をクリックして情報を送信します。
  6. これで、VNCViewer を使って新しいインスタンスの IP アドレスに接続することができます。
    図 18. VNCViewer による接続の詳細
    VNCViewer
    VNCViewer
  7. IP アドレスの後にある「:1」に注意してください。「OK」をクリックします。
  8. VNC のパスワードを入力し、「OK」をクリックします。
    図 19. VNCViewer による認証
    VNCViewer による認証
    VNCViewer による認証
  9. ユーザー名とパスワードを入力すると、図 20 の画面が表示されます。
    図 20. ログイン・ウィンドウ
    ログイン・ウィンドウ
    ログイン・ウィンドウ
  10. 成功です。

    図 21. 成功
    成功
    成功

追加事項

GetStarted.html ファイルを変更することでアセットに情報を追加することができます。GetStarted.html ファイルを変更したら、Rational Asset Manager を使ってアップロードします。新しいインスタンスを選択すると、IBM Cloud ポータルの「Control panel (コントロール・パネル)」の一番下に GetStarted.html が表示されているはずです。

これで終わりです。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Rational
ArticleID=617651
ArticleTitle=カスタム・インスタンスのクラウド・イメージをオンザフライでパラメーター化する
publish-date=12072010