皆さん、こんにちは。ろくに思い出もできないまま夏が終わりそうなGMOクラウドの縞子です。今年一番夏を感じた瞬間は、職場で花火の音を聞いたときでしょうか。たぶん神宮の花火だと思いますが、ビルの隙間から花火を探しているうちに終わっていました。
さて、今回はs3fsコマンドを使用してALTUSオブジェクトストレージ(※現在提供終了)を仮想サーバー上にマウントし、サーバーのディスクとして活用する方法を紹介します。s3fsコマンドとは、FUSE(Filesystem in Userspace)(※)を利用してAWS S3のバケットを Linux または Mac OS X 上にマウントさせるツールです。
ALTUS オブジェクトストレージはAWS S3との互換性が高いためs3fsコマンドを実行でき、同じALTUS上に作成した仮想サーバー(以降VMとします)の Linux OSに対し、オブジェクトストレージをマウントさせることができます。
マウントするとVMのDATAディスクのように利用できますので、いつものLinux上でファイルを操作する手順でさまざまなデータ(ログ、画像や動画データなど)をオブジェクトストレージへ保存することができます。
ALTUSオブジェクトストレージは無制限で利用でき、かつ障害に備えた3分散保存形式のため、データ保全性に優れています。ログ出力量が多いシステムや動画などサイズの大きなデータを多く利用する環境でしたら、オブジェクトストレージを活用されることをお勧めします。
※fuse… Unix系オペレーティングシステムのローダブル・カーネル・モジュールの一種で、一般ユーザーがカーネルコードを修正することなく独自のファイルシステムを作成できる機能を提供する。実際にはハードディスク上のデータとは無関係のオブジェクトをファイルシステムとして見せるために使われることが多い。(参考: ウィキペディア - Filesystem in Userspace)
I. 仮想サーバーとオブジェクトストレージの準備
今回はALTUS Basic シリーズにVMを作成し、このVMにオブジェクトストレージをマウントします。なお、Isolate シリーズに作成したVMでも、同様の手順でオブジェクトストレージのマウントは可能です。
Ⅰ-Ⅰ. 仮想サーバーの作成
ALTUS Basic シリーズでは、コンソールまたはポータルの「設定管理」画面からVMを作成できます。それぞれの手順は、以下のサポート サイトを参照ください。
コンソールからVMを作成する場合: コンソールガイド – 仮想サーバーの作成
ポータル画面からVMを作成する場合: ALTUSポータルガイド – 設定管理メニューについて
今回用意したVMは、次の設定で作成しました。
・ホスト名: TestUbuntuSvr01
・テンプレート:Ubuntu12.0464bit 20140926
・サーバープラン: Custom Server (CPU 2 コア、メモリ 2048 MB)
・rootディスク サイズ: 20.00 GB
・アフィニティグループ: 指定しない
・ファイアーウォール通信許可設定: 受信規則にて TCP 22 番ポートを開放(※1)
・VMにグローバル IP アドレスを割り当てる(※2)
※1. ファイアーウォールの受信規則の設定は、コンソールガイド - セキュリティグループの設定 - STEP1 受信規則の追加を参照ください。
※2. IP アドレスの割り当ては、コンソールガイド -スタティックNATの設定を参照ください。
Ⅰ-Ⅱ. オブジェクトストレージの利用を開始
ALTUS オブジェクトストレージを利用するためには、ポータルの「コンソール」画面からオブジェクトストレージ用のアカウントを有効化する必要があります。オブジェクトストレージ アルとタスかるガイドを参照し、アカウントを有効にしてください。
Ⅱ. オブジェクトストレージを仮想サーバーの Linux OSにマウントする
オブジェクトストレージをVMのOSにマウントするためには、次の手順を実行します。
1.VMにs3cmd(※1) およびs3fsコマンドをインストール
2.s3cmdでオブジェクトストレージにバケット(※2)を作成する
3.s3fsでオブジェクトストレージのバケットをVMにマウントする
※1.s3cmdは、AWS S3の操作が可能なツールです。S3 互換性のあるオブジェクトストレージに対し、このツールを利用してバケットを作成します。
※2. バケット(bucket)とは、ファイルなどのオブジェクトを保存する入れ物(バケツ)を意味します。
以下に各手順について詳細を紹介します。Ubuntu上で行った手順を示しますが、CentOS6系でもほぼ同様の操作が実行可能です。UbuntuとCentOSと操作が異なる箇所では、それぞれ分けて記述して行きます。
Ⅱ-Ⅰ .s3cmdとs3fsコマンドのインストール
作成したVMにターミナルエミュレーターを使用してSSHでログインします。SSHログイン手順の詳しい手順は、SSHエミュレーターを利用したアクセスを参照ください。
また、以降のVM上の操作ではroot権限が必要となりますので、rootアカウントへの昇格が可能なユーザーでログインしてください。
ALTUS のUbuntuテンプレートでは初期設定として、アカウント名: cloud、パスワード: "VM作成時に発行されるパスワード"でログインでき、rootアカウントへの昇格が可能です。
(参考: よくあるご質問(FAQ) -UbuntuサーバーにSSHでログインができない。)
1. 準備(サーバー上のパッケージ更新)
インストールされている各種パッケージのバージョンを更新するため、VM上で次のコマンドを実行します。
Ubuntu12.xの場合
$ sudo -s
# apt-get upgrade -y
CentOS6.xの場合
$ sudo -s
# yum update -y
※補足: sudo -sコマンドでrootアカウントに昇格します。このときパスワードを求められますので、VMにSSHログインした際のアカウントのパスワードを入力してください。
2.s3cmdのインストール
rootアカウントに昇格したまま次のコマンドを実行します(以降、# で始まるコマンドはすべてrootアカウントで実行していることを意味します)。s3cmdはpythonのsetuptoolsを利用してインストールするため、このsetuptools自体をあらかじめインストールします。
Ubuntu12.xの場合
# apt-get install -y python-dateutil python-magic wget
# cd
# wget https://bootstrap.pypa.io/ez_setup.py -O - | python
# wget http://downloads.sourceforge.net/project/s3tools/s3cmd/1.5.2/s3cmd-1.5.2.tar.gz
# tar xvfz s3cmd-1.5.2.tar.gz
# cd s3cmd-1.5.2
# python setup.py install
# which s3cmd
/usr/local/bin/s3cmd //<-- コマンド パスが表示されましたらs3cmdのインストールは成功です
CentOS6.xの場合
# yum install -y python-dateutil python-magic wget
# cd
# wget https://bootstrap.pypa.io/ez_setup.py -O - | python
# wget http://downloads.sourceforge.net/project/s3tools/s3cmd/1.5.2/s3cmd-1.5.2.tar.gz
# tar xvfz s3cmd-1.5.2.tar.gz
# cd s3cmd-1.5.2
# python setup.py install
# which s3cmd
/usr/bin/s3cmd //<-- コマンド パスが表示されましたらs3cmdのインストールは成功です
3.s3fsのインストール
s3fsのソースコードをダウンロードしコンパイルします。コンパイルに当たって、必要な各パッケージをあらかじめインストールします。
Ubuntu12.xの場合
# apt-get install -y automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev
libssl-dev libxml2-dev make pkg-config
# cd
# git clone https://github.com/s3fs-fuse/s3fs-fuse.git
# cd s3fs-fuse
# ./autogen.sh
# ./configure
# make
# make install
# which s3fs
/usr/local/bin/s3fs //<-- コマンド パスが表示されましたらs3fsのインストールは成功です
上記のコマンド手順は GitHub - s3fs-fuse/s3fs-fuseのマニュアルを参考にしました。マニュアル上ではUbuntu14.04での手順として紹介されていますが、Ubuntu12.04上でも実行可能です。
CentOS6.xの場合
s3fsのインストールにはfusever.2.8.4以上が必要です。CentOS6系では、yumコマンドによる2.8.3 より新しいバージョンのインストールが不可のため、既にインストールされていたfuseパッケージを削除し、fuseのソースコードをダウンロードしてコンパイルします。
# yum remove -y fuse fuse* fuse-devel
# yum install -y gcc libstdc++-devel gcc-c++ curl curl* curl-devel libxml2 libxml2*
libxml2-devel openssl-devel mailcap
# cd
# wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.4/fuse-2.9.4.tar.gz
# tar xvfz fuse-2.9.4.tar.gz
# cd fuse-2.9.4
# ./configure prefix=/usr
# make
# make install
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig
# modprobe fuse
# pkg-config --modversion fuse
2.9.4 //<-- このようにバージョンが表示されましたら、fuseのインストールは成功です。
fuseのインストールが成功しましたら、次のコマンドを実行しs3fsをインストールします。
# yum install -y automake libcurl-devel git
# git clone https://github.com/s3fs-fuse/s3fs-fuse.git
# cd s3fs-fuse
# ./autogen.sh
# ./configure
# make
# make install
# which s3fs
/usr/local/bin/s3fs //<-- コマンド パスが表示されましたらs3fsのインストールは成功です
Ⅱ-Ⅱ .s3cmdでオブジェクトストレージ上にバケットを作成する
オブジェクトストレージにバケットを作成するに当たって、次の手順(※)でs3cmdコマンドの設定を行います。この際、オブジェクトストレージのアクセスキーとシークレットキーが必要となりますので、ALTUS ポータルの「コンソール」画面にてあらかじめ確認してください。確認手順は、こちらのサポートページを参照ください。
※こちらの手順は、s3cmdのご利用方法を参考にしています。
次のコマンドを実行します。
# s3cmd --configure
…
Access Key []: // 確認したアクセスキーを入力
Secret Key []: // 確認したシークレットキーを入力
Default Region[US]: // 「Enter」を入力
…
Encryption password: // 「Enter」を入力
Path to GPG program [/usr/bin/gpg]: // 「Enter」を入力
…
Use HTTPS protocol [No]: // 「Enter」を入力
…
HTTP Proxy server name: // 「Enter」を入力
…
Test access with supplied credentials? [Y/n] // 「n」を入力
Save settings? [y/N] // 「y」を入力
エンドポイントはコマンドでは設定できないため、次のコマンドによりs3cmdの設定ファイルを編集し設定します。なお、今回はALTUS環境内からのアクセスとなりますので、エンドポイントとして「inter-st.gmocloud.com」を指定します。もしALTUS以外(物理サーバーや、ローカルの仮想環境など)からアクセスする場合は、エンドポイントに「st.gmocloud.com」を指定します。
# cd
# cp .s3cfg .s3cfg.org
# sed -i 's/s3.amazonaws.com/inter-st.gmocloud.com/g' .s3cfg
# sed -i 's/signature_v2 = False/signature_v2 = True/g' .s3cfg
# grep inter-st.gmocloud.com .s3cfg
(次のように表示されたらOKです)
host_base = inter-st.gmocloud.com
host_bucket = %(bucket)s.inter-st.gmocloud.com
# grep signature_v2 .s3cfg
(次のように表示されたらOKです)
signature_v2 = True
s3cmdの使用準備が整いましたので、まずオブジェクトストレージへのアクセス確認のため、次のコマンド(バケット一覧表示コマンド)を実行します。
# s3cmd ls
バケットがまだ無いため最初は何も表示されませんが、エラーが表示されなければ成功です。ではバケットを作成しましょう!今回はバケット名を「testubuntusvr01data」として作成しますが、任意の名前を指定できます。
# s3cmd mb s3://testubuntusvr01data
Bucket 's3://testubuntusvr01data/' created
エラーが表示されず、上のように表示されましたら成功です。念のためもう一度バケット一覧を表示します。
# s3cmd ls
2015-08-31 05:24 s3://testubuntusvr01data
バケットが作成されていますね。ちなみに不要になったバケットは、次のコマンドで削除できます(※ただし、バケット内が空でないと削除できません)。
# s3cmd rb s3://{バケット名}
Ⅱ-Ⅲ. s3fsでオブジェクトストレージのバケットをVMにマウントする
作成したバケットを、VMの Linux OSにマウントします。マウントしますと、VM上で通常のディスクのようにアクセスでき、さまざまなデータを保存できるようになります。
まず、オブジェクトストレージのマウント先ディレクトリを作成します。ここでは /mnt/objstorage/data としますが、任意に指定可能です。
# cd /mnd
# mkdir -p objstorage/data
さらにオブジェクトストレージにアクセスするために、ファイルにアクセスキーとシークレットキーを保存します。保存するファイルについて、ここでは /etc/s3fs/s3fspasswdとして作成しますが、こちらも任意の名前およびパスで作成できます。
また、作成したファイルはセキュリティ保持のため、rootアカウント以外に読み書きできないように権限を設定します。
# cd /etc
# mkdir s3fs
# cd s3fs
# echo "{アクセスキー}:{シークレットキー}" > s3fspasswd
# chmod 600 s3fspasswd
# ls -l s3fspasswd
-rw------- 1 root root 62 Aug 31 14:42 s3fspasswd //rootアカウントにのみ rw 権限を付与しています
# cat s3fspasswd
({アクセスキー}:{シークレットキー} が正しく表示されましたらOKです)
Ubuntu12.xの場合
バケットをOS起動時に自動マウントするため次のコマンドを実行し /etc/fstab に設定を追加します。なお、fstab はシステムが使用するファイルですので、間違って編集した場合も元に戻せるように、下記のように cp コマンドで必ずバックアップを取るようにご注意ください。
# cd /etc
# cp fstab fstab.org
# echo "s3fs#testubuntusvr01data /mnt/objstorage/data ¥
fuse nonempty,allow_other,¥
url=http://inter-st.gmocloud.com,passwd_file=/etc/s3fs/s3fspasswd 0 0" >> fstab
VMからログアウトした後、コンソール上でVMを再起動します。VMの再起動手順はコンソールガイド - 仮想サーバーの再起動を参照ください。
VMが再起動した後、再びターミナルエミュレーターでVMへログインします。
次のコマンドでマウント状態を確認します。
$ sudo –s
# mount
…
s3fson /mnt/objstorage/data type fuse.s3fs(rw,allow_other) //<-- この表示がありましたらマウントは成功です
CentOS6.xの場合
CentOS6系の場合は、上記のようにfstabに自動マウント設定を追加しても、OS起動時にfuseがロードされていないためマウントは失敗します。そのため、OSを再起動したときは次のコマンドを実行し、手動でマウントしてください。
$ sudo -s
# modprobe fuse
# s3fs testubuntusvr01data /mnt/objstorage/data -o nonempty -o allow_other -o url=https://inter-st.gmocloud.com -o passwd_file=/etc/s3fs/s3fspasswd
# mount
…
s3fson /mnt/objstorage/data type fuse.s3fs(rw,nosuid,nodev,allow_other) //<-- この表示がありましたらマウントが成功しています
試しにマウントした /mnt/objstorage/data 内にディレクトリとファイルを作成します。
# cd /mnt/objstorage/data
# mkdir test
# echo this is test. > test/readme.txt
# ls -l test
total 1
drwxr-xr-x 1 root root 0 Aug 31 15:12 test
# cat test/readme.txt
this is test.
ディレクトリとファイルは正常に作成されており、通常のディスクと同じように読み書きができました。
Ⅲ. 最後に
とりあえずこのブログを書くという夏休みの宿題を完成させることができて、ほっとしました。
よろしければ、お使いのVMのログやデータ保存先として、ぜひオブジェクトストレージをご利用ください!