連載
» 2012年06月22日 00時00分 公開

CloudFoundryで始めるPaaS構築入門(2):オリジナルのCloud Foundryサイトを構築する (1/2)

この連載では3回に分けて、「Cloud Foundry」というオープンソースパッケージを用いて、Platform as a Service(PaaS)のためのインフラストラクチャを構築する方法について解説します。

[佐々木庸平,楽天株式会社]

Cloud Foundryのインストール

 第1回ではCloud Foundryの概要を紹介し、cloudfoundry.comを題材に利用イメージを解説しました。

 Cloud Foundryの強みは、オープンソース版を利用することでオリジナルのCloud Foundryサイト(注1)を立ち上げられることです。早速、オープンソース版を利用してCloud Foundryサイトを構築してみましょう。

注1この連載ではCloud FoundryのAPIおよびアプリケーション/サービス実行環境を提供する単位のことを「Cloud Foundry サイト」と定義します。1つのCloud Foundryサイトには、vmc targetコマンドで指定するターゲットエンドポイントが必ず1つだけ存在します。


 オープンソース版のCloud Foundryのインストール方法には次の3つがあります。

  1. 同梱されているbashスクリプトを利用して1台のサーバにすべてのコンポーネントをインストールする方法(オールインワン構成)
  2. Boshと呼ばれるデプロイ管理ツールを利用して複数台のサーバにコンポーネントをインストールする方法(マルチノード構成)
  3. 同梱されているbashスクリプトおよびBoshスクリプトを参考に、独自のセットアップスクリプトを自分自身で記述する方法(要件や環境制約に応じた構成)

 今回は最も簡単な1の方法を利用します。まず、Ubuntu 10.04.4のサーバを用意してください。Ubuntu 10.04上に最低限必要なパッケージはopenssh-serverとcurlです(注2)。

$ sudo apt-get install openssh-server curl

 次に、bashスクリプトをcurlで取得し実行します。

$ bash < <(curl -s -k -B https://raw.github.com/cloudfoundry/vcap/master/dev_setup/bin/vcap_dev_setup) 

 基本的にはこれで完了です(注3)。なお、このコマンドを実行すると、すべての必要なパッケージがインストールされ、ソースコードがダウンロードされるため、処理に非常に時間がかかります。sudoコマンドのパスワードキャッシュがタイムアウトして途中で止まっている場合があるので注意してください。

注2 Cloud Foundryのシステム要件ですが、その名称や、VMwareが中心となって開発していることなどから、「クラウド=仮想化=バーチャルマシンが必要」という誤解を受けてしまうことがあるようです。「どのハイパーバイザが必要か」という質問もよく挙がります。

 しかし、Cloud Foundryのインストールターゲットとしてハイパーバイザは必須ではありません。インストールターゲットは、VMwareやVirtual Boxなどの仮想インフラストラクチャ上に構築された仮想マシンのUbuntu 10.04でもかまいませんし、ハードウェア上に直接インストールされたものでもかまいません。当然、Amazon Web ServiceのEC2インスタンスのようなIaaS上のマシンでもかまいません。メモリを2GB程度搭載したx86_64マシンであれば、オールインワン構成でも問題なく動作するでしょう。

注3Cloud Foundryが依存するパッケージやモジュールの変更によって、このスクリプトでは正しくインストールできないことがあります。この記事では2012年6月3日時点でのインストール方法を記載しています。もしうまくいかない場合は、エラーの内容を含めてCloud FoundryのGoogle Groupに投稿するとよいでしょう。


 インストールが正常に完了すると、次のようなメッセージが出力されます。

Deployment Info
***************
* Status: Success
* Config files: /home/yssk22/cloudfoundry/.deployments/devbox/config
* Deployment name: devbox
* Note:
* If you want to run ruby/vmc please source the profile /home/yssk22/.cloudfoundry_deployment_profile
* If you want to run cloudfoundry components by hand please source the profile /home/yssk22/.cloudfoundry_deployment_local
* Command to run cloudfoundry: /home/yssk22/cloudfoundry/vcap/dev_setup/bin/vcap_dev start

 この最後の行が、Cloud Foundryを起動するコマンドです。実際に起動してみましょう。

$ /home/yssk22/cloudfoundry/vcap/dev_setup/bin/vcap_dev start
Targeting deployment "devbox" with cloudfoundry home "/home/yssk22/cloudfoundry"
Setting up cloud controller environment
Setting up the uaa environment
Using cloudfoundry config from /home/yssk22/cloudfoundry/.deployments/devbox/config
Executing /home/yssk22/cloudfoundry/.deployments/devbox/deploy/rubies/ruby-1.9.2-p180/bin/ruby /home/yssk22/cloudfoundry/vcap/dev_setup/bin/vcap start cloud_controller memcached_gateway rabbitmq_node uaa mongodb_node dea redis_node health_manager mongodb_gateway router mysql_gateway memcached_node mysql_node rabbitmq_gateway redis_gateway -c /home/yssk22/cloudfoundry/.deployments/devbox/config -v /home/yssk22/cloudfoundry/vcap/bin -l /home/yssk22/cloudfoundry/.deployments/devbox/log
- Excluded components: neo4j|memcached|couchdb.
See dev_setup/README for details
Skipping excluded component: memcached_gateway
Skipping excluded component: memcached_node
cloud_controller    :         RUNNING
rabbitmq_node       :         RUNNING
uaa                 :         RUNNING
mongodb_node        :         RUNNING
dea                 :         RUNNING
redis_node          :         RUNNING
health_manager      :         RUNNING
mongodb_gateway     :         RUNNING
router              :         RUNNING
mysql_gateway       :         RUNNING
mysql_node          :         RUNNING
rabbitmq_gateway    :         RUNNING
redis_gateway       :         RUNNING

 これでサーバプロセスは正しく起動しました。

 もし起動がうまくいかない場合は~/cloudfoundry/.deployments/devbox/log/にログが生成されているので、そちらを確認してみてください。また、起動してしばらくしてから落ちてしまうケースもあるので、この後の動作確認で失敗する場合は、~/cloudfoundry/.deployments/devbox/bin/vcap statusを使用して、すべてのコンポーネントがRUNNINGになっていることを確認してみてください。

インストールしたCloud Foundryの動作確認

 インストールしたCloud Foundryサイトの動作確認を行うために、第1回で作成したアプリケーションをこのCloud Foundryサイトにデプロイしてみましょう。

 Cloud Foundryサイトはデフォルトで「vcap.me」というドメインの配下でホストされており、「api.vcap.me」というターゲットエンドポイントを提供します。このドメインは、通常インターネットに公開されているネームサーバで名前解決を行うと、127.0.0.1に解決されてしまいます。これでは都合が悪いので、/etc/hostsに自分で作ったCloud FoundryサイトのIPアドレスを登録しておきましょう(注4)。

 以下は、Cloud FoundryサイトのIPアドレスが192.168.20.130であった場合の例です。

$ sudo vi /etc/hosts
~略~
192.168.20.130  api.vcap.me     # ターゲットエンドポイント用
192.168.20.130  cf-app.vcap.me  # サンプルアプリ用

注4この方法は一時的なワークアラウンドです。通常Cloud Foundryサイトを構築する場合は、

  1. 自由に利用できるドメインを1つ取得する。
  2. 取得したドメインのAレコードに*を追加し、Cloud Foundryサイトのロードバランサ(後述)のIPアドレスを設定する。

という2つの作業を行います。個人的に自分専用のCloud Foundryサイトを持っていますが、ドメインとしてcloud.yssk22.infoを利用し、*.cloud.yssk22.infoのAレコードをAmazon Web ServiceのRoute 53に登録して運用しています。Cloud FoudnryはDNSに依存しないHTTPトラフィックのルーティングを提供するので、ワイルドカードレコードでドメインを丸ごとCloud Foundryサイトに向けられる運用方法を推奨します。


 続いてvmc targetコマンドで作成したCloud Foundryサイトにターゲットを設定し、vmc add-userコマンドでユーザー登録を行います。cloudfoundry.comとは異なり、vmcコマンドでユーザー登録も行える点に注意してください。

$ vmc target api.vcap.me
Successfully targeted to [http://api.vcap.me]
$ vmc add-user
Email: yssk22@vcap.me
Password: ********
Verify Password: ********
Creating New User: OK
Attempting login to [http://api.vcap.me]
Successfully logged into [http://api.vcap.me]

 ユーザー登録ができたら、アプリケーションをデプロイします。第1回で作成したcf-appのアプリケーションディレクトリに移動して、vmc pushコマンドを実行します。アプリケーションのURLは/etc/hostsに登録したcf-app.vcap.meにする必要があります。

$ cd path/to/cf-app
$ vmc push
Would you like to deploy from the current directory? [Yn]: Y
Application Name: cf-app
Application Deployed URL: 'cf-app.vcap.me'?
Detected a Node.js Application, is this correct? [Yn]:
Memory Reservation [Default:64M] (64M, 128M, 256M, 512M or 1G)
Creating Application: OK
Would you like to bind any services to 'yssk22-cf-atmarkit'? [yN]:
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (1K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

 実際にアクセスをしてみましょう。

$ curl http://cf-app.vcap.me/
{
"VMC_APP_HOST": "127.0.0.1",
"VMC_APP_NAME": "cf-app",
"VMC_APP_INSTANCE": "{\"droplet_id\"
...

 Cloud Foundryをインストールしたサーバでpsコマンドを実行し、nodeのプロセスを確認してみてください。

$ ps aux | grep node | grep app.js
yssk22   22273  0.0  0.2 629512  9912 pts/3    Sl   04:53   0:00 /usr/local/bin/node app.js -p 37028

 インスタンス数を変えるとサーバ側のプロセス数が変わることも確認できるはずです。

$ vmc instances cf-app 4
Scaling Application instances up to 4: OK
# サーバに移動
$ ps aux | grep node | grep app.js
yssk22   22273  0.0  0.2 629512  9912 pts/3    Sl   04:53   0:00 /usr/local/bin/node app.js -p 37028
yssk22   23045  0.3  0.2 629512  9788 pts/3    Sl   04:58   0:00 /usr/local/bin/node app.js -p 56372
yssk22   23058  0.6  0.2 629512  9784 pts/3    Sl   04:58   0:00 /usr/local/bin/node app.js -p 60390
yssk22   23063  0.5  0.2 629576  9892 pts/3    Sl   04:58   0:00 /usr/local/bin/node app.js -p 47752

 同様に、クライアント側でvmc create-serviceコマンドを使ってサービスインスタンスを立ち上げて、サーバ側でサーバのプロセスを確認してみてください(注5)。

$ vmc create-service mongodb mongodb-test
Creating Service: OK
# サーバに移動
$ ps aux | grep mongodb | grep instance
yssk22   25143  0.1  0.9 156968 38448 pts/6    Sl   05:04   0:00 mongod -f /var/vcap/services/mongodb/instances/c20dfbee-0a77-45fe-975e-e9e891cafa9e/mongodb.conf

 もし上記の手順でうまくいかないところがある場合は、サーバ側のログを確認してみてください。Cloud Foundryのサーバログは、デフォルトで/tmp/vcap-run/に出力されています。このディレクトリのログを確認するか、bin/vcap tailコマンドを使ってリアルタイムに出力されるログを追うことで問題判別ができます。

注5RedisやMongodbなどは、1個のサービスインスタンスについて、1つのプロセスを立ち上げる方式でプロビジョニングを行うので、この方法で動作確認が行えますが、MySQLやRabbit MQなどは別の方式でプロビジョニングを行うため、プロセスによる確認はできません。サーバサイドで確認を行うには、サービスの種類ごとにプロビジョニング方法を知っておく必要がありますが、その情報はソースコードにあります。


       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。