第3回:インスタンスの保存とEBSの利用について


 第2回ではeuca2oolsを利用したインスタンスの起動・停止について説明しました。今回は、引き続きeuca2oolsを利用したインスタンスの保存やEBSの利用方法について記述します。

インスタンスの保存について

 Eucalyptusで立ち上げたインスタンスはAmazon EC2と同様に、インスタンスを停止するとインスタンス上の情報が失なわれてしまいます。そこで、インスタンス全体をマシンイメージ化するためにeuca-bundle-volというコマンドがあり、このeuca-bundle-volをインスタンス上で実行するとeuca-bundle-imageと同様のファイルが生成されます。

 euca-bundle-imageとeuca-bundle-vol、似ている名前のコマンドで役割も似ていますが、euca-bundle-imageはマシンイメージファイルを処理してアップロード用のファイルを生成するのに対し、euca-bundle-volは実行された環境のディスクからアップロード用のファイルを生成します。以下にeuca-bundle-imageとeuca-bundle-volの違いを概要図で示します。

 

euca-bundle-imageの概要

 

euca-bundle-volの概要

 

 以下に、euca-bundle-volの実行例を説明します。なお、前回と同様にEucalyptusのサイトからダウンロードしたCentOS 5.3のイメージを使用してインスタンスを起動しています。

 euca-bundle-volをインスタンス上で実行するためには、以下の条件が必須となります。

・インスタンス上にeuca2oolsがインストールされていること
・インスタンス上にユーザの認証情報(euca2-ユーザID-x509.zip)が配置されていること
・インスタンスで使用中のディスク容量以上の空き容量があること、もしくはeuca-bundle-volのオプションで指定するサイズ以上の空き容量があること。

 なお、euca2oolsのインストールやユーザの認証情報(euca2-ユーザID-x590.zip)の配置については前回の連載を参照してください。

インスタンスのディスク容量の確認

 euca-bundle-volでインスタンスをマシンイメージ化するためには十分な空き容量が必要となります。例えば、EucalyptusのサイトからダウンロードしたCentOS 5.3のイメージをm1.small(デフォルト設定値のディスクサイズは2GB)で起動しeuca2oolsをインストールした場合、以下のように986MBの使用量に対して、/は292MBの空き容量で/mntは477MBの空き容量となります。

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 986M 645M 291M 69% /
/dev/sda2 520M 17M 477M 4% /mnt

 このままではeuca-bundle-volの動作条件を満せないため、以下のいずれかの対策を実施する必要があります。

・インスタンスを起動するVM Typesをm1.smallより大きくする(ただし、既に起動しているインスタンスには適用できない)
・VM Typesの設定値(ディスクサイズ)を変更してからインスタンスを起動する(同上)
・EBSボリュームを使用する

 これらの対策のうちEBSボリュームを使用する方法が一番スマートなやり方であるため、以下にEBSボリュームの作成方法およびインスタンスへの取り付け方法を説明します。

EBSボリュームの作成と取り付け

 EBSボリュームを作成するにはeuca-create-volumeコマンドを使用します。例えば5GBのEBSボリュームを作成するには以下のように実行します。

euca-create-volume -s 5 -z cluster0
VOLUME vol-5C750646 5 creating 2010-08-30T12:25:08.843Z
# 左から、文字列「VOLUME」、ボリュームID、ボリュームサイズ、ボリュームの状態、ボリューム作成日(UTC)

 EBSボリュームのサイズは-sオプションで指定します。なお、上記の-zオプションはEBSボリュームを作成するゾーン名(クラスタ名)を指定します。ゾーン名は以下のようにeuca-describe-availability-zonesコマンドで確認することができます。

euca-describe-availability-zones
AVAILABILITYZONE cluster0 192.168.100.1
# 左から、文字列「AVAILABILITYZONE」、ゾーン名、CCのIPアドレス

 euca-create-volumeコマンドで作成したEBSボリュームはeuca-describe-volumesコマンドで確認することができます。

euca-describe-volumes
VOLUME vol-5C750646 5 cluster0 available 2010-08-30T12:25:08.843Z
# 左から、文字列「VOLUME」、ボリュームID、ボリュームサイズ、ボリュームを作成したゾーン名、ボリュームの状態、ボリューム作成日(UTC)

 euca-describe-volumesの結果で当該EBSボリュームがavailableになっていればEBSボリュームを利用することができます。

 euca-create-volume,euca-describe-availability-zones,euca-describe-volumesコマンドの主なオプションと、EBSボリュームの状態については以下の表を参照してください。

【euca-bundle-image コマンドの主なオプション】
オプション引数説明
-s, --sizeSize(下記の --snapshot オプションを使用しない場合は必須) 作成するボリュームのサイズを指定します。
--snapshotSnapshotID(上記の -s オプションを使用しない場合は必須) 新規にボリュームを作成するかわりに、スナップショットからボリュームを作成します。
-z, --zoneZoneName(必須) ボリュームを作成するゾーン名 (クラスタ名) を指定します。


【euca-describe-availability-zonesコマンドの主なオプション】
オプション引数説明
--regionRegionName表示するリージョン名を指定します。ただしこのオプションは Amazon EC2 互換のため、Eucalyptus 環境ではあまり意味をなしません。
(なし)zone1 zone2...zoneN表示するゾーン名を指定します。


【euca-describe-volumesコマンドの主なオプション】
オプション引数説明
(なし)volume1 volume2...volumeN表示するボリューム ID を指定します。


【EBSボリュームの状態】
状態説明
creatingボリュームは作成中です。作成が完了すると available になります。
availableボリュームは利用可能です。euca-attach-volume でインスタンスに取り付けることができます。
in-useボリュームは使用中です。インスタンスに取り付けられたボリュームはこの状態になります。
deletingボリュームは削除中です。
deletedボリュームは削除されました。
failedボリュームの作成が何らかの理由で失敗したか、ボリュームが利用できない状態に遷移したことを意味します。
unavailable上記同様、ボリュームが利用できない状態に遷移したことを意味します。

 

 EBSボリュームはeuca-attach-volumeでインスタンスに取り付け、euca-detach-volumeでインスタンスから取り外します。先程作成したEBSボリュームをインスタンスに取り付ける場合は以下のように実行します。

euca-attach-volume -i i-3EEE07D6 -d /dev/sdb vol-5C750646
VOLUME vol-5C750646

 euca-attach-volumeの主なオプションは以下を参照してください。

【euca-attach-volumeコマンドの主なオプション】
オプション引数説明
-i, --instanceInstanceID(必須) EBS ボリュームを取り付けるインスタンス ID を指定します。
-d, --deviceDeviceName(必須) インスタンスでの EBS ボリュームのデバイス名を指定します。/dev/sda はインスタンスが既に使用しているため、/dev/sdb 以降を指定するのが望ましいです。
(なし)VolumeID(必須) 取り付ける EBS ボリュームのボリューム ID を指定します。

 

 euca-describe-volumesコマンドで、インスタンスに取り付けたEBSボリュームの状態がin-useに遷移していることを確認できます。なお、インスタンスの/proc/partitionsでsdbが存在することを確認できます。

euca-describe-volumes
VOLUME vol-5C750646 5 cluster0 in-use 2010-08-30T12:25:08.843Z
ATTACHMENT vol-5C750646 i-3EEE07D6 sdb 2010-08-30T13:40:57.858Z

# インスタンスに取り付けたボリュームの確認
cat /proc/partitions
major minor #blocks name

8 1 1025024 sda1
8 2 540672 sda2
8 3 524288 sda3
8 16 5242880 sdb

 この状態はまだ「インスタンスにEBSボリュームをブロックデバイスとして取り付けただけ」の状態であり、実際に利用する場合は以下の作業が必要となります。

・ブロックデバイスのパーティショニング(新規EBSボリュームの場合)
・作成したパーティションのフォーマット(新規パーティションの場合)
・フォーマットしたパーティションのマウント

 この作業はLinuxを利用するうえでは一般的な知識ですので詳細な説明については割愛しますが、以下に筆者がよく使用する方法を記述します。

# sfdiskコマンドでパーティショニング
# (ディスクに1つのパーティションを/dev/sdb1として作成します)
echo -e ",\n;\n;\n;\n" | sfdisk /dev/sdb
# (コマンドの出力は割愛)

# 作成したパーティションをmkfs.ext3コマンドでフォーマット
mkfs.ext3 /dev/sdb1
# (コマンドの出力は割愛)

# フォーマットしたパーティションをマウント
mkdir -p /ebs/vol00
mount /dev/sdb1 /ebs/vol00
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 986M 645M 291M 69% /
/dev/sda2 520M 17M 477M 4% /mnt
/dev/sdb1 5.0G 139M 4.6G 3% /ebs/vol00

 以上で、EBSボリュームの作成と取り付けができました。次にeuca-bundle-volの使い方を説明します。

euca-bundle-volによるインスタンスイメージの作成

 euca-bundle-volは何もオプションを指定しないと、/tmp/配下に10GBのイメージサイズを作成します。よって-sオプションでイメージサイズを指定し、-dオプションで出力先を指定します。なおデフォルトではimageというファイル名で出力しますが、-pオプションでファイル名を指定することが可能です。

euca-bundle-vol -s 2048 -p test1 -d /ebs/vol00/
# (コマンドの出力は割愛)
# コマンドが正常終了すると出力の一番最後の行は以下のようになります。
Generating manifest /ebs/vol00/test1.manifest.xml

# euca-bundle-volが完了すると/ebs/vol00/配下にイメージファイルと
# 分割+暗号化されたファイルとマニフェストファイルが作成されます。
ls -l /ebs/vol00/
total 1153832
drwx------ 2 root root 16384 Aug 30 10:23 lost+found
-rw-r--r-- 1 root root 2147483648 Aug 31 09:48 test1.img
-rw-r--r-- 1 root root 6815 Aug 31 09:52 test1.manifest.xml
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.0
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.1
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.10
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.11
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.12
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.13
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.14
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.15
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.16
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.17
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.18
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.19
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.2
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.20
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.21
-rw-r--r-- 1 root root 5107536 Aug 31 09:52 test1.part.22
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.3
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.4
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.5
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.6
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.7
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.8
-rw-r--r-- 1 root root 10485760 Aug 31 09:52 test1.part.9

 あとは、euca-upload-bundle,euca-registerを使用してWalrusにイメージを登録します。euca-bundle-volの主なオプションについては以下を参照してください(euca-upload-bundleとeuca-registerについては前回の連載を参照してください)。

【euca-bundle-volコマンドの主なオプション】
オプション引数説明
-s, --sizeImageSize作成するイメージのサイズを MB 単位で指定します。このオプションを指定しない場合は 10 GB のイメージが作成されます。
-p, --prefixImageName作成するイメージの名前を指定します。このオプションを指定しない場合は image という名前でイメージが作成されます。
-e, --exclude/PATH1, /PATH2.../PATHX作成するイメージに含めない指定します。指定するパスが複数ある場合はパスをカンマ区切りで指定します。
-d, --destination/PATH作成するイメージの出力先を指定します。このオプションを指定しない場合は /tmp 配下に出力されます。

 

 以上でeuca-bundle-volやEBSの使い方の説明を終わります。次回はGUIクライアントについて紹介致します。

 


羽深 修
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を操作して遊んでいます。
関連情報
(羽深 修/志田 隆弘/田中 智文)
2010/10/22 06:00