第2回:Eucalyptusを利用してみる
前回はEucalyptusのインストールと設定についてご紹介しました。今回は、Eucalyptusを実際に利用するところまでを説明します。
■euca2oolsのインストール
Eucalyptusを利用するためのクライアントに、「euca2ools」というクライアントツールがあります。euca2oolsはEucalyptus社が作成し配布しており、CUIで使用します。なお、euca2oolsはLinuxで動かすことを前提として作られているため、今回はCLC/CCとしているサーバーにインストールします。
euca2oolsをインストールする前に、euca2oolsで必要となるパッケージをインストールします。
# CLC/CCがインターネットに接続できる環境の場合 yum -y install swig rsync # CLC/CCがインターネットに接続できない環境の場合 mkdir /media/CentOS mount /dev/cdrom /media/CentOS/ yum --disablerepo=\* --enablerepo=c5-media -y install swig rsync |
Eucalyptusのサイト http://open.eucalyptus.com/downloads にアクセスし、ページ下部にある「Euca2ools 1.2 - RHEL / CentOS 5.4 - x86_64」からCentOS用のeuca2ools-1.2-centos-x86_64.tar.gzをダウンロードします。
Eucalyptus 社からダウンロード |
ダウンロードしたファイルをCLC/CCとするサーバに置き、以下のように展開し、展開したディレクトリに移動します。
tar -xzf euca2ools-1.2-centos-x86_64.tar.gz cd euca2ools-1.2-centos-x86_64 |
必要となるpythonパッケージとともに、以下のようにrpmコマンドでインストールします。
rpm -Uvh python25-2.5.1-bashton1.x86_64.rpm \ python25-libs-2.5.1-bashton1.x86_64.rpm \ euca2ools-1.2-1.x86_64.rpm |
インストールは以上です。
■euca2oolsの使い方
euca2oolsに限りませんが、Eucalyptusを利用するにはEucalyptusのCloud Controllerから取得できる認証情報などが必要となりますので、CLC/CCで以下のように認証情報を取得し、展開します。
cd ~ euca_conf --get-credentials euca2-admin-x509.zip mkdir -p .euca/admin/keypairs cd .euca/admin/ unzip ../../euca2-admin-x509.zip source eucarc |
試しに以下のようにコマンドを実行し、Eucalyptusから応答が返ることを確認します。
euca-describe-availability-zones verbose AVAILABILITYZONE cluster0 192.168.100.1 AVAILABILITYZONE |- vm types free / max cpu ram disk AVAILABILITYZONE |- m1.small 0002 / 0002 1 128 2 AVAILABILITYZONE |- c1.medium 0002 / 0002 1 256 5 AVAILABILITYZONE |- m1.large 0001 / 0001 2 512 10 AVAILABILITYZONE |- m1.xlarge 0001 / 0001 2 1024 20 AVAILABILITYZONE |- c1.xlarge 0000 / 0000 4 2048 20 |
euca-describe-availability-zonesコマンドは利用可能なクラスタの情報を表示するコマンドです。なお、管理者権限のあるユーザーの場合は、サブコマンドのverboseを指定することでクラスタ毎の利用可能なリソース情報を表示します。
■マシンイメージの登録
Eucalyptusを利用するには、仮想マシンのイメージファイルをEucalyptusに登録しなければなりません。ゼロから作成することもできますが、ここではEucalyptus社が配布しているマシンイメージを使うことにします。
Eucalyptus社のサイト http://open.eucalyptus.com/wiki/EucalyptusUserImageCreatorGuide_v1.6 にアクセスし、euca-centos-5.3-x86_64.tar.gzをダウンロードします。
Eucalyptus社からマシンイメージをダウンロード |
ダウンロードしたファイルをCLC/CCに置き、以下のように展開し、展開したディレクトリに移動します。
tar -xzf euca-centos-5.3-x86_64.tar.gz cd euca-centos-5.3-x86_64 ls -l total 1026052 -rw-r--r-- 1 root root 1049624576 Apr 24 2009 centos.5-3.x86-64.img # マシンイメージ drwxr-xr-x 2 root root 4096 May 13 2009 kvm-kernel # KVM 用の kernel と ramdisk ファイル drwxr-xr-x 2 root root 4096 May 13 2009 xen-kernel # Xen 用の kernel と ramdisk ファイル |
以下のようにeuca-bundle-image、euca-upload-bundle、euca-registerコマンドを実行してマシンイメージを登録します。
# kernelイメージの登録作業 euca-bundle-image -i xen-kernel/vmlinuz-2.6.27.21-0.1-xen --kernel true Checking image Tarring image Encrypting image Splitting image... Part: vmlinuz-2.6.27.21-0.1-xen.part.0 Generating manifest /tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml # ↑このmanifestファイルを使って↓以下のようにEucalyptusにアップロードします euca-upload-bundle -b kernel.001 -m /tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml Checking bucket: kernel.001 Creating bucket: kernel.001 Uploading manifest file Uploading part: vmlinuz-2.6.27.21-0.1-xen.part.0 Uploaded image as kernel.001/vmlinuz-2.6.27.21-0.1-xen.manifest.xml # ↑アップロードしたイメージのmanifestファイルを↓以下のように登録します euca-register kernel.001/vmlinuz-2.6.27.21-0.1-xen.manifest.xml IMAGE eki-5E491255 # ↑kernelイメージはこのkernel IDで登録されました # ramdiskイメージの登録作業 # kernelイメージの登録作業と同じ要領で登録します。 euca-bundle-image -i xen-kernel/initrd-2.6.27.21-0.1-xen --ramdisk true euca-upload-bundle -b ramdisk.001 -m /tmp/initrd-2.6.27.21-0.1-xen.manifest.xml euca-register ramdisk.001/initrd-2.6.27.21-0.1-xen.manifest.xml IMAGE eri-596A123C # ↑ramdiskイメージはこのramdisk IDで登録されました # マシンイメージの登録作業(kernelやramdiskに比べて時間がかかります) euca-bundle-image -i centos.5-3.x86-64.img --kernel eki-5E491255 --ramdisk eri-596A123C euca-upload-bundle -b machine.001 -m /tmp/centos.5-3.x86-64.img.manifest.xml euca-register machine.001/centos.5-3.x86-64.img.manifest.xml IMAGE emi-330411BE # ↑マシンイメージはこのIDで登録されました |
euca-bundle-image, euca-upload-bundle, euca-registerコマンドの主なオプションについては以下の表を参照してください。
オプション | 引数 | 説明 |
-i, --image | ImageFile | (必須) BundleImage の対象となるファイルを指定します。 |
--kernel | kernel ID true | イメージファイルがマシンイメージの場合には、そのマシンイメージで使用する kernel ID を指定することができます。 イメージファイルが kernel イメージの場合には true という文字列を与える必要があります。 |
--ramdisk | ramdisk ID true | イメージファイルがマシンイメージの場合には、そのマシンイメージで使用する ramdisk ID を指定することができます。 イメージファイルが ramdisk イメージの場合には true という文字列を与える必要があります。 |
-d, --destination | PATH | BundleImage の結果を出力するディレクトリパスを指定します。このオプションを使用しない場合は /tmp/ 配下に出力されます。 |
-r, --arch | x86_64 i386 | BundleImage の対象となるファイルのアーキテクチャを指定します。64bit OS 用マシンイメージの場合は x86_64 を指定し、32bit OS 用マシンイメージの場合は i386 を指定します。このオプションを使用しない場合は x86_64 がデフォルト値となります。 |
オプション | 引数 | 説明 |
-b, --bucket | BucketName | (必須) アップロード先のバケット名を指摘します。Walrus に存在しないバケット名を指定するとアップロード時に作成されます。 |
-m, --manifest | ManifestFile | (必須)アップロードするファイルの情報が記録されているマニフェストファイルを指定します。 |
-d, --directory | PATH | アップロードするファイルがマニフェストファイルと同じ階層に存在しない場合にはこのオプションでアップロード対象のファイルがあるディレクトリパスを指定します。 |
オプション | 引数 | 説明 |
(なし) | ImageLocation | (必須)UploadBundleでアップロードしたマニフェストとファイルを Walrus に登録するために「バケット名/マニフェストファイル」という形式で指定します。 |
なお、マシンイメージを登録すると、Walrusではファイルの結合・復号化・展開を実施するためサーバの負荷が一時的に高まります。加えてこれらの作業が終わらないうちにインスタンスを起動しようとするとEucalyptusの思わぬバグに遭遇する可能性があるため、euca-registerを実行したのち数分経ってからインスタンスの起動を実行してください。
■一般ユーザーの作成
kernelイメージとramdiskイメージを登録するためには管理者権限が必要なためにadminユーザーで作業しましたが、普段の利用には一般ユーザ-を作成して操作するのが望ましいため、Web管理画面にアクセスし一般ユーザーを作成します。Web管理画面で[Users]タブを開くとユーザーの一覧画面が表示されます。
ユーザーの一覧画面 |
ユーザーの一覧画面にある[Add user]ボタンをクリックするとユーザーの追加画面に遷移します。以下の画面のように情報を入力し、[Add user]ボタンをクリックするとユーザーが作成されます。
ユーザーの登録画面 |
ユーザーを作成したら、一度Web管理画面からログアウトし、作成したユーザーのアカウントでログインしなおします。
Web管理画面からのログアウト |
ログイン後、[Download Credentials]ボタンを押下して、euca2-ユーザID-x509.zipをダウンロードします。
ユーザーの認証情報のダウンロード |
ダウンロードしたeuca2-ユーザID-x509.zipをCLC/CCにコピーし、以下のように展開します。(以下、ユーザIDは上記で作成したvtaroを用いて説明します)
cd ~ mkdir -p .euca/vtaro/keypairs cd .euca/vtaro/ unzip ../../euca2-vtaro-x509.zip source eucarc |
■キーペアの作成
インスタンスを起動してsshで接続するためにはキーペアを作成する必要があるため、以下のようにキーペアを作成します。
euca-add-keypair key01 > ~/.euca/vtaro/kaypairs/key01.pk chmod 400 ~/.euca/vtaro/kaypairs/key01.pk |
作成したキーペアの一覧はeuca-describe-keypairsコマンドで確認できます。
euca-describe-keypairs KEYPAIR key02 94:bc:94:92:b6:d3:7d:4d:2b:ba:d3:98:7f:5e:51:cc:6f:92:ec:56 KEYPAIR key01 25:d9:00:a8:09:8e:03:3a:7a:1b:95:37:50:86:eb:94:36:54:1c:b3 |
■セキュリティグループの設定
インスタンスを起動してsshで接続するためにはセキュリティグループを設定する必要があります。なお、ユーザーごとにdefaultという名前のセキュリティグループが1つ用意されていますが、何も設定されていないため以下のように設定します。
euca-authorize -P tcp -p 22 -s 192.168.32.0/24 default GROUP default PERMISSION default ALLOWS tcp 22 22 FROM CIDR 192.168.32.0/24 |
euca-authorizeコマンドの主なオプションについては以下の表を参照してください。
オプション | 引数 | 説明 |
-P, --protocol | tcp udp icmp | (必須)セキュリティグループに設定するプロトコルを指定します。 |
-p, --port-range | PortNum from-to | (プロトコルで tcp か udp を指定した場合は必須)セキュリティグループに設定するポート番号を指定します。 ポート番号を 1 つ指定するかもしくはポート番号をハイフンでつないで 137-139 のように範囲指定します。 |
-t, --icmp-type-code | type:code | (プロトコルで icmp を指定した場合は必須)セキュリティグループに指定するICMPのタイプとコードを指定します。 |
-s, --source-subnet | Network/Subnet | (下記の -o と -u オプションを使用しない場合は必須) セキュリティグループに設定する許可する通信対象のネットワークアドレスとサブネットを指定します。Web サービスのような不特定な通信対象の場合は 0.0.0.0/0 と設定しますが、ssh のような特定対象とのみ通信する場合に 0.0.0.0/0 と設定するとセキュリティ上好ましくないため、必要最低限な値を設定するほうが好ましいです。 |
-o, --source-group | SecurityGroup | (上記の -s オプションを使用しない場合は必須)設定するセキュリティグループを他のセキュリティグループからの通信のみ許可する場合に対象となるセキュリティグループを指定します。 |
-u, --source-group-user | UserID | (上記の -s オプションを使用しない場合は必須)-o オプションで指定したセキュリティグループのユーザーIDを指定します。 |
(なし) | SecurityGroup | (必須)上記の設定を反映するセキュリティグループの名前を指定します。指定するセキュリティグループは既に存在する必要があるため、存在していない場合は euca-add-group コマンドで事前に作成しておく必要があります。 |
■インスタンスの起動・接続・停止
前述の「マシンイメージの登録」で登録したemi-330411BEを使ってインスタンスを起動します。
euca-run-instances -k key01 -t m1.small -n 1 emi-330411BE RESERVATION r-35CC06E6 vtaro vtaro-default INSTANCE i-410306FC emi-330411BE 0.0.0.0 0.0.0.0 pending key01 2010-06-24T13:46:41.218Z eki-5E491255 eri-596A123C |
インスタンスの起動には数十秒から数分ほど時間がかかりますので、euca-describe-instancesコマンドでインスタンスの状態を確認します。pendingがrunningになるとインスタンスが起動したことを示します。この状態はHypervisor上で起動処理が開始されたこと意味するため、実際にはrunningになってから更に仮想マシンのOS起動処理が終るまで数十秒ほど待つ必要があります。
euca-describe-instances RESERVATION r-35CC06E6 vtaro default INSTANCE i-410306FC emi-330411BE 192.168.32.200 10.1.2.2 pending key01 0 m1.small 2010-06-24T13:46:41.218Z cluster0 eki-5E491255 eri-596A123C |
一般的には以下のようにwatchコマンドを用いて監視します。
watch -d euca-describe-instances |
起動したインスタンスにsshで接続するには以下のように接続します。
ssh -i ~/.euca/vtaro/keypairs/key01.pk -o StrictHostKeyChecking=no 192.168.32.200 |
インスタンスを停止するには以下のようにeuca-terminate-instancesコマンドに対象とするインスタンスIDを指定して実行します。
euca-terminate-instances i-410306FC INSTANCE i-410306FC |
なお、インスタンスを停止させた場合はAmazon EC2と同様にそれまでインスタンス上で作業した内容が消えてしまいます。そのため、インスタンス上の作業結果を失ないたくない場合はEBSのボリュームを利用するか、もしくはeuca-bundle-volコマンドにて稼働しているインスタンスからマシンイメージを作成します。
以上、Eucalyptusの利用方法を簡単に説明しました。次回はeuca-bundle-volやEBSの使い方を説明します。
羽深 修 | Eucalyptus歴はまだ1年ですが、周囲からはEucalyptus中毒と勘違いされているようです。Japan Eucalyptus User Groupの活動に参加し、オープンソースカンファレンスでネタなどを披露しています。度々Eucalyptusへのパッチも書いてます。ちなみに仕事ではCentOS + Xenという環境でEucalyptusを利用していますが、自宅のEucalyptus環境はGentoo Linux + KVMで動かしています。 |
志田 隆弘 | 主にEucalyptusやクラウドとはあまり関係のない分野でちょこちょこと活動していました。Eucalyptusはバージョン 1.3の頃からいじり始め、かれこれ2年近くEucalyptusに浸かった生活をしています。Eucalyptus 1.4が出たタイミングで、Tanacasinoという名前のGUIクライアントを作ったりしていました。最新のEucalyptusで動作するので、ぜひ使ってみてください。 |
田中 智文 | 志田さんとともに初期の頃からEucalyptusの調査・検証・使用してきました。志田さんの作成したTanacasinoのメンテナンスと機能拡張を行っています。新婚ほやほやなので家でのハック活動時間が少ないですが、Walrus Clientを作ってみたりbotoを使ってEucalyptusを操作して遊んでいます。 |