さくらのクラウドのオブジェクトストレージを使う(docker + s3cmd)

なかなか便利なDockerイメージができたので共有です。

## 何するもの？

[さくらのクラウド オブジェクトストレージ](http://cloud.sakura.ad.jp/specification/option/#option-content03)の管理を[s3cmd](https://github.com/s3tools/s3cmd)で行うためのDockerコンテナです。

DockerHubで公開しています。
[sacloud/s3cmd](https://hub.docker.com/r/sacloud/s3cmd/)

Dockerコンテナですので、Dockerが動かせるのであればWindows/Linux/Macなどで動きます。

## オブジェクトストレージって?

![オブジェクトストレージとは](http://cloud.sakura.ad.jp/specification/option/images/img_07_storage.png)

引用元:http://cloud.sakura.ad.jp/specification/option/#option-content03

大容量ファイルのバックアップや、静的ファイル(画像やPodcastとか)のキャッシュ付き配信とかできるやつですね。

## 使い方(準備)

まずはさくらのクラウドのコントロールパネルからバケットの作成をしておきます。

以下の手順でバケットを作成し、発行されたキーを控えておきましょう。

#### 1)「オブジェクトストレージ」メニューを選択
![01.png](https://qiita-image-store.s3.amazonaws.com/0/20668/f79fdcef-e8b5-843f-036b-0cc8a900bb65.png)

#### 2) 「バケットの作成」を選択
![02.png](https://qiita-image-store.s3.amazonaws.com/0/20668/17c42b0e-6ff7-7b94-84e9-fae2e1a5e635.png)

#### 3) バケット名を入力
![03.png](https://qiita-image-store.s3.amazonaws.com/0/20668/c1a58639-f7bb-645f-b3b5-aa282b852bef.png)

#### 4) アクセスキー表示
![04.png](https://qiita-image-store.s3.amazonaws.com/0/20668/38c36a1b-3511-7e3c-c8b7-56994054e5aa.png)

## 使い方(起動)

あとはDockerコンテナを起動するだけです。
まずは先ほど控えたアクセスキーを環境変数に設定しておきましょう。

```bash:環境変数設定
$ export ACCESS_KEY=アクセスキーID
$ export SECRET_KEY=シークレットアクセスキー
```

### コマンドの書式
基本は以下の書式で利用します。

```bash:基本的なコマンド書式
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd [s3cmdのサブコマンド] [s3cmd引数]
```

アクセスキーとシークレットキーを環境変数で渡してあげます。
VOLUMEについてはお好みのディレクトリを`/work`などに割り当ててください。
(上の例ではカレントディレクトリを割り当てています)

なお、コンテナの`WORKDIR`は`/work`になっているため、ここに割り当てるとファイルパス指定が楽です。

以下で具体的なコマンド実行例を紹介します。

### バケット一覧の表示

```bash:バケット一覧表示
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd ls
```

`ls`サブコマンドでバケットの一覧が表示されます。

### バケット内のオブジェクト一覧表示

```bash:バケット内オブジェクト一覧表示
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd ls s3://samples
```

`ls`サブコマンドの引数に`s3://バケット名`を指定すると、バケット内のオブジェクトが一覧表示されます。

### ファイルのアップロード(ファイル単位)

```bash:ファイルアップロード
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd put test.txt s3://samples/
```

`put`サブコマンドでファイルのアップロードを行います。

### ファイルのアップロード(ディレクトリ単位)

```bash:ファイルアップロード
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd put -r images/ s3://samples/images/
```

`put`サブコマンドに-rオプションをつけることで再帰的にアップロードを行います。

なお、`sync`サブコマンドでもOKです。

```bash:ファイルアップロード(sync)
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd sync images/ s3://samples/images/
```


### ファイルのダウンロード

```bash:ファイルアップロード
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd get s3://samples/test.txt ./test.txt
```

ファイルのダウンロードは`get`サブコマンドです。

### バケット内のオブジェクトの削除

```bash:削除
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd del s3://samples/test.txt
```

削除は`del`サブコマンドです。

### その他(ヘルプ)

その他のコマンドや、各コマンドのオプションを知りたい時はヘルプを利用してください。

```bash:削除
$ docker run -it --rm -e ACCESS_KEY -e SECRET_KEY -v $PWD:/work \
             sacloud/s3cmd --help
```

## おわりに

Dockerコンテナになっているので、手元のWindowsマシンから直接オブジェクトストレージへアップロード、なんていうのも簡単にできちゃいますね。

なお、オブジェクトストレージでクーポン使えるのか不安だったのですが問題なく使えました。
今月(2016年7月)は[2万円クーポンプレゼントキャンペーン](http://cloud-news.sakura.ad.jp/2016/07/07/summer_campaign_2016/)やってるみたいなんで、この機会に是非このコンテナをお試しください:bangbang: