Rest Term

DotCloudでのMySQL,Redis,MongoDBの使い方

Pocket

前回のエントリーDotCloudが素晴らしいに引き続きDotCloudで遊びます。

今回はDotCloudの「プログラミング言語やミドルウェアを自由に選べる」という特徴を活かしていろんな組み合わせを試してみたいと思います。

* メニュー
 PHP + MySQL
 Ruby + Redis (Sinatraを利用)
 Python + MongoDB (Flaskを利用)
 

PHP + MySQL

この組み合わせでのシステム開発はなんだかんだ言って仕事で慣れている方も多いのではと思います。もちろんDotCloudでもPHP + MySQLの環境をサポートしています。アプリケーションのデプロイまでの簡単なフローは前回のエントリーに書いたのでそちらを参照してください。

* 環境
 PHP 5.3.2
 MySQL 5.1.41

* dotcloud.yml

ここまでで一度pushして、MySQLの各種情報を確認します。

ウルヴァリンだって。サイクロップスとかローグって名前のクラスタもあるんでしょうか。

次にMySQLに接続します。普通にシェルから操作できます。

testdb という名前でデータベースを1つ作りました。

次はPHPからアクセスしてみます。MySQLへの接続に必要なデータはホームディレクトリの environment.json というファイルに記述されているのでそこから取ってきます。

後はエントリーポイントにアクセスして日付と時刻が表示されたら成功です。PHPを書いたのは半年ぶりくらいですがここまで10分かかりませんでした。とても簡単。今回はPDOを使いましたが、もちろんmysqliも使えます。

Ruby + Redis

この組み合わせに特に意味はないです。なんとなく字面が良かったので、。Redisは最近注目され始めているNoSQLデータベースの1つで、githubやdigg、stackoverflowなど大規模サービスのバックエンドでも利用されています。Redisは文字列型の他にリストやセット、ハッシュなどの様々な型があり、それぞれの型に対するコマンドがatomicに動作するという良い特徴を持っています。また、Tokyo Cabinet/Tokyo Tyrantのようにデータの永続化やレプリケーションも可能です。Redisについては別エントリーのインメモリKVSのRedisについてで少し詳しく調べているのでもし興味があればそちらを参照してください。Ruby + Redisでの開発フローもPHP + MySQLの例とほとんど同じです。ここではWebアプリケーションフレームワークのSinatraも利用します。

* 環境
 Ruby 1.9.2 (Rack 1.3.2)
 Redis 2.2.2
 Sinatra 1.2.6

* dotcloud.yml

ここまでで一度pushして、Redisの各種情報を確認します。

ここまでは特に問題はないかと。次にRuby(Rack)アプリケーションからRedisにアクセスしてみます。接続に必要な情報はMySQLの時と同様に environment.json ファイルから取ってきます。また、Rubyのバージョンは特に指定をしなければ1.9.2になるようなので $LOAD_PATH 等の細かい所に注意してください。

* Gemfile

* config.ru

* redistest.rb

エントリーポイントにアクセスして hello, redis と表示されたら成功です。やはり簡単。Rubyのバージョンに関しては、dotcloud.ymlで指定すれば1.8.x系も使えます。

HerokuもアドオンでRedisは使えるようですが、FREEプランだと「容量5MB, 1データベース, 永続化なし, レプリケーションなし」になっています。DotCloudではどれくらい使えるのかがドキュメントには書いていませんが、もし容量5MBだったらつらいなぁという感じです。アプリケーションのデプロイまでのステップはDotCloudの方が若干少ないので楽だと思います。Redisはalphaではなく既にbetaコンポーネントとして提供されているのでドキュメントもこれから充実してくるはず。

Python + MongoDB

この組み合わせは最近よく見かけるようになってきました。自然言語処理(NLP)屋さんがPythonを好むのはまぁわかるのですが、MongoDBも好きな人が多いのは何か理由があるんですかね。やっぱりドキュメント(文書)としてデータを扱うからでしょうか。とにかくNLPな人達はLLにもミドルウェアにも強くなれて羨ましい限り。一方、画像処理(CV/IM)な世界はPythonを広めるのに必要な土台は十分なのに、NLPな世界と比べるとあまり流行ってない上にデータストアに詳しい人も少ない気がします。CVな人達は動画像ファイルのような巨大データの"管理"ってどうやってるんでしょう、。

すみません、愚痴で話しがそれました。NLPな人達がときどき羨ましくなります(´・ω・`)
Python + MongoDBでの開発フローもこれまでの例と同じで特筆することはありません。ここではWebアプリケーションフレームワークのFlaskも利用します。

* 環境
 Python 2.6.5
 MongoDB 1.8.2
 Flask 0.7.2

* dotcloud.yml

次にPython(WSGI)アプリケーションからMongoDBにアクセスします。普通の構成でファイル作ってpushするだけ。

* requirements.txt (RackアプリでいうGemfileのようなもの)

* wsgi.py

エントリーポイントにアクセスして hello, mongodb と表示されたら成功です。

今回はPerlでの利用例は省略しますが、普通にPSGIアプリケーションを作って、使いたいCPANモジュールを Makefile.PL に書いてpushするだけで動きました。特に難しいところはないかと思います。

DotCloudでWebアプリケーションを開発する手順を整理すると以下のようになります。

 1. dotcloud create でプロジェクトを作る
 2. dotcloud.yml を書く
 4. dotcloud push をしてから dotcloud info でミドルウェアの情報を確認する
 5. シェルから接続確認
 6. アプリケーションから接続確認 (environment.jsonから情報を取得)

また、SSHでDotCloudのサーバに接続するのは簡単です。

ちなみに、nginxなどのサービス監視はmonitで行っているようです。僕もさくらVPSに入れて使っていますが、設定ファイルの書式が綺麗で書きやすいので好きです。

DotCloudと似たようなPaaSでは日本人の方が作ったfluxflexがありますが、そちらはマウスでぽちぽち作業できるのでポップな感じがしますね(公式サイトの作りも)。当然ながら日本語ドキュメントが整備されているので英語が苦手な人はfluxflexの方が使いやすいかもしれません。現時点でのスペック比較はあまり参考にならない気もするので、公式のPVとか見て好きな方を選んだらいいんじゃないかと思います。僕はDotCloudの音の響きで選んだだけなので、。あと、コンポーネントのロードマップが公式サイトに載ってるので印象は良いです。

僕はインフラ寄りのエンジニアなのでアプリケーション開発には詳しくないのですが、これを機にアプリ側の勉強もしてみようと思います。

あわせて読む:

Pocket

 

Tags: , , , ,

Comments

No comments so far.

  • Leave a Reply
     
    Your gravatar
    Your Name