EC2とS3を使ってオンラインストレージサービスを30分で作る


DropBoxを企業単位で使おうと思った時に、1ユーザー当たり毎月¥1,500掛かってしまうのはスタートアップ企業にとっては痛い出費ですよね。

というわけで、EC2とS3というAWSの素晴らしいサービスをつかって、DropBoxのようなオンラインストレージサービスを構築してみることにしました。
使うのは[ownCloud](https://owncloud.org/)というWebアプリーケーションです。

# EC2にサーバーを立てる

まずは、AWS マネジメントコンソールのサービスからEC2を選択し、EC2の管理画面から`[ナビゲーション]->[キーペア]->[キーペアの作成]`よりキーペアを作成してください。

次に、AWS marketplaceにある[ownCloud powered by owncloud.jp](https://aws.amazon.com/marketplace/pp/B00F8I7IXG/ref=srh_res_product_title?ie=UTF8&sr=0-3&qid=1380794974138)にアクセスすると、インストール画面が表示されるので、Continueボタンを押してください。

すると、こんな起動設定画面が表示されます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/37435/b45704da-43a4-3097-37c1-2597199f604c.png" width="700" />

ここで注意してほしいのが、最新のver.8.1をダウンロードするとハマります。
必ずver.8.0を選択してください（2015/07/28現在）。

Regionは東京リージョン、インスタンスタイプはとりあえず`t1.micro`にします。
Key Pairは、先ほど作成したキーペアを設定しておきます。

そして、Launch with 1-Clickのボタンを押すとEC2インスタンスが作成されます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/37435/85649277-3997-6f2a-5f4d-0dafeb8a1d23.png" width="500" />


あとは起動したインスタンスに割り当てられたパブリックDNS（ec2-XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.comみたいなの）にアクセスするだけでownCloudのログイン画面が表示されます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/37435/59c96b05-802f-c925-66ed-3b42767b8f46.png" width="700" />

ID/PASSはそれぞれ、admin/EC2のインスタンスIDでアクセスできます。
**実はこれだけでオンラインストレージサービスがEC2上に構築できています。**

ただし、このままではownCloudのメニューにある管理ページで下記の警告が表示されたままになっていたり、S3を使えていなかったりします。
なのでもう少しだけ設定していきます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/37435/f1c895c2-e406-c7d3-d5e4-06f5b949885f.png" width="500" />

# EC2をセットアップする

marketplaceのownCloudは設定が足りていないので、初期設定をします。

```sh
# yumを最新に更新
yum update -y

# remiのレポジトリ追加
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6.rpm

# 日本時間に変更
sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime
# 日本時間になっているか確認
date

# 日本語設定に変更
vi /etc/sysconfig/i18n

# 起動時のタイムゾーンを日本時間に変更
vi /etc/sysconfig/clock
```

```diff:/etc/sysconfig/i18n
- LANG=en_US.UTF-8
+ LANG=ja_JP.UTF-8
```

```diff:/etc/sysconfig/clock
- ZONE="UTC"
+ ZONE="Asia/Tokyo"
```



# SSLを設定する

さすがにhttpはマズイかなーと思うので、[こちら](http://akiyoko.hatenablog.jp/entry/2015/05/24/234148)を参考にオレオレSSLを設定します。

```sh
# mod_sslではなくmod24_sslをインストールすることに注意
yum -y install mod24_ssl

openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

cd /etc/httpd/conf
mkdir ssl.crt
mkdir ssl.key -m 700
mv /root/server.crt ssl.crt/
mv /root/server.key ssl.key/
chmod 400 ssl.key/server.key
vi /etc/httpd/conf.d/ssl.conf
```

```diff:/etc/httpd/conf.d/ssl.conf
- #DocumentRoot "/var/www/html"
- #ServerName www.example.com:443
+ DocumentRoot "/var/www/html/owncloud"
+ ServerName www.example.com:443

- SSLCertificateFile /etc/pki/tls/certs/localhost.crt
+ SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt

- SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
+ SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
```

# PHPのdefault_charsetをUTF-8にする

php.iniのdefault_charsetがコメントアウトされているので、コメントを外します。

```sh
vi /etc/php.ini
service httpd restart
```

```diff:/etc/php.ini
- ;default_charset = "UTF-8"
+ default_charset = "UTF-8"
```

これで先ほど出ていた警告はすべて消えているはずです。

# IAMユーザーを作成する

IAMとはAWSにおけるユーザーとそのアクセス権限を管理できるサービスなのですが、今回はownCloud用のユーザーを作成します。
AWS マネジメントコンソールのサービスからIAMを選択すると、IAMの管理画面が表示されるので、`[ナビゲーション]->[ユーザー]->[新規ユーザーの作成]`よりユーザーを作成してください。
作成後は必ず **認証情報のダウンロード** をしておいてください。

次に、作成したユーザーに権限を付与します。
IAMユーザー一覧で作成したユーザーをクリックすると、ユーザーの設定が可能になります。
[ポリシーのアタッチ]より、今回はAdministratorAccessを付与します（とりあえず）。

# S3にバケットを作成する

AWS マネジメントコンソールのサービスからS3を選択するとバケット一覧が表示されるので、[バケットを作成]よりownCloud用のバケットを作成してください。

<img src="https://qiita-image-store.s3.amazonaws.com/0/37435/7fb63f6d-76b2-f669-a888-e550ae799fc1.png" width="500" />

# 外部ストレージにS3を指定する

あとはownCloudにログインし、右上のメニューから管理ページに進み、外部ストレージの設定をすればOKです。

アクセスキー、シークレットキーはIAMでユーザーを作成した際にダウンロードした認証情報内に書かれているものを、またバケット名はさきほどS3で作成したものを設定してください。
緑ランプがつけば正しく設定できています。

<img src="https://qiita-image-store.s3.amazonaws.com/0/37435/0763920e-fa49-0b7f-7e51-841f95b68927.png" width="550" />

あとはownCloudにファイルをアップしてS3にそのファイルが反映されていれば、すべての設定および確認作業は完了です！

# まとめ

簡易的に説明しているので、他にも設定しなければいけないことはたくさんあります。
Elastic IPを使ってIPを固定化したり、IAMの権限を制限したりだとか。
ただ、ある程度使いこなせてきてからでも十分変更可能な内容ではあるので、ぜひ導入を検討してみてはどうでしょうか。

あと、ownCloudの[デスクトップアプリ](https://owncloud.com/products/desktop-clients/)を使えば、DropBoxのようにフォルダをマウントしてくれるので、各人のPCにインストールしておくといいかもです。