Herokuを使ってサービスを作ると、どうしてもストーレッジの問題にぶつかります。Herokuはいいと思うのですが、ストーレッジがないのです。実は知られているようで、結構な数の人が知らなかった落とし穴でもあるようなのですが、Herokuでは画像が保存できません。OSとPythonやRubyなどの言語とデータベースは提供してくれるのですが、画像は保存できないのです。私はこれを知らなかったので、かなりびっくりしてしまいました。。
そこで仕方がなくAWSを始めることにしたのですが、このAWSのs3というサービスがかなり良いので、かえってよかったと思っているところです。
ご存知の方も多いと思いますが、HerokuはPaaSと呼ばれるWebサービスの一種で、ハードディスクのサーバーと、UbuntuなどのOS、それにデータベースやPythonなdの言語、各種のライブラリをまとめて提供してくれます。
私は開発環境がMacなので、自分のところのサーバーもMacでやれば、本番と開発環境が一緒なのでやりやすいのではないかと、色々迷っていました。パーミッションなどの扱いやすさは、手元で実際にいじれる実機のサーバーの方がわかりやすいですし、コストも実際にサーバー機を買ってしまってもそれほどのものではありません。ですが、Herokuなどのクラウドを使うと、12factor.netなどに書いてある設計上のデザインパターンに自動的に従うことになると言うのに惹かれてHerokuでやってみることにしました。やはりサービスが段々大きくなっていった時にメンテナンスが楽な方がいいですものね。それとやっぱり自己流でやるよりは、信頼性と実績の面からもで世の中で通用しているものでやってみる方が良いのかなと思いました。
s3の良いところは、まず、値段です。1GBあたりの料金は一月で約3円。データが100GBでも月300円です。私の事務所では領収書の画像データを仕訳データに翻訳して、画像と仕訳を一緒に整理して保存するサービスを提供しようと思っていますが、iPhoneで撮影した写真だとデータのサイズは約3MBです。ですので300枚保存してこれでやっと1GBで、これで、3円です。100GB使おうと思ったら、30,000枚の写真データを保存することが出来ますが、これで小さい会社なら20社分は行けるのではないでしょうか?
次に、信頼性。これは、Amazonの説明によると99.999999999%の信頼性があるのだそうです。 小数点以下に、9が9個つくので、データが消失する可能性は、1000万分の1と言うことでしょうか。自分のところでサーバーを持ってデータを保存するより、よほど高い信頼性です。使わない手はないですね。
その他、Pythonのboto3をはじめ、RubyやJava、.NETなどの他、おそらく、ほとんどの言語でファイルや閲覧権限等を簡単に操作できるモジュールが用意されています。プログラムの側から簡単にファイルをアップしたりダウンロードできたりするのです。ここだけ見ても、自分でファイルの保存や権限の設定をプログラム的に作るよりよほど簡単で確実です。ソフトウェアの世界に限りませんが、「巨人の肩に乗る」と言う言葉があります。
こう言う新しいもの(全然新しくないけど)はお金を出してもどんどんやってみる方がいいですね。