« 2010年8月 | トップページ | 2011年6月 »

2011年5月

2011年5月17日 (火)

Amazon EC2でubutu 10.04にruby 1.9.2の環境の独自AMIを作成する

ruby 1.8.7より処理が早いruby 1.9.2を使いたいが、ubuntu 10.04のruby1.9は1.9.05なので、
使うのが怖い。
なので、1.9.2をソースからコンパイルすることになるのだが、ec2-ami-toolsという
AMIを作成するパッケージがruby1.8に依存しているため、ec2-ami-toolsのdependsを
修正し、また、1.9との互換性がない箇所を修正し、再度パッケージ化し、install
した。
ちょっと面倒だったので、その手順。

ubuntu 10.04 32bitのインスタンスを起動
ami-4c0fa44d


起動したインスタンスにsshで接続

sudo vim /etc/apt/sources.list
#multiverseを追加
(例)
--------------------------------------------------------
[修正前]
deb http://archive.ubuntu.com/ubuntu/ lucid main universe
--------------------------------------------------------
--------------------------------------------------------
[修正後]
deb http://archive.ubuntu.com/ubuntu/ lucid main universe multiverse
--------------------------------------------------------

sudo apt-get update
sudo apt-get install gcc
sudo apt-get install libssl-dev
sudo apt-get install libreadline-dev
sudo apt-get install libyaml-dev
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p180.tar.bz2
tar jxvf ruby-1.9.2-p180.tar.bz2
cd ruby-1.9.2-p180
./configure
make
sudo make install
sudo aptitude download ec2-ami-tools
mkdir -p ec2-ami-tools_1.3-45758-0ubuntu1.1_all/DEBIAN
dpkg-deb --extract ec2-ami-tools_1.3-45758-0ubuntu1.1_all.deb ec2-ami-tools_1.3-45758-0ubuntu1.1_all
dpkg-deb --control ec2-ami-tools_1.3-45758-0ubuntu1.1_all.deb ec2-ami-tools_1.3-45758-0ubuntu1.1_all/DEBIAN

vim ec2-ami-tools_1.3-45758-0ubuntu1.1_all/DEBIAN/control

6c6
< Depends: ruby, libopenssl-ruby, curl
---
> Depends: curl

vim ec2-ami-tools_1.3-45758-0ubuntu1.1_all/usr/lib/ec2-ami-tools/lib/ec2/platform/linux/image.rb

256c256
< fstab_content.each do |s|
---
> fstab_content.each_line do |s|

vim ec2-ami-tools_1.3-45758-0ubuntu1.1_all/usr/lib/ec2-ami-tools/lib/ec2/amitools/util.rb

19c19
< (0..19).inject("") {|ident, n| ident+(?A + Kernel.rand(26)).chr}
---
> (0..19).inject("") {|ident, n| ident+("A".bytes.to_a[0] + Kernel.rand(26)).chr}

vim ec2-ami-tools_1.3-45758-0ubuntu1.1_all/usr/lib/ec2-ami-tools/lib/ec2/amitools/xmlbuilder.rb

182c182
< rexml_node.text = value
---
> rexml_node.text = value.dup

rm ec2-ami-tools_1.3-45758-0ubuntu1.1_all.deb
dpkg-deb --build ec2-ami-tools_1.3-45758-0ubuntu1.1_all
sudo dpkg -i ec2-ami-tools_1.3-45758-0ubuntu1.1_all.deb

awsのX.509証明書をec2上の/mntに置く

cd /mnt
sudo ec2-bundle-vol -d /mnt --privatekey pk-*****.pem --cert cert-*****.pem --user ${Acount key ID} --fstab /etc/fstab
sudo ec2-upload-bundle --bucket ${バケット名} --manifest image.manifest.xml --access-key ${Access key ID} --secret-key ${Secret Access key ID}

他のマシン

ec2-register ${バケット名}/image.manifest.xml -n ${イメージ名}

| | コメント (0) | トラックバック (0)

2011年5月15日 (日)

第3回 MongoDB勉強会に行ってきた

第3回 MongoDB勉強会 に行ってきました。
参加者が100名を超す盛況ぶり。
私も前回までのレポート(「第1回 MongoDB JP & CouchDB JP 合同勉強会 in Tokyo」活動報告  「第2回 MongoDB JP 勉強会 in Tokyo」レポート ) を読んで、是非参加したくなり、今回が初参加。
回を追うごとに参加者数が増えていっているところがすごい。

MongoDB 全機能チュートリアル & v1.8-1.9 新機能チュートリアル

2時間ぶっとうし!!
途中でダレることなく、最後までやりとうした@doryokujinさんすごい!!
聞く側としても、現場にいる緊張感により、集中力を持続させてくれるので、
こういうことができるのが、勉強会の強みなのかもと思った。
Capped Collectionsの存在を知ることができてラッキーだった。

ソーシャルアプリのプロトタイプ制作にMongoDBを活用

「スキーマレスでDB意識せず開発ができるので、開発が早いぜ!!」
「でも、トランザクションがなく、油断するとデータの不整合が起きやすいぜ!!」

じゃあ、開発時は、MongoDBにして、リリース時にはMySQLにすればいいとこどり
なんじゃね!?
というのは、MongoDBを使ったアプリ開発経験者にとっては、すごくわかる話。

アクセス負荷等を考えるより、まず作ってみてその企画が楽しいかどうかを
素早く判定できるのが一番大事と仰ってたのは、本質的にはその通りと思う。

リリース前のMySQLに置き換える際に、ついでにアクセス負荷も意識して作り
直せば、効率がいい気もする。

ただ、私は他社が作ったアクセス負荷を考慮されていないリリース前のソーシャル
ゲームを、パフォーマンスを上げるためにデータ構造から作り直し、かなり時間が
かかった経験があるので、その点が不安。

アプリ開発者にとって、MongoDBの最大のメリットは、スキーマレス。
sharding等の後の機能はおまけ
」と仰ってたのは、慧眼だと思う。

今後の展開が楽しみ。

MongoDBチューニング

動作中のクエリのプロファイルを取れたり、killするコマンドがあるとは知らなかった。勉強になった。

MongoDBを使用したモバイルゲーム開発について

実運用でアクセス数も多いモバイルサイトをshardingなしで問題なくさばけて、
データ不整合の問題も起こっていないと聞いて、心強くなった。
shardingはつらいことが多い(Sharding and Replica Sets Illustrated  Tachy with MongoDB) ので、なくてもいいよねというのが分かったのはうれしい。
開発の課題のあるあるネタ($setをつけないで、updateしてデータ破壊,mongo client経由で
数値(int)をセットすると、勝手に小数点つき(double)に変換される等)は、まったく同じこと
を経験したことがあるので笑ってしまった。

まとめ

MongoDBを活用している人には、2つのクラスタがあることが判明した。

データ解析クラスタ
アクセスログ等を解析するツールとして活用。shardingマンセー。

ソーシャルアプリクラスタ
仕様が変わりやすいアプリのDBとして活用。スキーマフリーマンセー。

私自身は、MongoDBでソーシャルアプリを開発しているソーシャルアプリクラスタです。
データの不整合が連発し、トランザクションのないMongoDBを憎み、別にsharding使わないんだったらMySQLでいいじゃんと思った時期が私にもありました。
ただ、慣れるにしたがって、仕様変更にすぐに対応できるスキーマフリーの開発の便利さ
に虜になっている自分に気づきました。

今の懸念としては、ユーザが少ないため、保守等を考えるとなかなか導入できないこと
です。
勉強会が盛り上がって、MongoDBユーザが増えることを願っています。
私自身もデータの競合の防ぎ方やembededの使いどころ等経験をまとめて、発表してフィードバックを得られるようになろうと思います。

最後になりますが、会場を提供してくださった皆様、準備、後片付けをしてくださった
皆様本当にありがとうございました。

| | コメント (0) | トラックバック (0)

« 2010年8月 | トップページ | 2011年6月 »