S3へのファイルアップロード方法を検討する
S3へのファイルアップロード方法はいくつかある。 それぞれの特徴を検討してみる。
前提
ファイルをアップロードするケースとして、今回は下記2つを想定している。
- サービス管理者はサーバ(またはローカル環境)からファイルをアップロードしたい。
- サービス利用者はローカル環境からファイルをアップロードしたい。
1.マウントしてアップロードする(SFTP等)
マウントしている環境からファイルをアップロードする場合は、利用用途としては良さそうだ。バッチ処理などには向いているのではないだろうか。 ただ、Webサービスなどのように、クライアントからサーバ経由でS3ファイルアップロードとなると、場合によっては無駄な処理を挟むことになる。
方法
S3をマウントしてアプロードする方法で代表的なものは、下記の2つだと考える。
- s3fs
- goofys
こちらについては、様々な記事で検証しているので、そちらを参考にした。
s3fsについては、利用したことがあるので、参考にした記事に大きく頷くものがあった。 使うなら、goofysだろうか。s3fsよりもかなり早そうだし。
2.HTTP(S)でアップロードする
特に制約がなければ、こちらの方法でS3に直接アップロードするのが効率的だと思う。 ただし、利用者を制限する必要がある。(管理者のみ利用可能にする等) CDP:Direct Object Uploadパターンを想像している。
方法
HTTP(S)を利用してアプロードする方法としては、下記の2つがあると考える。
DragonDiskを利用すれば、エクスプローラーで利用するのと同じようにファイルをアップロードするのは簡単そうだ。 素人でもファイルをアップロードできるだろう。 AWS SDKを利用すれば、HTMLのフォームで選択したファイルをS3に直接アップロードすることができるだろう。 AWS SDKについては、別途、試してみる予定。
3.アプリケーションサーバでアップロードする
アプリケーションサーバで何らかの処理をして、ファイルをアップロードする方法。 例えば、画像のサイズを加工してからS3にアップロードする等。 ファイルサイズが大きくなければ、問題ないと思う。rubyであれば、用途に合うgemもあるし。 動画等、ファイルサイズが大きいものであれば、転送時間がかかってしまうので工夫が必要かも。
方法
rubyを利用するのであれば、下記のような便利なgemがある。
- CarrerWave
- fog
- refile
こちらについても、別途、試してみる予定。