NTT CommunicationsのCloudn(クラウドエヌ)のストレージサービスObject Storageを使ってみた。
cloudianを利用したS3互換のストレージ。
awsのs3との違いで最大の売りは転送量課金が発生しないことと
クエリ数による課金が発生しないこと
なので、s3に比べると相当コストを計算できる
堅牢性は99.999999999%(eleven nine)としているのでまぁ大丈夫だろう
保全性は3分散でのデータセンターということだが東日本リージョン内と
思われるため、関東地方での保全だけであればS3に見劣りするのか?
s3もリージョン内での3分散だったはずなので、同等か。
リージョン(cloudnではロケーションと呼んでるみたい)が東日本と西日本、米国と3か所あるけど
Object Storage自体は東日本オンリーなので、どのリージョンから利用しても同じ場所に保存されるってわけwww
S3互換のREST APIが利用可能なので苦労しないだろうが
そこはやはり互換。一筋縄ではいかない部分もあったりする
バケットを作成すると、作成時のアカウントユーザがバケット所有者となる
デフォルトでは、OwnerがFULL_CONTROLになっている
個別にACLをつけるには[ユーザID]|[グループID]として設定する
S3互換でREST APIが使えるって事なので、awscli経由でObject Storageを操作してみることに
アプリエンジニアならば、SDKforPHPとかSDKforJavaScript等の言語にいくんだろうけど インフラ寄りエンジニアなので、シェル上で動作するawscliがしっくりくるんです あ、awscliの中身はPythonですね
Pythonなんですが、CentOS6やScientificLinux6等にインストールされているのは2.6系です
Python3.2以降でないとSNI非対応なんで、ObjectStorageの利用時にちょっと面倒な事があるので
awscli用にPython3系をインストールして利用します
wget http://www.python.org/ftp/python/3.3.3/Python-3.3.3.tgz tar zxf Python-3.3.3.tgz cd Python-3.3.3 ./configure --prefix=/usr/local/python3 make make install wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip unzip awscli-bundle.zip sed -i "s\/usr/bin/env python\/usr/bin/env /usr/local/python3/bin/python3\g" ./awscli-bundle/install ./awscli-bundle/install -i /usr/local/awscli vim /usr/local/awscli/lib/python3.3/site-packages/botocore/data/aws/s3.json "global_endpoint": "str.cloudn-service.com", 9行目を書換える
後は、awscli用のconfigを作成して利用開始すればOK
awscliからs3のバケットに接続するとき、普通に
[bucket名].s3.amazonaws.comに接続しにいく
この時、当然SSL接続するので証明書の確認が発生する
awscliのs3周りの証明書確認は戻ってきた証明書に含まれてる
ホスト名の文字列比較を採用している
で、s3で戻ってくるのは*.s3.amazonaws.comで、OKとなる
一方、ObjectStorageはバケットに接続するとき、
[bucket].str.cloudn-service.comに接続する
この際、クライアントがSNIに対応していないと
戻ってくる証明書に含まれているホスト名が
*.cloudn-service.comになってしまい、NGとなる
クライアントがSNI対応の場合は、*.str.cloudn-service.comが戻るのでOKとなる
ここでのクライアントはPythonに含まれているsslモジュールになる
sslモジュールはPython3.2からSNI対応になっている
こんなん、どこにも記述ないしー
ComputeインスタンスからObjectStorageのバケットをマウントする
利用するのは超有名なs3fs!
ベースにはFUSEも利用しているのでそっちの件も解決しておく
OSはSientificLinuxを利用したけど、CentOSでも同じはず
時間があったら試してみよーと思っている
まずはFUSEのインストール
http://fuse.sourceforge.net/ 最新版(2013/12/17現在)の2.9.3をダウンロード cd /usr/local/src wget http://downloads.sourceforge.net/project/fuse/fuse-2.X/2.9.3/fuse-2.9.3.tar.gz tar zxf fuse-2.9.3.tar.gz cd fuse-2.9.3 インストール ./configure make make install これで/usr/localにインストールされる 共有ライブラリ設定 vi /etc/ld.so.conf.d/local.conf /usr/local/lib64 /usr/local/lib ldconfig ldconfig -v libfuse.soが含まれているかを確認 pkg-config --modversion fuse fuseのバージョンが表示されるかを確認
次にs3fsのインストール
ここで、Cloudn専用にするためのおまじないをしておく(sedの部分です)
デフォルトでSSL接続します
https://code.google.com/p/s3fs/ 最新版(2013/12/17現在)の1.74をダウンロード wget https://s3fs.googlecode.com/files/s3fs-1.74.tar.gz tar zxf s3fs-1.74.tar.gz cd s3fs-1.74 Cloudn仕様に変更 sed -i "s/http:\/\/s3.amazonaws.com/https:\/\/str.cloudn-service.com/g" src/s3fs.cpp sed -i "s/http:\/\/s3.amazonaws.com/https:\/\/str.cloudn-service.com/g" src/s3fs_util.cpp ./configure make make install これで/usr/localにインストールされる システムワイドのパスワードファイルを作成 vi /etc/passwd-s3fs [Access Key]:[Secret Access Key] chmod 640 /etc/passwd-s3fs マウントのテスト /test-cloudnを作成してここにbucketというバケットの下のdataフォルダをマウントする場合 mkdir /test-cloudn s3fs bucket:/data /test-cloudn -o noempty,allow_other
これで、s3fs経由でObjectStorageが利用可能になる
s3fsでマウントする時のオプションは色々悩む
結果的にはallow_otherを付けておけばオケって感じでした。
ちなみに。
マウントしたファイルシステムは容量が256T!!
いつ一杯にできるのだろうか…