
OSSのクラウド基盤「Eucalyptus」を使う(8)--応用編〜おわりに
API Toolsの動作確認も兼ねて、インスタンス内部からEBSを割り当て、まずはEucalyptusの最新開発版をチェックアウトしてみます。ここでは、EucalyptusのX.509証明書を「/root」に、API Toolsを「/usr/local/ec2」に置いてあるものとします。

スクリプトの動作確認をしたら、これが起動時に実行されるようcrontabにでも追加して、イメージを作ります。イメージは、インスタンスストレージ上に作るようにします。

入力例4行目の“
できたバンドルは、いつものようにアップロード・登録して完了です。なお、カーネルやramdiskのイメージは、adminユーザにしか登録できませんが、マシンイメージは誰でも登録できます。
(本稿の一番最後に「自動ビルドスクリプト」のコード例を掲載しています)
終わりに
本連載(自分たち専用のクラウドを作ろう)では、クラウドが生まれた背景の話から始まり、Eucalyptusを用いてクラウド環境を立ち上げるための手順までを解説してきました。
限られたページ数の中でですが、基本的な事項については一通り説明することができたと思います。しかし、連載ではセキュリティグループを始めとする、触れることのできなかった興味深い仕組みがまだいくつかあります。これらの機能については、ぜひ自分の手で調べ進めてみてください。
今回は、Amazon EC2やEucalyptusを題材にしましたが、これらの仕組みだけがクラウド基盤ではありません。しかし、これらはクラウド基盤としては非常に典型的な機能を提供しており、今後次々と立ち上がってくるであろう様々なクラウドシステムの手本とされると思われます。
今回知ることのできた、クラウド基盤が提供すべき機能の知識や、クラウド基盤に使われる要素技術は、今後現れてくるであろう別のクラウドシステムに対しても通用すると思います。
長きに渡った本連載も、今回が最終回です。Eucalyptusが大きく進化した時、またはクラウドコンピューティングの世界に新たな流れが生まれた時、再びこの場を借りて、解説させていただければと考えています。
自動ビルドスクリプトのサンプルコード
#!/bin/sh EUCA_KEY_DIR=/root S3_URL=http://172.16.4.1:8773/services/Walrus EC2_URL=http://172.16.4.1:8773/services/Eucalyptus EC2_PRIVATE_KEY=${EUCA_KEY_DIR}/euca2-foo-XXXXXXXX-pk.pem EC2_CERT=${EUCA_KEY_DIR}/euca2-foo-XXXXXXXX-cert.pem EUCALYPTUS_CERT=${EUCA_KEY_DIR}/cloud-cert.pem EC2_ACCESS_KEY='??????????????????????' EC2_SECRET_KEY='??????????????????????????????????????' VOLUME=vol-XXXXXXXX EC2_HOME=/usr/local/ec2 JAVA_HOME=/usr/lib/jvm/java-1.6.0 export EC2_HOME export JAVA_HOME PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/ec2/bin do_build() { # skip error checks; assume set -e for dir in SOURCES SRPMS SPECS RPMS RPMS/geode RPMS/i386 RPMS/athlon RPMS/noarch RPMS/i586 RPMS/i486 RPMS/i686 BUILD; do if [ ! -d /usr/src/redhat/$dir ]; then mkdir /usr/src/redhat/$dir fi done find /usr/src/redhat \! -type d | xargs rm -f MYID=`curl -s http://169.254.169.254/latest/meta-data/instance-id` case "$MYID" in i-????????) ;; *) echo "Cannot get my instance ID" return ;; esac if [ ! -d /sys/block/sdb1 ]; then ec2-attach-volume -K $EC2_PRIVATE_KEY -C $EC2_CERT -U $EC2_URL $VOLUME -i $MYID -d sdb1 i=0 while [ $i -lt 30 ]; do if [ -d /sys/block/sdb1 ]; then break fi sleep 1 i=$(($i+1)) done if [ $i -ge 30 ]; then echo "Failed to attach EBS" return fi fi if [ ! -d /mnt/eucalyptus ]; then mount /dev/sdb1 /mnt fi cd /mnt/eucalyptus bzr update if [ "$nobuild" = "1" ]; then echo "Skipping build" return fi if [ ! -f /mnt/revno ]; then revno=0 else revno=`cat /mnt/revno` fi revno=$(($revno+1)) echo $revno > /mnt/revno if [ -f /mnt/eucalyptus/eucalyptus.spec ]; then specfile=eucalyptus/eucalyptus.spec elif [ -f /mnt/eucalyptus/eucalyptus.spec.centos ]; then specfile=eucalyptus/eucalyptus.spec.centos else echo "specfile not found" return fi sed -e "/^Release:/s/\$/.$revno/" /mnt/$specfile > /usr/src/redhat/SPECS/eucalyptus.spec version=`rpm -q --specfile /usr/src/redhat/SPECS/eucalyptus.spec --qf "%{VERSION}\n" | head -1` cd /mnt find eucalyptus -name .bzr -prune -o -print | sort | pax -wd | gzip -9v > /usr/src/redhat/SOURCES/eucalyptus-${version}.tgz rpmbuild -bs --nodeps /usr/src/redhat/SPECS/eucalyptus.spec rpm -q -p /usr/src/redhat/SRPMS/eucalyptus-*.src.rpm -R | sed -e 's% *$%%' | xargs -d '\n' yum -y install rpmbuild -bb /usr/src/redhat/SPECS/eucalyptus.spec } nobuild= nohalt= bucket=eucabuild if [ $# -eq 0 ]; then curl -s -o /tmp/ud$$ http://169.254.169.254/latest/user-data || exit 11 ud=`cat /tmp/ud$$` set -- $ud fi args=`getopt nhb: $*` if [ $? -ne 0 ]; then echo 'Usage: ec2run -d "[-n] [-h] [-b]"' `curl -s http://169.254.169.254/latest/meta-data/ami-id` exit 12 fi set -- $args while [ $# -gt 0 ]; do case "$1" in -n) nobuild=1;; -h) nohalt=1;; -b) bucket=$2 shift;; --) shift break;; esac shift done if [ $# -gt 0 ]; then echo 'Usage: ec2run -d "[-n] [-h] [-b ]"' `curl -s http://169.254.169.254/latest/meta-data/ami-id` exit 13 fi cleanup () { s3-curl.pl --id=foo --createBucket=$bucket -- $S3_URL/$bucket s3-curl.pl --id=foo --put=/tmp/log -- $S3_URL/$bucket/log } trap cleanup 0 set -ex do_build 2>&1 | tee /tmp/log set +e trap '' 0 s3-curl.pl --id=foo --createBucket=$bucket -- $S3_URL/$bucket for file in `find /usr/src/redhat/RPMS /usr/src/redhat/SRPMS -name \*.rpm`; do s3-curl.pl --id=foo --put=$file -- $S3_URL/$bucket/`basename $file` done s3-curl.pl --id=foo --put=/tmp/log -- $S3_URL/$bucket/log if [ "$nohalt" != "1" ]; then halt fi
筆者紹介
VA Linux Systems Japan 高橋浩和・小田逸郎・箕浦真(MAIL)
各種OS、仮想化、Linux Kernelおよびオープンソースにおける高度な技術と経験を基盤とした、技術コンサルティング、開発、インテグレーションとソフトウェアソリューションを提供。VA Linuxは、2000年9月に設立され、Linux Kernelや仮想化に関するグローバルレベルの技術力をベースにLinuxおよびオープンソース業界を牽引する中核企業として成長を続けている。
- 新着記事
- 特集
- ブログ
- 企画特集
-
エンジニアのためのREHL8まとめ
-
セキュリティの今を知る
-
コスト・運用の壁を崩す!
-
ハイブリッドクラウドとAI
-
未来のセキュリティイノベーターへ
-
連載!プロが語るストレージ戦略
-
企業のリスクマネージメント対策に
-
いまさら聞けない「PPAP」
-
リモート、オフィス、オンサイト
-
連載!プロが語るストレージ戦略
-
ネットワークもサービスとして使う
-
DX時代のアプリケーションセキュリティ
-
IDaaSって何?
-
M365 活用のセキュリティ対策
-
デジタルを当たり前と言えるか?
-
いまあるデータで身近な業務をDX
-
性能の大幅向上を実現!
-
その先へ
-
明日からではもう遅い?!
-
SECCON2020レポート第二弾!
-
部分最適だけではダメ
-
連載!プロが語るストレージ戦略
-
時代が求める生体認証への期待
-
ゼロトラストに向けた道のりを支援
-
クラウド時代に理想のセキュリティ
-
SoRとSoEをつなぐDX推進の要
-
ビッグデータ最前線!
-
第4回CNBFミートアップレポート
-
漫画で解説:IoTはじめの一歩
-
厳しい目が向けられる内部不正
-
次期自治体ネットワーク強靭化へ
-
特集:IT最適化への道
-
次の一手はこれだ!
-
データの散在と非常率運用がネック