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


PaaSであるCloud Foundryには、ユーザやデプロイされたアプリ、アプリの使うサービス(ここで言うサービスとは、MySQLやMongoDB、RabbitMQなど)を管理する、CCDB(Cloud Controller Database)と呼ばれるデータベースがある。
Cloud ControllerはRails3.0で実装されているので、そのCCDBをRails ERDというgemでER図にしてみたのが上の図。

PDFはgithubに。こちら


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での構築までで、特に目新しい内容もないので、リンク中心のまとめ。先人に感謝です。(-人-)

Cloud Foundryの概要

VMwareのホスティング(.com)と、OSSプロジェクト(.org)からなる。
Cloud FoundryがRuby「で」作られたクラウドだった件

ローカルでの構築方法

自前で構築する方法と、予め構築された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大会もあるよ」という社内イベントをやりました。かなり盛り上がったので、職場に新しい文化を作りたいな〜と思っている人はやってみるのがいいんじゃないかな!

以下、どんな感じだったかを書きます。

どんな形式でやった?

  • 業務後の交流会の出し物の1つとして企画
  • 場所は社員向けの交流スペースを予約
  • 同じビル内の飲食店にケータリングを頼んで、会費はお安く1人2000円。LTも飲み食いしながら聞く感じ
  • 開催のアナウンスはFacebookのグループ、口コミ、社内のメーリングリスト等で。
  • LTは1人3分。テーマは自己紹介+業務紹介+あとは何でも
  • 前半戦8人x3分、休憩を挟んで、後半戦8人x3分というプログラム
  • ドラ娘&ドラも確保。ドラは見つからなかったけど、インドの太鼓を貸してもらえた!

なんでLT大会をやろうと思った?

  1. 特に若手で集まると、こうすればもっと良くなるのに!という話をすることが多くて、実際に変えていくための流れを作りたいと思っていたから
  2. クラウドやアプリケーションをやっている人たちが8月頭に引越してきて、互いにやっていることを知りたい、新しいイベントも始めやすいと思ったから
  3. 最近参加したRubyKaigiやtokyu.rbを通じて、LT楽しい・企画したいと思っていたから+自分自身がLTの修行をしなきゃいけないと思っていたから
  4. 重厚長大な会議でない、ただの飲み会でもない、楽しく真面目にディスカッションできる場が社内に欲しいと思っていたから

やってみたらどうだった?

  • 良かったこと
    • 予想を超える参加者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の基礎力を上げたい。

アジャイル開発手法の勉強

仕事の開発チームにアジャイルのプラクティスを2,3個導入。
とりあえずは本を読んだり勉強会に行ったりする。

ブログ活動

これまで行った勉強会ログが相当たまってるので記事にする。
開発ネタも月1ぐらいで書く。ついでにLinkedInも設定する。

運動

体重3kg削減。腹筋と野球。

投資

積立投信の整理。CMAMとか。

こんかつ、、