この連載では3回に分けて、「Cloud Foundry」というオープンソースパッケージを用いて、Platform as a Service(PaaS)のためのインフラストラクチャを構築する方法について解説します。
第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の方法を利用します。まず、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マシンであれば、オールインワン構成でも問題なく動作するでしょう。
注3:Cloud 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サイトの動作確認を行うために、第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サイトを構築する場合は、
という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コマンドを使ってリアルタイムに出力されるログを追うことで問題判別ができます。
注5:RedisやMongodbなどは、1個のサービスインスタンスについて、1つのプロセスを立ち上げる方式でプロビジョニングを行うので、この方法で動作確認が行えますが、MySQLやRabbit MQなどは別の方式でプロビジョニングを行うため、プロセスによる確認はできません。サーバサイドで確認を行うには、サービスの種類ごとにプロビジョニング方法を知っておく必要がありますが、その情報はソースコードにあります。
Copyright © ITmedia, Inc. All Rights Reserved.