内容IBM cloudで提供しているIBM Cloud ObjectStorage(ICOS)の使い方です。
LinuxからCLI(awscli)とFilesystem in Userspace(goofys)で利用してみました。
参考記事
- IBM Cloud ObjectStorage Document
- Qiita:goofysを使ってAmazon LinuxにS3をマウントする
- goofys:a high-performance, POSIX-ish Amazon S3 file system written in Go
ICOS(IBM Cloud Object Storage)とは
AWSのs3互換のオブジェクトストレージです。(旧cleversafe社の買収製品)
IBM cloudのストレージサービスの1つに組み込まれました。
IBM cloudでは従来のOpenstack SwiftベースのオブジェクトストレージとともにICOSが加わったことになります。
ストレージクラスや料金体系については[こちら]を参照してください。
ICOSのオーダー
IBM cloudポータルからのメニューパスは次の通りです。
[IBM cloudコンソール]->[インフラストラクチャー]->[オブジェクトストレージ]
[オブジェクトストレージの注文]をクリックします。
料金体系が表示されます。画面下部にある[注文]をクリックしてオーダー完了です。
(従量課金ですので気にせずオーダーします。)
作成されたアカウントをクリックして、[資格情報の表示]をクリックします。
[ACCESS KEYS]の欄にあるアクセスキーID
、秘密アクセス・キー
をメモします。
この情報は後述のアクセスツールで使用します。
CLI(awscli)でのアクセス
awscliをインストールします。
RHEL7での例です。
$ sudo yum install python2-pip
$ sudo pip install awscli
アカウント情報を登録します。
先ほどメモした資格情報アクセスキーID
、秘密アクセス・キー
を入力します。
regionへはus-geo
を入力します。
2017/09執筆時点では日本国内のリージョンはありません。最寄りのusとしてます。
$ aws configure
AWS Access Key ID []: ****************
AWS Secret Access Key []: [****************
Default region name []: us-geo
Default output format []: json
アクセス確認でls
参照コマンドを実行しました。
endpointはデフォルトでawsさんを参照してしまいますので、明示が必要です。
$ aws s3 ls --endpoint=https://s3-api.sjc-us-geo.objectstorage.service.softlayer.net
2017-08-31 04:42:26 my-bucket
ICOSのエンドポイントとストレージクラス
[ストレージクラス]
ストレージクラスはリージョンとクラスで示されます。
バケットを作る際に利用します。
リージョン | Standard | Vault | ColdVault | Flex |
---|---|---|---|---|
us-geo | us-standard | us-vault | us-cold | us-flex |
us-east | us-east-standard | us-east-vault | us-east-cold | us-east-flex |
us-south | us-south-standard | us-south-vault | us-south-cold | us-south-flex |
eu-geo | eu-standard | eu-vault | eu-cold | eu-flex |
ストレージクラスはバケットを作成する際に--region
パラメタで指定してください。
$ aws s3 mb s3://my-vault --region=us-valut --endpoint=https://s3-api.sjc-us-geo.objectstorage.service.softlayer.net
make_bucket: my-vault
その他の操作はaws s3と同様となります。
Filesystem in Userspace(goofys)でマウントしてアクセス
goofysはs3fs同様にマウントするためのツールです。
s3fsより高速との噂と実績なので試してみました。
goofysのインストール
- golangパッケージをインストールし、goofysをビルドします。
golangは1.7以上が必要ですが、RHEL7ではgolang v1.6.xが提供されているため、
ディストリビューション外の goリポジトリから最新golangをインストールします。
$ sudo rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO
$ sudo curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo
$ sudo yum clean all
$ sudo yum install golang git fuse
GOホームディレクトリの作成
$ sudo mkdir /usr/local/go
$ sudo su -
# export GOPATH=/usr/local/go
# export PATH=$PATH:$GOPATH/bin
# go get github.com/kahing/goofys
# go install github.com/kahing/goofys
ビルドされていることを確認
# ls -l /usr/local/go/bin/goofys
-rwxr-xr-x. 1 root root 13915583 9月 7 03:53 /usr/local/go/bin/goofys
誰でも利用できるように/usr/local/binへsymlinkを作成
# ln -sf /usr/local/go/bin/goofys /usr/local/bin/goofys
# type goofys
goofys はハッシュされています (/usr/local/bin/goofys)
マウントの仕方
手動でマウントする例は以下となります。
# goofys --endpoint=https://s3-api.sjc-us-geo.objectstorage.service.networklayer.com my-bucket /ext/icos
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda2 25G 4.7G 19G 21% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 8.4M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/xvda1 240M 119M 109M 53% /boot
tmpfs 354M 0 354M 0% /run/user/0
my-bucket 1.0P 0 1.0P 0% /ext/icos <--1ペタで表示される。(※使用量は見えないです)
通常のファイル通り、findコマンドも利用できます。
# find /ext/icos -ls
1 4 drwxr-xr-x 2 root root 4096 9月 7 04:41 /ext/icos
4 1488790 -rw-r--r-- 1 root root 1524520960 9月 7 02:39 /ext/icos/WATSON.tar
5 3207610 -rw-r--r-- 1 root root 3284592640 9月 7 03:17 /ext/icos/plyabook.tar
#
自動マウントさせる場合(/etc/fstab)
fstabへ以下の様に記述します。
/usr/local/bin/goofys#my-bucket /ext/icos fuse _netdev,--endpoint=https://s3-api.sjc-us-geo.objectstorage.service.networklayer.com 0 0
mount
#sudo mount /ext/icos
# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda2 25G 4.7G 19G 21% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 1.8G 8.4M 1.8G 1% /run
tmpfs 1.8G 0 1.8G 0% /sys/fs/cgroup
/dev/xvda1 240M 119M 109M 53% /boot
tmpfs 354M 0 354M 0% /run/user/0
my-bucket 1.0P 0 1.0P 0% /ext/icos <--1ペタで表示される。(※使用量は見え
注意 API endpointの不調や切り替えが発生した場合や、クライアント側の過負荷等に依存し、マウントが切れる可能性があるため、別途、監視や自動リカバリの実装が必要です。