EC2で運用中のownCloudに、S3をgoofysでゴリ押し連携

## 概要（実装とは関係ないので、読み飛ばしてOK）
うちの会社では、他社とのファイルやり取りのため、ownCloudを運用しています。

EBSの容量もほどほどに、S3を外部ストレージとして設定したことで、ownCloudが*「バックアップ不要の無限ストレージ」*になったのだと勝手に思い込んでいました。

ある日、スタッフから **「ownCloudにアクセスできない」** と連絡を受けました。
原因はEBSの容量不足でした。
**あれ、外部ストレージ設定も行っているのになぜ、、**

どうやらowncloudではユーザー毎にS3バケットを用意して個別に外部ストレージ設定を行う必要があるようです。[^1]

そんな面倒なことしてられない！ということで、今回はEC2にS3をマウントさせ、直接ファイル参照させるゴリ押しの方法で問題解決に挑みます。


## 構成イメージ
### 改修前
- スタッフごとにアカウントを作成
- `AmazonS3`ディレクトリにファイルをアップ

### 改修後
- 社内で共通アカウントを作成
- ルートディレクトリ直下にファイルをアップ

## インストール作業
### fuseのインストール
```sh
$ sudo yum install fuse
```

### Goのインストール
[Goのダウンロードページ](https://golang.org/dl/)からダウンロードを行います。
Goは触ったことがないのでよく分かっていませんが、`Featured downloads`内の`Linux`のURLで良さそうです。

```sh
// インストール
$ sudo wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf /usr/local/src/go1.11.2.linux-amd64.tar.gz
$ sudo rm go1.11.2.linux-amd64.tar.gz

// パス設定
$ export GOROOT=/usr/local/go
$ export PATH=$PATH:$GOROOT/bin
$ env | grep -i go
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/go/bin
GOROOT=/usr/local/go

// バージョン確認
$ go version
go version go1.11.2 linux/amd64
```

### goofysのインストール
```sh
// インストール
$ export GOPATH=${HOME}/go
$ go get github.com/kahing/goofys
$ export PATH=${PATH}:${GOPATH}/bin

// バージョン
$ goofys --version
goofys version 0.19.0-use 'make build' to fill version hash correctly
```


## マウント設定
### AWSの設定
```sh
$ sudo aws configure
AWS Access Key ID [None]: [アクセスキーID]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

### ownCloudのユーザー作成
ownCloudより、共通アカウントとするユーザーを作成します。
ユーザーを作成することで、サーバー内にユーザーディレクトリが作成されます。

### マウント作業
goofysの設定については[こちら](https://qiita.com/bbq-all-stars/items/7828eda324ae4bd23dd8#7-s3%E3%81%AE%E8%A8%AD%E5%AE%9A)を参考にさせていただきました。

```sh
$ sudo su -
# cd /owncloud ←ownCloudがインストールされているディレクトリ
# cd data/user ←作成した共通アカウント

// アカウント内のファイルがあれば削除
# rm -Rf Documents
# rm -Rf ownCloud\ Manual.pdf
# rm -Rf Photos/

// マウント
# id owncloud ←ownCloudの動作ユーザー
uid=33(owncloud) gid=33(owncloud) groups=33(owncloud)
# goofys -o allow_other --uid 33 --gid 33 --cheap xxx-owncloud /owncloud/data/user/files

// チェック
# df -h
Filesystem                   Size  Used Avail Use% Mounted on
devtmpfs                     969M   56K  969M   1% /dev
tmpfs                        979M     0  979M   0% /dev/shm
/dev/a5yhQeLVw3               40G   19G   21G  47% /
xxx-owncloud                 1.0P     0  1.0P   0% /owncloud/data/user ←1ペタバイトが見えた！
```

## ファイルの読み込み
ownCloudでは、対象ディレクトリにファイルをコピペしただけでは利用できないようです。[^2]
ファイルキャッシュを更新する必要があるため、下記コマンドを放ちます。

```sh
sudo -u apache /var/www/owncloud/occ file:scan [ユーザーアカウント]
```

## あとがき
ownCloudはファイル共有もできとても便利ですが、サーバー容量問題やS3連携時の遅さが気になっていました。
需要は不明ですが、うまくいったので同じ問題に悩むシステム管理者に届けば良いなと思います。


## 参考サイト
- https://www.ecninc.co.jp/20170426_amano/
- https://sys-guard.com/post-15459/
- https://qiita.com/0xmks/items/f1d325ce2de6a805c6f7
- https://qiita.com/bbq-all-stars/items/7828eda324ae4bd23dd8
- https://qiita.com/kznr_luk/items/f7f9b8d42d81099a7f1c

[^1]: https://www.ecninc.co.jp/20170426_amano/
[^2]: https://qiita.com/kznr_luk/items/f7f9b8d42d81099a7f1c#模索