Cloud Foundryのクラウド管理用DBのER図を出力させてみた。

PaaSであるCloud Foundryには、ユーザやデプロイされたアプリ、アプリの使うサービス(ここで言うサービスとは、MySQLやMongoDB、RabbitMQなど)を管理する、CCDB(Cloud Controller Database)と呼ばれるデータベースがある。
Cloud ControllerはRails3.0で実装されているので、そのCCDBをRails ERDというgemでER図にしてみたのが上の図。
Appが複数のServiceをServiceConfigを通じて持てることや、ServiceBindingを通じてServiceをBind/Unbindできることが、ER図を見れば簡単にわかる。
ただ、Rails ERDを通すと、User has many Services になるのはなぜなんだろう...
手書きで何度も書いたけど、これからはこれを印刷してデスクに貼ることにした。Rails ERD++。(ただし、内部で利用しているGraphvizが現状、Max OS X Lionで動かすにはちょっとめんどいことには注意)
- -
なんか@u1がブログ書いてて自分も書かないといけないと思ったので更新。30分のお仕事。githubへのバグやIssueの報告もがんばります。
Cloud Foundryを複数ホストで動かした。
前回の続き。Cloud Foundryが4ホストで動いたのでその設定を書く。ネタ元はこちら→How to install Cloud Foundry on multiple hosts
これでやっと、「それMicro Cloud Foundryでもできるわー」と言われなくなる。
各ホスト共通のインストール手順
cloudfoundry / vcapのInstall、Step2までを実行。
必要ないサービスまで入ってしまう(例えば、mysqlはホスト4しか必要ない)が、各ホストをVMのコピーにより作成したので今回は手抜き。
各サーバ個別の設定手順
作業は全て、vcapのインストールされる ~/cloudfoundry/vcap で行う。
ホスト1 (Router)
mbusのアドレスをホスト2(cloud_controller)のアドレスに変更する。
% vim router/config/router.yml -mbus: nats://localhost:4222 +mbus: nats://172.16.0.2:4222 % ruby bin/vcap start router router : RUNNING
ホスト2 (Cloud Controller, Health Manager)
localhostをホスト2自身のアドレスに変更する。
% vim cloud_controller/config/cloud_controller.yml -local_route: 127.0.0.1 +local_route: 172.16.0.2 -mbus: nats://localhost:4222/ +mbus: nats://172.16.0.2:4222/ % vim health_manager/config/health_manager.yml -local_route: 127.0.0.1 +local_route: 172.16.0.2 -mbus: nats://localhost:4222/ +mbus: nats://172.16.0.2:4222/ % ruby bin/vcap start cloud_controller health_manager cloud_controller : RUNNING health_manager : RUNNING
ホスト3 (DEA)
local_routeを自身のアドレスに、mbusのアドレスをホスト2(cloud_controller)のアドレスに変更する。
% vim dea/config/dea.yml -local_route: 127.0.0.1 +local_route: 172.16.0.3 -mbus: nats://localhost:4222/ +mbus: nats://172.16.0.2:4222/ % ruby bin/vcap start dea dea : RUNNING
ホスト4 (Services)
ip_routeを自身のアドレスに、mbusのアドレスをホスト2(cloud_controller)のアドレスに変更する。mysql以外についても(たぶん)同様。
% vim mysql/config/mysql_gateway.yml -ip_route: localhost +ip_route: 172.16.0.4 -mbus: nats://localhost:4222 +mbus: nats://172.16.0.2:4222 % vim mysql/config/mysql_node.yml -ip_route: 127.0.0.1 +ip_route: 172.16.0.4 -mbus: nats://localhost:4222 +mbus: nats://172.16.0.2:4222
また、mysql_gatewayがcloud_controllerと通信するために、ホスト2の cloud_controller/config/cloud_controller.yml に書かれたexternal_uri(デフォルトだとapi.vcap.me)の名前解決が必要。
% sudo vim /etc/hosts
+ 172.16.0.2 api.vcap.me
また、vcapのインストールスクリプトでmysqlをインストールした場合、デフォルトたとlocalhostにしかbindしていないので、設定変更と再起動が必要。(こんなところではまった、、)
% sudo vim /etc/mysql/my.cnf
[mysqld]
+bind-address = 0.0.0.0
% sudo /etc/init.d/mysql restart
% ruby bin/vcap start mysql
mysql_gateway : RUNNING
mysql_node : RUNNING
動作確認
トンネルはrouterであるホスト1に掘る。
% sudo ssh -L 80:172.16.0.1:80 kawag@172.16.0.1 -N
mysqlを利用する適当なRailsアプリをvmc pushすると、ホスト4にDBが作られる。
% rails -v Rails 3.0.9 % vmc target api.vcap.me % rails new cftest -d mysql % cd cftest % bundle install --path vendor/bundle % rails generate scaffold post title:string content:text % vmc push cftest Would you like to deploy from the current directory? [Yn]: Application Deployed URL: 'cftest.vcap.me'? Detected a Rails Application, is this correct? [Yn]: Memory Reservation [Default:256M] (64M, 128M, 256M, 512M or 1G) Creating Application: OK Would you like to bind any services to 'cftest'? [yN]: y The following system services are available: 1. mongodb 2. mysql 3. neo4j 4. redis Please select one you wish to provision: 2 Specify the name of the service [mysql-b3e5f]: Creating Service: OK Binding Service: OK Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (129K): OK Push Status: OK Staging Application: OK Starting Application: OK
今後の予定
cloud_controllerが複数あったら勝手に負荷分散するの?とかその辺がよくわからないので調べたい。そろそろ気合入れてソース読まないとしんどそうな感じ。
Cloud FoundryでPaaS環境をローカルに構築した。
RubyWorld Conferenceでも発表のあった、Cloud FoundryでPaaS環境をローカルに構築してみた。
現状、1VMでの構築までで、特に目新しい内容もないので、リンク中心のまとめ。先人に感謝です。(-人-)
ローカルでの構築方法
自前で構築する方法と、予め構築されたVM・Micro Cloud Foundryを使う方法がある。
最終的に複数サーバで構築したかったため、現状、Microは試していない。
自前で構築
vcap(VMware Cloud Application Platformの略)をインストールする。
自前で構築と言っても、githubに丁寧な解説とインストールスクリプトがあるので、割と簡単。
github cloudfoundry / vcap
Cloud Foundry PaaSを自宅のPCで動かす
インストールスクリプトと、その中で呼ばれる vcap_setupにより、java, php, python, ruby(+rvm, rubygems), nginx, nodejs, rabbitmq, mysql, postgresql, mongodb, redis などがインストールされる。量が多いので時間が結構かかる。(so just keep a loose eye on it. だそうな。)
aptを使う方法
Howto: Install the CloudFoundry Server PaaS on Ubuntu 11.10
Ubuntu Server 10.04 64bit版 および Ubuntu Desktop 11.04 32bit版 では apt-get install cloudfoundry-server が package not found になってしまい動かなかった。
.comへのデプロイ方法
VMware発のPaaS、CloudFoundryを試してみた
Cloud FoundryにRails/Sinatra/Nodeアプリをデプロイしてみた
サービスが始まった2011年4月頃は10日ほどかかっていたアカウントの発行が、今日やってみたところ8時間ほどで済んだ。
今回試してみた環境
ESXi3.5 + Ubuntu Server 10.04 64bit
VirtualBox@MacBook Air + Ubuntu Server 10.04 64bit
デプロイ(左側)と利用できるランタイム、フレームワーク、サービスの表示(右側)をさせてみたSS。

今後の予定
複数サーバでクラスタを構築してみたい。方法を近日中に公開できるといいなぁ…。
twitterでVMwareの中の方に良い記事を教えていただきました。ありがとうございます。
How to install Cloud Foundry on multiple hosts
そういう文化を作りたいので、社内LT大会をやった。
8/9に、「引越し記念交流会+LT大会もあるよ」という社内イベントをやりました。かなり盛り上がったので、職場に新しい文化を作りたいな〜と思っている人はやってみるのがいいんじゃないかな!
以下、どんな感じだったかを書きます。
どんな形式でやった?
なんでLT大会をやろうと思った?
やってみたらどうだった?
- 良かったこと
- 予想を超える参加者40人だった
- 2回目もやる流れになった、もっとこういう場が欲しい!とたくさんの人に言われた
- 開発、サービス企画、組織体制、採用などなど、今何が問題でどうしていけば良いか?という議論がそこかしこで行われた
- 多くの人から、LTをできてよかった、LT聞けて良かった、次は発表したい、と言われた
- これまで知らなかった、LT発表者の仕事や興味を知ることができた
- こういうイベントに興味のある、一緒に良い仕事のできそうな知り合いが増えた
- 若手だけでなく、えらいおっちゃん達が興味を持って来てくれた
- ダメだったこと
- いや今回マジであまりない気がする
- 8/1に企画開始で8/9に開催だったので、スケジュールに余裕がなかったかもしれない
今後どうしたい?
- 何回か、こういうイベントは「始めるより継続する方が難しい」というコメントをもらいました。単発で終わってしまわないように、継続されていくためのネタを考えたいです。
- 具体的には、最初に長めの発表セッションを設けるとか、LTにテーマ(「失敗」とか「前半インフラ、後半アプリケーション」とか「おっさんの逆襲」とか)を設けるとか挙がったんですけどどうですかね?
感謝とか
- LT発表してくれたり、設営を手伝ってくれたり、ドラ娘をやってくれたり、LTタイマーを作ってくれたり、開催の宣伝をしてくれたりと、皆様ありがとうございました。
- 中でも、事前の打ち合わせに参加してくれた@elranaさん、@miyatti、@niwawan、とても助かりました。LT大会だと人来ないから交流会+LTもあるよにしましょう、とか、買出しじゃなくてケータリングにしましょう、とかは自分には無い発想でした。ありがとう。ぜひ次回もひとつよろしく…。
一発ネタ「日本語ハッシュタグったー」を作った。
半月前に、「日本語ハッシュタグったー」というサービスを作りました。

どんなサービスかというと、入力した文章の名詞(など)を自動的にハッシュタグ化してTweetしてくれるというもの。
↓例。上が入力で下が出力。
マネジメントの正当性の根拠は一つしかない。人の強みを生産的なものにすることである。これが組織の目的である。
(ドラッカー マネジメント エッセンシャル版 p.275)
#マネジメント の #正当性 の #根拠 は #一つ しかない。 #人 の #強み を #生産的 な #もの にする #こと である。 #これ が #組織 の #目的 である。
(ドラッカー #マネジメント エッセンシャル版 p.275)
日本語ハッシュタグが公開された日の夜、@elranaさんが作り始めていたところに、「旬が命の一発ネタなので、朝までにリリースすべきだ!」と煽ったら、2人で開発することに。煽ったにも関わらず開発用のMacBookAirが手元にないという状況だったので、自分はJavaScriptをちょっと書いただけ。だいたいは@elranaさんが一晩でやってくれました。マジ@elrana△
中身は、MeCabによる形態素解析、文字列をハッシュタグ化するRails API、あとJSから構成されています。正直sinatraで十分だった気がします。
日本語ハッシュタグのリリースから24時間以内に出せたので満足です。さらに、ねとらぼさんにも取り上げられて、数時間の遊びとしてはかなり楽しいものになりました。そのまま出勤したら辛かったけどな
思いついたらちゃちゃっと作れるスキルは、いつまでも持っていたいもんです。
RubyKaigi2011の感想。LTもした。
会議自体のレポートは下記参照。
スタッフの方、本当にお疲れさまでした。
http://gihyo.jp/news/report/01/rubykaigi2011
ここには自分の感想を書きます。
人と組織とキャリア
CIやパフォーマンスモニタリング、BDDやO/R Mapperの話もとても面白かったのだけど、最近の業務を反映して、今回一番自分に刺さったのは、人と組織とキャリアの話だった。
@ayuminさんの、課題を1つずつ丁寧に潰していくやり方、@AkitaOnRailsさんの、自分のコモディティ化を避け、失敗を恐れないやり方、@kakutaniさんの、楽しみながら他人(特に好きでない人を!)インスパイアするやり方を実践したい。
大人気なく。
英語と飲み会
「ひどい英語でもしゃべらないよりマシ」ということで、この3日間、結構たくさん英語しゃべった。
Anti-Bocchi Conversationシートが、話すネタに詰まった時に役立った。この企画を考えてくれた人ありがとうございます。ちなみにシートは、オーストラリアの地図や、ネイティブの読めないアルファベットが書き込まれて使い倒されました。
また、twitterでしか見たことのなかった、yokohama.rbやminami.rbの方と絡ませてもらいました。ぜひまたよろしくおねがいします。
Rails勉強会とLT
@1syoさん企画で、3日目の昼にRails勉強会@東京の出張版をやりました。
打ち合わせで闇RubyKaigiでのLTを振られて、一瞬悩んだけど、@moroさんや@takkanmさんを中心に、Rails勉強会には本当に助けられているので、大きな場で感謝したくて受けました。
LTの出来はアレがナニでしたが、一人でやったKPTを活かしてまたがんばります。
勉強会自体は、@moroさんと@a_matsudaさんによる新レシピブックの解説に、@AkitaOnRailsさんによるキャリア作りと英語に関する熱い話(詳細はこちら、@satococoaさん翻訳乙です)と、豪華な内容になって感動しました。ありがとうございました。

社外でも活動したい、しよう、しなければと思ったのが、去年初参加したRubyKaigiで、2回目の今年が(今の形式では)最終回なわけですが、たった2回でも、多くの影響を受けました。本当にありがとうございました。
節電期間の時間のつかいかた
7-9月は仕事の時間が短くなることに。
そこで、長くなるプライベートの時間にやりたいことと目標値をまとめておく。
有限実行!
英語の勉強
TOEIC100点UP。
オンライン英会話のコストパフォーマンスが良いらしいのでやってみたい。
サービス開発
WebサービスかiPhone/Androidアプリを1つ以上リリース。
Ruby、JavaScript、Titaniumの基礎力を上げたい。
ブログ活動
これまで行った勉強会ログが相当たまってるので記事にする。
開発ネタも月1ぐらいで書く。ついでにLinkedInも設定する。
運動
体重3kg削減。腹筋と野球。
投資
積立投信の整理。CMAMとか。






