まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:swift

IBM Bluemix からは(Swift 互換の)Object Storage サービスが提供されています:
2016051701


このオブジェクトストレージのサービスインスタンスは他の(外部の)システムにマウントして使うことができます。その一例として、Linux(CentOS) から CloudFuse を使ってマウントする方法を紹介します(2016/May/17 時点での情報です)。

まずは Bluemix にログインし、Object Storage サービスを1つ作成するために、カタログのサービス一覧から "Object Storage" を選択します(現在は「ストレージ」カテゴリ内にありました):
2016051702


Object Storage サービスに関する説明が紹介されるので内容を確認してください:
2016051701


このタイミングで利用する Object Storage サービスの料金プランを選択する必要があります。無料プランでは 5GB まで、標準プランでは使用量の上限はなく 1GB あたりで 4.2 円と、アウトバウンド転送 1GB につき 9.45 円がかかります。好きな方を選んでインスタンスを「作成」します:
2016051703


Object Storage サービスが作成できたらダッシュボードからそのサービスインスタンスを選択します:
2016051704


Object Storage サービスの画面が表示されたら、左ペインで「サービス資格情報」を選択します。すると右ペインにサービス資格情報として、JSON フォーマットのテキストが表示されます:
2016051705


おそらく以下のようなフォーマットのテキスト情報になっているはずです。このうち青字で記述した auth_url, userId, password の内容が後で必要になるのでメモしておきます:
{
  "credentials": {
    "auth_url": "https://identity.open.softlayer.com",
    "project": "object_storage_XXXXXXXX_XXXX_XXXX_XXXX_XXXXXXXXXXXX",
    "projectId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "region": "dallas",
    "userId": "(userId)",
    "username": "Admin_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "password": "(password)",
    "domainId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "domainName": "NNNNNN"
  }
}


Object Storage のインスタンスは用意できました。ではこれを Linux のファイルシステムとして(リモート)マウントしてみましょう。

マウント元になる Linux システムを用意します。今回は CentOS 6(64bit) で試しました。また Object Storage をマウントするためのツールとして CloudFuse を用いました。CentOS 上に CloudFuse を導入する手順は以前のブログで紹介したことがあるのでこちらを参照ください:
SoftLayer の Object Storage をサーバーインスタンスにマウントする

CloudFuse が準備できたら、ログインユーザーのホームディレクトリ直下に以下の3行の内容で .cloudfuse というテキストファイルを作成します(赤字はコメント):
username=(userId)  # 上記の userId の値
api_key=(password) # 上記の password の値
authurl=https://identity.open.softlayer.com/v3/  # 上記の auth_url の値に '/v3/' を追加

これで準備完了です。実際に Object Storage をマウントする前に、df コマンドで現在のファイルシステム状況を確認しておきましょう:
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root
                      8.3G  3.5G  4.5G  44% /
tmpfs                 499M  144K  499M   1% /dev/shm
/dev/vda1             477M  152M  301M  34% /boot

では以下のコマンドを実行して、Bluemix の Object Storage を(この例では /mnt 以下に)マウントしてみます:
# cloudfuse /mnt

正しくマウントできているか、再度 df コマンドで確認します。ちゃんと /mnt 以下にマウントできているようです。この状態になれば Object Storage の中身を /mnt ディレクトリ以下と見なして直接読み書きすることが可能になります:
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root
                      8.3G  3.5G  4.5G  44% /
tmpfs                 499M  144K  499M   1% /dev/shm
/dev/vda1             477M  152M  301M  34% /boot
cloudfuse             8.0T  7.5M  8.0T   1% /mnt

マウント状態を解除するには umount コマンドを実行します:
# umount /mnt

Bluemix の Object Storage の有用な使いみちが実現できそうです。なお、Object Storage サービスに関してはこちらのドキュメントも参照ください:
https://console.ng.bluemix.net/docs/services/ObjectStorage/index.html



先週、IBM BluemixObject Storage サービスがベータを卒業して正式サービスになりました:
2015022101


SoftLayer 上に用意された Swift と呼ばれる標準的なオブジェクトストレージ機能を Bluemix を通じて提供するものです。5GB であれば無料サービスとして利用できます:
2015022102


では、この Bluemix 上の Object Storage サービスをクライアントから使う方法を紹介します。


1. Swift ツールの導入

このサービスを Linux(CentOS) から実際に利用するまでの手順を紹介します。このサービスを使うには swift と呼ばれるツール(swiftclient)が必要です。まずはこのツールを導入しましょう。

swift の導入は pip を使って行います。最初にこの pip を導入する必要がありますが、pip の導入に必要なライブラリをあらかじめまとめて導入しておきます:
# yum install fuse fuse-libs fuse-devel libattr-devel gcc gcc-c++ kernel-devel libxslt-devel

ここで導入した fuse ライブラリを読み込んでおきます:
# modprobe fuse

次に pip の導入に必要な Python 3 を導入します。Python 3 は yum ではインストールできないため、PUIAS から導入します。まずはそのための GPG Key をインストールします:
# cd /etc/pki/rpm-gpg/
# wget -q http://springdale.math.ias.edu/data/puias/6/x86_64/os/RPM-GPG-KEY-puias
# rpm --import RPM-GPG-KEY-puias

次に /etc/yum.repos.d/puias-computational.repo ファイルを以下の内容で作成します:
# vi /etc/yum.repos.d/puias-computational.repo

(以下を作成して保存)
[PUIAS_6_computational] name=PUIAS Computational Base mirrorlist=http://puias.math.ias.edu/data/puias/computational/$releasever/$basearch/mirrorlist gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puias

作成したリポジトリファイルを使って yum で Python 3 一式をインストールします:
# yum install python3 python3-devel python3-libs python3-setuptools

Python 3 がインストールできていれば pip がインストールできます:
# wget -O - https://bootstrap.pypa.io/get-pip.py | python3

これでやっと pip の導入ができました。ではこの pip を使って keystoneclient と swiftclient をインストールします:
# pip install python-swiftclient
# pip install python-keystoneclient

ここまでの手順で swift コマンドが使えるようになっているはずです。


2. Object Storage サービスの追加と、環境変数の設定

Bluemix 上で Object Storage サービスを追加し、その資格情報を確認します:
2015022103


環境変数 VCAP_SERVICES の内容は以下の様な JSON 形式のテキストになっているはずです。これらのうち、赤字部分をメモしておきます(後で使います):
{
  "Object-Storage": [
    {
      "name": "Object Storage-7d",
      "label": "Object-Storage",
      "plan": "Free",
      "credentials": {
        "auth_url": "https://identity.open.softlayer.com",
        "project": "object_storage_(project)",
        "projectId": "(projectId)",
        "region": "dallas",
        "userId": "(userId)",
        "username": "Admin_(username)",
        "password": "(password)",
        "domainId": "(domainId)",
        "domainName": "(domainName)"
      }
    }
  ]
}

ここで取得した接続情報を Swift クライアント(Linux)の環境変数に(例えば /etc/bashrc などに)設定します:
export OS_USER_ID=(userId)
export OS_PASSWORD=(password)
export OS_PROJECT_ID=(projectId)
export OS_AUTH_URL=https://identity.open.softlayer.com/v3
export OS_REGION_NAME=dallas
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_VERSION=3

↑上の赤字部分は接続情報のものを使い、青字部分は接続情報には含まれていないのですが、上記のように書き足してください。/etc/bashrc に書いた場合は再ログインするなどして、この環境変数が有効になった状態にしてください。これで swift を使う準備が整いました。


3. swift コマンドを実際に使ってみる

Object Storage はコンテナと呼ばれるフォルダ単位で利用します。現在のコンテナ一覧を確認してみましょう。以下のコマンドを実行します:
# swift list

初めて実行した時には(コンテナが存在していないので)何も表示されないはずです。コンテナを作成するにはコンテナ名を指定して post コマンドを実行します。以下の例では dotnsf-container というコンテナを作成しています:
# swift post dotnsf-container

このコマンド実行後に再度コンテナ一覧を確認すると、作成した dotnsf-container が表示されるはずです(緑字が出力結果):
# swift list
dotnsf-container

次にコンテナの中身を確認します:
# swift list dotnsf-container

これもコンテナ作成直後に実行した段階では(中身がないので)何も表示されないはずです。 ではこのコンテナにローカルファイル(以下の例ではカレントディレクトリの abc.txt を指定してアップロードしてみます:
# swift upload dotnsf-container abc.txt

この後に再度コンテナの中身を確認すると、アップロードしたファイルが追加されていることが確認できます:
# swift list dotnsf-container
abc.txt

コンテナ内のファイルは以下のコマンドでカレントディレクトリにダウンロードできます:
# swift download dotnsf-container abc.txt

コンテナ内のファイルが不要になった場合、以下のコマンドでコンテナから削除できます:
# swift delete dotnsf-container abc.txt
abc.txt

一通りのコンテナ/ファイル操作コマンドが利用できそうです。



(参考)
https://www.ng.bluemix.net/docs/services/ObjectStorage/index.html





このページのトップヘ