Scality S3 Server を試してみる

# 2017/7/11 update

以下で取り上げた、「**S3 Server**」 は **Zenko**になっています。

https://ja.scality.com/about-us/press/scality-zenko-multi-cloud-controller-ja/

https://www.zenko.io/

# S3 Server とは

**AWS S3 に準拠したOSSのオブジェクトストレージ**。詳しくは**"[プレスリリース](http://www.jp.scality.com/press/s3-server/)"**へ。
他にも、S3互換は、**OpenStack Swift3** はもとより**Minio** や **Riak CS** といったものもあるようだが、新しいし、エンタープライズ性、そしてDockerコンテナが提供されているのでまずは使ってみた。まだAWS S3のオペレーションも詳しいわけじゃないので、これを機に慣れてアプリを作ってみたりしたいという目論見もある。

## 特徴
* クラウドアプリの開発・テストには最適
* Node.jsでできてる
* Scality RING と同一コード
* 有償でのエンタープライズサポートもある

# S3 Server 試す
Githubからソースを落としてもできるが、過去Node.jsに泣かされたことがあるのでそこで時間使よりも本質を早く見極めたいためにまずはコンテナで。

## コンテナ起動
Docker 操作は割愛。下記のようにRunする。

```shell-session
$ docker run -d --name s3server -p 8000:8000 scality/s3server
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
633ebc483779        scality/s3server    "npm start"         15 hours ago        Up About an hour    0.0.0.0:8000->8000/tcp   s3server
```
## Cyberduck で操作・確認
[Getting Started](https://s3.scality.com/docs/getting-started) のページにあるように、まずは **Cyberduck** で操作してみる。
自分の手持ちの環境は Windows 7 Home 64bit なので、落としていれる。同ページにはプロファイルを落として使う手順だが、使わない。

> プロファイルは後で結局書き換えちゃうのであんまり意味ない気がするが

Cyberduck を起動して **新規接続** からポップアップされた画面で入力。

![2016-09-18 0-14-18.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/a0157d95-58f4-4262-2f79-0f94ec8c1377.jpeg)

* S3(HTTP) を選択
* サーバ：（ここではDockerのホスト側のIPアドレス）
* ポート：8000ポートがDockerホストからコンテナにフォワードされるので、8000を指定
* アクセスキーID：デフォルトの「accessKey1」
* シークレットキー：デフォルトの「verySecretKey1」

接続を押す。

![2016-09-18 0-19-01.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/d97eb3de-473f-fd04-1254-f0b2e685b8ce.jpeg)

ここまで来たらOK.適当にbucket作ったり、ファイルアップロード・ダウンロードしてみる。操作は直感的にできる。

![2016-09-18 0-17-48.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/50ef1827-5c47-3508-cc4a-d59bab160ddc.jpeg)

## s3cmd で操作・確認

コマンドラインでも確認したいので **s3cmd** を使ってみる。

> はじめ手持ちの Vine Linux で試したがどうもうまく繋がらなかったので、Ubuntu や CentOS7.X にしたら普通にできた。

* s3cmd version 1.6.1
* Ubuntu 14.04 / CentOS 7.2

インストールは pip で。

```shell-session
# pip install s3cmd
```

接続に必要な**cfgファイル**を作る。必要な情報は以下の通り。だいたい見たままの内容。

```shell-session
# cat s3cfg
[default]
access_key = accessKey1
secret_key = verySecretKey1
host_base = 192.168.0.154:8000
host_bucket = 192.168.0.154:8000
signature_v2 = True
use_https = False
```

s3cmd を使ってバケットの中身を見る。

```
$ s3cmd -c s3cfg ls s3://takeshidir
2016-09-16 23:40      7005   s3://takeshidir/Eula.txt
2016-09-16 23:42    231667   s3://takeshidir/zfsonlinux-manila-image.jpg
```

s3cmd のオプションでいろいろ試して、バケット作ったりファイルのアップロード・ダウンロードが確認できた。

```shell-session
console > s3cmd -c s3cfg ls s3://
# 何もない

console > s3cmd -c s3cfg mb s3://tkbk
Bucket 's3://tkbk/' created
console > s3cmd -c s3cfg ls s3://
2017-01-10 06:10  s3://tkbk
# バケット作成

console > s3cmd -c s3cfg put known_hosts s3://tkbk/
upload: 'known_hosts' -> 's3://tkbk/known_hosts'  [1 of 1]
 3106 of 3106   100% in    0s    22.22 kB/s  done
console > s3cmd -c s3cfg ls s3://
2017-01-10 06:10  s3://tkbk
console > s3cmd -c s3cfg ls s3://tkbk
2017-01-10 06:11      3106   s3://tkbk/known_hosts
# バケットにファイルアップロード
```

# 所感
Docker コンテナ使ったので、自由に使えるS3互換のオブジェクトストレージが一瞬の内に手に入る。開発・テストには確かに便利そう。 AWS S3をバックアップ先にする既存のアプリとかもあるので、その宛先をこっちで（自分で）用意しちゃうとかもできそう。


# 参考
## Scality S3 Server
* https://s3.scality.com
* https://s3.scality.com/docs/getting-started
* https://github.com/scality/S3
* https://hub.docker.com/r/scality/s3server/

## s3tools (s3cmd)
* http://s3tools.org/

## Riak CS
* http://docs.basho.com/riak/cs/2.1.1/
* https://github.com/basho/riak_cs

## Minio
* https://www.minio.io/
* https://github.com/minio/minio