EC2の固定IPを使ってみる

Posted filed under ServerSide.

 初期状態では、一つのインスタンスに、EC2の中だけで使えるPrivate IPと、外部からアクセスするためのPublic IP(グローバルアドレス)が割当たってます。  インスタンス自体への割当IPはPrivate IPですが、上位のルータに1:1のNATがあり、これによって外部からPublic IPでアクセスできる様になっています。  今までの、Private IPとPublic IPに加えて、今度は固定IPのグローバルアドレスが割り当てられるElastic IPを選択出来るようになりました。 これは、Public IPと同じ様に、外部からアクセスするためのグローバルアドレスですが、AWSアカウント毎に発行されるので、インスタンスの再起動などによって代わる事はありません。  これを使えば、EC2で最大の問題点であった、「インスタンスを再起動するとIPアドレスが代わる」という問題から解放されます。  Elastic IPを使うために、EC2 Toolsのアップデート。Amazon EC2 Command-Line ToolsからEC2 API toolをダウンロードしてインストール。  自分のアカウントに割り当てられたElastic IP(EC2の固定IP)を確認。 $ ec2-allocate-address ADDRESS 75.101.xxx.xxx 現在のアカウントで起動しているインスタンスを確認。 $ ec2-describe-instances RESERVATION r-e729dbxx 036701054xxx default INSTANCE i-876892xx ami-7034d119 ec2-67-202-xxx-xxxcompute-1.amazonaws.com domU-12-31-38-00-xx-xx.compute-1.internal running nobody 0 m1.small 2008-03-24T04:17:43+0000 us-east-1b  Elastic IPのアドレスと、割り当てたいインスタンス番号(i-から始まる番号)を指定して、ec2-associate-addressを実行します。 これを実行すると、今までのPublic IPではアクセス出来なくなります。インスタンスに割り当てられるグローバルアドレスはPublic IPかElastic IPのどちらかになります。 $ ec2-associate-address -i i-876892xx… Read more »

HyperEstraierで個人データを検索する[まだ調べ中]

Posted filed under Ruby on Rails.

mixiでも使われているって言う全文検索エンジンHyperEstraier。mixiの膨大な件数を処理するぐらいだから相当スケーラビリティもあるだろなーとおもいつつ、SQLだけで全文検索できちゃうMySQL+Sennaが便利なんで、そっちばっかり使ってました。 MySQL+Senna(Triton)も、PostgreSQL+Senna(Ludia)も、属性付きで検索した場合、Sennaで全文検索してから、その答えをSQLで絞り込みを行っているようで、たとえば、個人のメッセージを保存しているテーブルを検索した場合など、属性の値が多い場合には、かなり効率が悪くなる事が見えてました。 本当は、メッセージみたいなものは、個人ごとにインデックスをもって処理するべきなんだろうなと思っていて、SennaでやるかHyperEstraierでやるか迷いつつ、ぐぐっていたところ、HyperEstraierがどんぴしゃりな機能を持っているのを発見しました。 疑似ノードマスタという機能で、大量のインデックスを保持することが容易にできるようです。 この疑似ノードマスターの話は、おいおい調べるとして、まずはRailsからHyperEstraierを触ってみます。 というほどのものではなく、acts_as_searchableというプラグインを使えば、ほぼ意識することなく、HyperEstraierを扱えるようです。 このプラグインは単純な全文検索だけでなく、属性検索などもサポートしており、通常の用途であれば、これで事が足りそうです。 # estcmd create -tr -attr @user_id num messages class Message < ActiveRecord::Base acts_as_searchable :searchable_fields => [:subject, :body], :attributes => {:user_id => :user_id} end と指定する事で、下記の様に特定ユーザのメッセージだけ検索するという事ができます。 Message.fulltext_search(“masuidrive”, :attributes => “user_id NUMEQ %d” % User.find_by_name(‘guest’)) このプラグインで、注意が必要なのは、検索対象として指定したカラムのsetterメソッドが定義されている点です。 この場合は、subject=, body=, user_id=が上書きされます。 プラグインの実行タイミングなどから、define_method_chainは使えないようなので、これらのメソッドを上書きするときは、そのメソッドの中から値を更新するときに、write_attributeの代わりに、write_changed_attributeを呼ぶ様にしてください。 以上、バットノウハウでした。 属性検索の演算子は、ユーザーズガイドの検索条件式を見てください。通常の=演算子などは使えません。

どこでも使えるメモサービス始めます – Sticka.jp

Posted filed under Products, Ruby on Rails.

 Award on Railsの締め切りまで、1ヶ月を切りました。  初めは、自分用に作ってあった、全文検索機能付きブックマークを公開しようかと思っていたのですが、Adobe AIRを使った、新しいアイディアを思いついたので、急遽新しいサービスを構築しはじめました。  と言っても、アイディア自体は2002年に書いたメモが元で、一度はRuby+Win32APIで実装したのですが、Windows自体の利用自体を辞めてしまったので、長らく放置したままになってました。  新しいサービスの技術的な部分でメドもたってきたので、9月の上旬にはクローズドベータテストを開始しようと思います。  興味のある方は、http://sticka.jp/へメールアドレスを登録していただけると、クローズドベータを開始するときにメールを送らせていただきます。お手間ですが、ぜひとぞよろしくお願いします。