*

CLIによるSwiftへのアクセス(前編) ~ Swiftによるオブジェクトストレージシステムの構築(3)

公開日: 最終更新日:2014/07/23  |  By  |  Object Storage, OpenStack, Swift

by yamagata 2013/1/30

(Swift関連の記事の一覧はこちらをご覧ください)

(2/4:追記  swift CLI を他サーバで使うための設定を加筆しました)

前回サーバ1台での Swift のクラスタを構築して実際に触ることができるようになりました。
この環境を利用して実際にオブジェクトストレージを利用する立場から Swift を見ていきたいと思います。
今回は前回の最後でも使用したSwiftのCLIである swift コマンドについて紹介をしていきたいと思います。
swift コマンドは Essex版までは swiftパッケージの一部に含まれていましたがFolsomからは ptyhon-swiftclient という独立したパッケージに含まれるようになりました。
前回 Swiftクラスタをインストールした環境にはすでにインストールされています。

またptyhon-swiftclient をインストールし、Swift の設定を一部変えることで他のサーバからもSwiftクラスタへアクセスすることができます。
python-swiftclient を単体で別サーバに入れる場合は CloudArchive のサイト を参照してリポジトリを apt に登録し、 apt-get install ptyhon-swiftclient を実行してくたださい。
また /etc/swift/proxy-server.conf に以下の http://~ 以下を追加してください。

[filter:tempauth]

user_test_tester = testing .admin http://<IP_ADDRESS>:8080/v1/AUTH_test

修正後、下記のようにswift のサーバプログラムを再起動してください。

> /etc/init.d/swift-proxy restart

(※) 当初 proxy-server.conf の修正が抜けていたため、加筆修正しました。

1.認証情報の指定

前回以下のように swift CLI を実行してアカウントの情報を取得しました。

> swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing stat
Account: AUTH_test
Containers: 0
Objects: 0
Bytes: 0
Accept-Ranges: bytes
X-Timestamp: 1358479437.89893

swiftコマンドへの引数のうち最後の引数 “stat” は swift CLI のコマンドで、その前までの引数は Swift クラスタにアクセスするための認証情報の指定になります。
まずは認証情報の指定から見ていきたいと思います。
-A  http://... は swift にアクセスするための認証用URLを指定しています。
今回構築したシステムでは http://localhost:8080/auth/v1.0 になります。
ポートの8080 は proxy サーバのポートです。
このクラスタでは TempAuth というテスト用の認証機能を利用しています。
TempAuth は proxyサーバの一部として組み込まれており、proxyサーバにアクセスすることで認証が行われます。
“/auth/v1.0″ は TempAuth の場合の固定のパスです。
次の -U test:tester はユーザ情報を指定します。ユーザ情報は

アカウント名:ユーザ名

で構成されます。一つのアカウントに複数のユーザを紐づけることが可能です。
-K testing はユーザに対応するキー(パスワード) です。
ちなみにTempAuthのアカウント情報は /etc/swift/proxy-server.conf に記述されています。
以上がSwiftにアクセスするために必要な認証情報の指定になります。
それ以降の引数は実際に操作したいコマンドの指定になります。
コマンドとしては以下があります。
  • stat …   アカウント、コンテナ、オブジェクトの情報の表示
  • list … コンテナ、オブジェクトの一覧を表示する
  • upload … ファイルのアップロード
  • post … アカウント、コンテナ、オブジェクトのメタデータの更新
  • download … オブジェクトのダウンロード
  • delete … コンテナ、オブジェクトの削除
以下で各コマンドについて説明をします。
なお以下の説明で認証情報の指定は省略します。
実際にコマンドを叩いて確認するときは上記の認証情報を入れてください。

2. stat コマンド

> swift stat [-v] [container] [object]
stat コマンドはアカウント、コンテナ、オブジェクトの情報を表示するコマンドです。
上記の実行例のように stat 以後に何も指定しなかった場合はアカウントの情報を表示します。
表示内容は以下のようになります。

Account: AUTH_test
Containers: 0
Objects: 0
Bytes: 0
Accept-Ranges: bytes
X-Timestamp: 1358479437.89893

  • Account … アカウント情報名。認証時のアカウントとは別にデータとしてのアカウント情報を指し示す名前です。認証時のアカウント <acccount> に対して自動的に AUTH_<account> という名前になります。
  • Containers … このアカウントが保有するコンテナ数
  • Objects … このアカウントが保有するオブジェクト数
  • Bytes … このアカウントが保有するオブジェクトの総容量
  • Accept-Ranges … HTTP の Accept-Ranges レスポンスヘッダ。常に bytes を返します。
  • X-Timestamp … アカウントが作成された時の日時です。
なお

>swift stat -v

-v を付けると StorageURL(アカウントのパス) と Auth Token(認証の結果として得られるトークン)も表示させることができます。この辺については次回くらいいに説明したいと思います。

StorageURL: http://127.0.0.1:8080/v1/AUTH_test
Auth Token: AUTH_tk26d0314f6eef41c88e8b6cdd02d5f4be
Account: AUTH_test
….
….

なお-v オプションはアカウント情報の表示の時のみ有効のようです。
stat の引数としてコンテナ名を指定するとそのコンテナについての情報を表示します。

> swift stat folder1
Account: AUTH_test
Container: folder1
Objects: 1
Bytes: 81
Read ACL:
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Timestamp: 1358492197.10240

アカウントの表示と異なるものがいくつかあります。 Read ACL, Write ACL がコンテナに対するACL の設定情報で、Sync To, Sync Key が Container to Container Synchronization というコンテナのミラーリング機能に利用される情報です。
stat の引数に コンテナ名、オブジェクト名を指定するとそのオブジェクトの情報が取得できます。

>swift stat folder1 solo.rb
Account: AUTH_test
Container: folder1
Object: solo.rb
Content Type: application/x-ruby
Content Length: 81
Last Modified: Wed, 23 Jan 2013 05:12:23 GMT
ETag: 9176aced627504ba78eb375c0504a218
Meta Mtime: 1358494484.28
Accept-Ranges: bytes
X-Timestamp: 1358917943.59079

ア カウント名(Account), コンテナ名(Container)、オブジェクト名(Object) および、そのコンテンツの Content Type、 オブジェクトのサイズ(Content Length)、最終更新日(Last Modified) 等が表示されます。ETag はオブジェクトの md5 値です。
Meta Mtime はメタデータ(属性情報) の一つを表しており Mtime が属性情報の名前です。Mtime はデータの中身が変わった時の日時を示しているようです。
中身の変わらないデータを再アップロードしても Mtime は変わりません。

3. list コマンド

> swift list [-d DELIMITER | --delimiter=DELIMITER] [-p PREFIX | --prefix=PREFIX] [container]
list コマンドはコンテナの一覧、または指定されたコンテナ内のオブジェクトの一覧を表示します。
コンテナ名を指定しない場合はコンテナの一覧を表示します。
> swift list
folder1
folder2
test1

コンテナを指定するとそのコンテナの保有するオブジェクトの一覧が表示されます。

> swift list folder1
solo.rb

-d および -p はリスティング対象を調整するのに使われます。これらのオプションについては次の upload コマンドで説明します。

4. uploadコマンド

> swift upload [-c|--changed] [-S <size> | --segment-size=<size>] [--leave-segments] container  file_or_dir [file_or_dir] …
upload コマンドはファイルをアップロードしてオブジェクトとして格納します。
引数としてアップロード先のコンテナ名とアップロードするファイルまたはディレクトリを複数指定することができます。
-c を指定するとデータ更新時にデータが変更されている場合だけアップロードが実行されます。

4.1 ディレクトリのアップロードと list の表示

ファイルのアップロードはすでに前回行っていますのでディレクトリのアップロードを見てみたいと思います。
まず以下のようなサブディレクトリ subfolder1と、ファイル aaa.txt ~ ddd.txt を用意します。

> find ./
./
./subfolder1
./subfolder1/ccc.txt
./subfolder1/ddd.txt
./aaa.txt
./bbb.txt

上記ディレクトリをコンテナfolder3 にアップロードします。

> swift -A http://localhost:8080/auth/v1.0 -U test:tester -K testing upload folder3 ./
bbb.txt
subfolder1/ddd.txt
aaa.txt
subfolder1/ccc.txt

list コマンドで folder3 の一覧を見てみます。

> swift list folder3
aaa.txt
bbb.txt
subfolder1/ccc.txt
subfolder1/ddd.txt

よく見ると “subfolder1/ccc.txt” というオブジェクト名のオブジェクトがあります。
Swift にはサブコンテナはありません。したがって sbufolder1 以下にあったファイルはこのように subfolder1/ が頭についたオブジェクト名でとして登録されます。
ここで list コマンドの説明で省いた -d と -p を使ってみます。
まず list コマンドに -d ‘/’ を付けると以下のように表示されます。

> swift list -d ‘/’ folder3
aaa.txt
bbb.txt
subfolder1/

subfolder1 以下のオブジェクトが表示されずに subfolder1/ だけが表示されます。

また -p ‘subfolder1′ を付けると以下のように subfolder1 以下のオブジェクトのみが表示されます。

> swift list -p ‘subfolder1′ folder3
subfolder1/ccc.txt
subfolder1/ddd.txt

このように -d や -p を使うことで仮想的にサブフォルダを実装するため処理を支援することができます。

4.2 -S (–segment-size)

-S を指定するとそのサイズ以上のオブジェクトを分割してアップロードします。
まず 10KBのファイルを作成します。

> dd if=/dev/urandom of=data10k.dat bs=1024 count=10

作成したファイル data10k.dat を 1024byte 毎に分割してアップロードします。

> swift -v -A http://localhost:8080/auth/v1.0 -U test:tester -K testing upload -S 1024 folder3 data10k.dat
data10k.dat segment 0
data10k.dat segment 2
data10k.dat segment 5
data10k.dat segment 8
data10k.dat segment 9
data10k.dat segment 4
data10k.dat segment 7
data10k.dat segment 1
data10k.dat segment 3
data10k.dat segment 6
data10k.dat

上記のように分割してアップロードされます。
分割されたファイルをダウンロードするときは分割ファイルを個別にダウンロードする必要はありません。分割指定していない普通のオブジェクトと同じようにダウンロードできます。

> swift download -o /tmp/data10k.dat folder3 data10k.dat

元のファイルと比較をするとたしかに同じファイルとなっています。

> md5sum ./data10k.dat /tmp/data10k.dat
ddf3fe622f68e698e7c398eb6ac30f3e  ./data10k.dat
ddf3fe622f68e698e7c398eb6ac30f3e  /tmp/data10k.dat

分割ファイルの仕組みですが、これは分割したデータを別オブジェクトとして保管し、もとの名前(ここでは data10k.dat) のオブジェクトとしてマニフェストファイルをアップロードするという方法がとられています。
詳細は別の機会に説明したいと思います。
Swift では一つのオブジェクトのサイズは最大5GB までと制限されていますが、このように分割してアップロードをすることで5GBを超えるオブジェクトも取り扱うことが可能です。

長くなってきたので残りのコマンドについては次回説明します。

関連記事

docker_all

OpenStack Summit in Paris (Day3)

by Ikuo Kumagai (@kumagai19o) 少し遅れましたがOpenStack S

記事を読む

summittokyo

OpenStack Summit Tokyoのセッションへの投票をお願いします。

OpenStack Summit Tokyo のセッションへの投票が行われています。 弊研究所でも

記事を読む

no image

Swiftの概要 ~ Swiftによるオブジェクトストレージシステムの構築(1)

(Swift関連の記事の一覧はこちらをご覧ください)はじめまして、山縣と申します。私はビットアイル総

記事を読む

dhcloudbuilding-121017105917-phpapp02.pdf-EF-BC-881_29-E3-83-98-E3-82-9A-E3-83-BC-E3-82-B7-E3-82-99-EF-BC-89

OpenStack Summit in San Diego 3日目

ビットアイル総研の長谷川です。今日は、Summit の3日目です。本日行われたセッションのなかから興

記事を読む

no image

CLIによるSwiftへのアクセス(後編) ~ Swiftによるオブジェクトストレージシステムの構築(4)

by yamagata 2013/2/7(Swift関連の記事の一覧はこちらをご覧ください)前回の

記事を読む

no image

Pythonライブラリによる Swift の操作 ~ Swiftによるオブジェクトストレージシステムの構築(6)

by Yamagata 2013.03.14(Swift関連の記事の一覧はこちらをご覧ください)前回

記事を読む

no image

Grizzlyの新機能(1) ~ Swiftによるオブジェクトストレージシステムの構築(8)

by You Yamagata 2013.04.24(Swift関連の記事の一覧はこちらをご覧くださ

記事を読む

ODT2015logo

OpenStack Days Tokyo 2015

来る2月3日,4日にはOpenStack Days Tokyo 2015が開催されます。 日本国内

記事を読む

no image

Swift 1.11.0 CHANGELOG の翻訳

by You Yamagata 2013.1.23(Swift関連の記事の一覧は インデッ

記事を読む

top

HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆さん参加されましたでしょうか。

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑