SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イベントレポート(AD)

ファウンダーに訊く、オープンソースのPaaS環境「Cloud Foundry」の魅力と使い方

「Cloud Foundry Open Tour, Tokyo」セッションレポート

  • このエントリーをはてなブックマークに追加

 4月2日、東京都内にてCloud Foundryユーザ向けの技術イベント「Cloud Foundry Open Tour, Tokyo」が開催された。Cloud Foundryは、2011年4月にVMware社が発表したPaaSオープンプラットフォームである。今回のCloud Foundry Open Tourは東京を含めた世界10都市で順次行われ、Cloud Foundryの魅力や使い方、活用事例などが紹介されている。

  • このエントリーをはてなブックマークに追加

1. Cloud Foundryの魅力

 従来のPaaSの多くは、特定のOSとミドルウェア、開発フレームワーク、アプリケーションサービスセットなどによって構成され、開発者が利用できる機能は限定的なことが一般的だった。そこに切り込んだのがCloud Foundryである。Cloud Foundryではオープン性を第一の特徴として掲げており、Spring FrameworkやRuby on Rails、node.js、Grailsなどといったオープンソースのプロダクトによって構成される。さらに、Cloud Foundry自身もオープンソースになっており、その成果物を自由にカスタマイズして、自前の環境、例えば自社サーバや他社のIaaSなどに展開して利用することができる。オープンソースプロジェクトとしての成果物はコミュニティサイトで公開されている。

 VMware社でSenior Director of Developer Relationsを務めるPatrick Chanezon氏は、Cloud Foundryを使用するメリットとして次のような項目を挙げている。

  • 中立的なオープンソースライセンスなので、ベンダーロックインのリスクがない
  • IaaSを含むどのようなインフラの上でも動かすことができる
  • シンプルなOS環境からフルマネージドな環境まで、幅広い種類のクラウドに対応
  • 複数のランタイムやフレームワーク、サービスアーキテクチャをサポートしており、拡張も可能
    • node.js、Ruby、Java、Scala、Erlangなどの言語をサポート
    • PostgreSQL、neo4j、MongoDB、Redis、MySQLなどのDBMS、およびRabbitMQなどのMOM(Message Oriented Middleware)をサポート
    • コミュニティによる拡張の成果も取り込んでいる
図1.1 オープンなPaaS「Cloud Foundry」
図1.1 オープンなPaaS「Cloud Foundry」

 VMwareでは、Cloud Foundry本体の開発に対するコミットメントに加えて、開発ツールの提供や、Cloud FoundryベースのPaaSサービス「CloudFoundry.com」の運営、PC上で稼働するPaaS環境「Micro Cloud Foundry」の開発などを行っている。つまり、自分でPaaS環境を構築する場合に限らず、通常のPaaSと同様にアカウントを取得するだけで利用することもできるということだ。

参考:Patrick Chanezon氏のセッション(YouTube)

2. vmcコマンドを用いたアプリケーションの公開

 実際にどのようにしてCloudFoundry.comを利用したらいいかという点については、CloudFoundry.comのファウンダーであるChris Richardson氏が説明してくれた。まずは、CloudFoundry.comのサイトでサインアップするのが最初のステップになる。サインアップに成功すると、間もなくパスワードを記載したメールが送られてくる。

図2.1 CloudFoundry.comへのサインアップ
図2.1 CloudFoundry.comへのサインアップ
図2.2 サインアップが完了するとパスワードを記載したメールが送られてくる
図2.2 サインアップが完了するとパスワードを記載したメールが送られてくる

 アプリケーションの作成やデプロイ、管理などはPC上のツールを使って行う。Cloud Foundryに対応したツールとしては次のようなものがあるという。

 このうち、もっとも基本的なツールが「VMC」とのこと。VMCはRubyベースのツールであり、Ruby環境を用意すれば、RubyGemsを使ってインストールすることができる。

プロンプト2.3
> gem install vmc

 図2.4に示すのがVMCに用意されている主要なコマンドである。

図2.4 VMCに用意されている主要なコマンド
図2.4 VMCに用意されている主要なコマンド

 アプリケーションをデプロイするまでの手順としては、まずvmc targetコマンドで対象とするクラウドプラットフォームを指定した上で、vmc loginコマンドを使ってログインする。CloudFoundry.comを使用する場合には、ターゲットには「http://api.cloudfoundry.com」を指定すればよいとのこと。ユーザID(Eメールアドレス)とパスワードは、サインアップ完了時に送られてきたメールに記載されている。

プロンプト2.5
> vmc target api.cloudfoundry.com
Successfully targeted to [http://api.cloudfoundry.com]

> vmc login
Attempting login to [http://api.cloudfoundry.com]
Email: xxxx@xxxx.xxx
Password: ********
Successfully logged into [http://api.cloudfoundry.com]

 ログインに成功したら、アプリケーションやクラウド環境を管理するためのコマンドが利用できるようになる。アプリケーションのデプロイは、この状態でvmc pushコマンドを使って行う。Richardson氏のセッションでは、Mavenを用いてJavaアプリケーションプロジェクトを作成し、それをデプロイし、さらにインスタンス数を増やしてスケールアウトするデモが行われた。以下は、同様の手順でアプリケーションをデプロイした例である。

 まず、デプロイするJavaアプリケーションを作成する必要がある。デモでは、次に示すようにMavenのarchetypeプラグインを用いて対話的にプロジェクトを構築・パッケージングしていた。ただし、Javaアプリケーションの場合は最終的にWAR形式でパッケージングされていればいいので、特にMavenを使わなければならないわけではない。また、RailsやNode.jsなどを使った場合でも、基本的な手順は同様とのことだ。

プロンプト2.6
> mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
Define value for property 'groupId': : org.example
Define value for property 'artifactId': : example
Define value for property 'version':  1.0-SNAPSHOT: :
Define value for property 'package':  org.example: : example

Confirm properties configuration:
groupId: org.example
artifactId: example
version: 1.0-SNAPSHOT
package: example

 Y: : y

> cd example

example> mvn package

 vmc pushコマンドを使ってデプロイを行うと、アプリケーションの公開URLや使用するリソースなどを聞かれるので、任意の値を入力する。

プロンプト2.7
> vmc push example --path target
Application Deployed URL [example.cloudfoundry.com]: codezine-example.cloudfoundry.com
Detected a Java Web Application, is this correct? [Yn]: y
Memory Reservation (64M, 128M, 256M, 512M, 1G, 2G) [512M]: 256M
Creating Application: OK
Would you like to bind any services to 'example'? [yN]: n
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (2K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

 デプロイが完了したら、指定した公開URLにWebブラウザからアクセスしてみれば、クラウド上でアプリケーションが動作していることを確認できる。

図2.8 Webブラウザからアプリケーションにアクセス
図2.8 Webブラウザからアプリケーションにアクセス

 VMCからは、次のようにvmc appsコマンドやvmc statsコマンドを使うことで、アプリケーションの状態を調べることができる。

プロンプト2.9
> vmc apps
+-------------+----+---------+-----------------------------------+----------+
| Application | #  | Health  | URLS                              | Services |
+-------------+----+---------+-----------------------------------+----------+
| example     | 1  | RUNNING | codezine-example.cloudfoundry.com |          |
+-------------+----+---------+-----------------------------------+----------+

> vmc stats example
+----------+-------------+----------------+--------------+--------------+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime       |
+----------+-------------+----------------+--------------+--------------+
| 0        | 1.6% (4)    | 93.4M (256M)   | 8.0M (2G)    | 0d:0h:2m:25s |
+----------+-------------+----------------+--------------+--------------+

 アプリケーションを更新する場合には、vmc updateコマンドを使用する。例えばexampleプロジェクトのsrc/main/webapp/index.jspを修正した上で次のようにvmc updateコマンドを実行すれば、Webサイトにも反映されるはずだ。

プロンプト2.10
example> vmc update example --path target
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (2K): OK
Push Status: OK
Stopping Application: OK
Staging Application: OK
Starting Application: OK

 インスタンス数を増やすスケールアウトは、次のようにvmc instancesコマンドを実行するだけでいいそうだ。対象のアプリケーションを指定して、「+2」となどとやればインスタンスが2つ増える。逆に減らす場合には「-2」などとすればよい。

プロンプト2.11
> vmc instances example +2
Scaling Application instances up to 3: OK

> vmc stats example
+----------+-------------+----------------+--------------+--------------+
| Instance | CPU (Cores) | Memory (limit) | Disk (limit) | Uptime       |
+----------+-------------+----------------+--------------+--------------+
| 0        | 1.1% (4)    | 93.4M (256M)   | 8.0M (2G)    | 0d:0h:3m:38s |
| 1        | 12.5% (4)   | 64.3M (256M)   | 7.9M (2G)    | 0d:0h:0m:15s |
| 2        | 10.1% (4)   | 58.3M (256M)   | 7.9M (2G)    | 0d:0h:0m:15s |
+----------+-------------+----------------+--------------+--------------+

 デモでは、その他にSpringSource Tool Suiteを使う方法なども紹介された。SpringSource Tool SuiteはEclipseベースの開発ツール集であり、Cloud Foundry用プラグインを使うことで、IDE上からCloud Foundry上のアプリケーションの管理を行うことができる。

図2.12 SpringSource Tool Suiteの利用例
図2.12 SpringSource Tool Suiteの利用例

3. Cloud Foundryのアーキテクチャ

 続いてRichardson氏は、Cloud Foundryのアーキテクチャの概要を説明した。Cloud Foundryのプラットフォームはメッセージングによって連携する複数のコンポーネントか構成され、全体像は図3.1のようになっている。

図3.1 Cloud Foundryのアーキテクチャ
図3.1 Cloud Foundryのアーキテクチャ

 このうち核となるのがCloud Controllerで、アプリケーションの構成管理や、WebサービスAPIの提供などはこのCloud Controllerによって行われる。VMCからの接続もCloud Controllerによって処理されている。DEA(Droplet Execution Agent)というのは、ユーザアプリケーションを動作させるためのエージェントである。アプリケーションはどのDEA上でも実行可能な状態になっており、1つのDEAでいくつのアプリケーションを動作させるかは設定によって選択できる。なお、Dropletというのは、vmc statsコマンドで確認できるインスタンスの実態のことだ。

 リクエストのアプリケーションへの振り分けは、RouterとLoad Balancerによって行われる。すべての外部からのHTTPリクエストはRouterを経由し、アプリケーションごとにURLで適切なDEAにルーティングされるとのこと。図3.2は、リクエストハンドリングの流れを示したものである。

図3.2 リクエストハンドリングの流れ
図3.2 リクエストハンドリングの流れ

 Health ManagerはDEAを監視していて、問題が発生した場合にはControllerに通知する。なお、Health Managerが監視しているのはDEAであり、アプリケーション自体の状態は各DEAによって監視されているとのことである。Servicesは、ミドルウェアの機能をサービスとして提供するコンポーネントである。これによりPostgreSQLやMongoDBなどによるストレージ機能が提供されている。

 図3.3は、アプリケーションをデプロイする場合の処理の流れを示したものだという。

図3.3 アプリケーションのデプロイ時の処理
図3.3 アプリケーションのデプロイ時の処理

 vmc pushコマンドが実行されたら、まずVMCがフレームワークの検出を行い、Cloud Controllerと通信してアプリケーションのデプロイを開始する。Controllerはフレームワーク用のstagingプラグインを利用して、必要なサービスのDropletを作成する。実際のアプリケーションはDEA上に展開されるので、まずはDEAがアプリケーションを展開可能であるかどうかを確認し、十分なリソースがあればDropletが展開されることになる。DEAは続いてRouterのルーティングテーブルを更新し、アプリケーションをスタートする。

 障害に対する自己復旧機能を持っている点は、Cloud Foundryの大きな特徴の一つである。アプリケーションが予期しないエラーで終了した場合には、DEAがその旨のメッセージをブロードキャストする。それに応じて、Routerは対象のアプリケーションへのルーティングを中止し、Health ManagerはCloud Controllerに障害を通知する。通知を受け取ったCloud Controllerは、デプロイメントのプロセスを再度実行することによって、アプリケーションのインスタンスを復帰させる。

 DEAそのものの障害はHealth Managerによって監視される。Health ManagerからはDEAに向けて定期的にHeatBeatメッセージが送られており、DEAのクラッシュを自動で検知できるようになっている。クラッシュを検知したHealth Managerは、Cloud Controllerにその旨を通知し、Cloud ControllerはDEAとアプリケーションインスタンスの再機動を実行するという仕組みである。

4. Micro Cloud Foundryの利用

 Cloud Foundryを使ってみる第一歩としては、CloudFoundry.comを利用する他に、Micro Cloud Foundryを使うという選択肢もある。Micro Cloud FoundryはCloud Foundryの環境一式がVMware仮想マシンの中にパッケージングされているもので、仮想化ソフトウェア上で手軽に実行することができる。Richardson氏によれば、Micro Cloud FoundryはPC上でも実行することが可能なため、開発者用のサンドボックスなどの用途として極めて有用なものとのことである。

 Micro Cloud Foundryは、CloudFoundry.comのサイトより入手することができる。まずサインインページ(図4.1)に行ってログインする。図4.2のようにライセンス条項が表示されるので、同意のチェックを入れて[Accept]ボタンをクリックする。

図4.1 CloudFoundry.comにログイン
図4.1 CloudFoundry.comにログイン
図4.2 ライセンス条項を読んで同意する
図4.2 ライセンス条項を読んで同意する

 続いて、図4.3の画面で使用したいドメイン名を記入する。ドメイン名には任意の文字列が使えるが、他のユーザと競合しない一意のものでなければならない。ドメイン名が登録できたら図4.4のように設定用文字列(configuration token)が表示される。この文字列は、仮想マシンを設定する際に必要になる。最後に、[Download Micro Cloud Foundry VM]ボタンをクリックすればファイルをダウンロードできる。

図4.3 任意のドメイン名を登録
図4.3 任意のドメイン名を登録
図4.4 Micro Cloud Foundry VMをダウンロード。設定用文字列は後で必要になるのでメモしておくこと
図4.4 Micro Cloud Foundry VMをダウンロード。設定用文字列は後で必要になるのでメモしておくこと

 ダウンロードしたファイルを解凍すると、vmdk形式の仮想ディスクイメージが入っているので、VMware Playerなどを使ってこれを起動すればよい。初回起動時にはいくつかの設定が必要とのこと。図4.5のように、「1. configure」オプションを選択し、パスワードとさきほどの設定用文字列を入力すればよい。

図4.5 Micro Cloud Foundryの設定例
図4.5 Micro Cloud Foundryの設定例

 Micro Cloud Foundry向けにVMCを使う場合のターゲットURLは「api.ドメイン名.cloudfoundry.me」となる。ターゲットを指定したら、次のようにvmc registerコマンドを使ってユーザ登録をしよう。

プロンプト4.6
> vmc target api.ドメイン名.cloudfoundry.me

> vmc register
Email: xxxx@xxxx.xxxx
Password: ********
Verify Password: ********
Creating New User: OK
Attempting login to [http://api.ドメイン名.cloudfoundry.me]
Successfully logged into [http://api.ドメイン名.cloudfoundry.me]

 あとはCloudFoundry.comとまったく同様にログインして利用することができる。

 Micro Cloud FoundryはローカルのPCで実行することができるが、ドメイン名の解決のために、通常使用する場合はインターネットへの接続環境が必須となっている。ただし、完全にオフラインの環境で利用するために、最新のMicro Cloud Foundryにはオフラインモードが用意されているという。オフラインモードを使えば、PCがインターネットに接続されていなくても、ローカルのDNSによってドメイン名を解決して利用することができるとのことだ。

5. サービスのバインディング

 DBMSなどのCloud Foundryが持つ機能は、サービスとして提供される。これらのサービスは、インスタンスを生成することによってアプリケーションから利用できるようになるという。インスタンスの生成にはvmc create-serviceコマンドを使用する。次の例の場合、MySQLのインスタンスを生成し、「mysql-994002」というサービス名が割り当てられた。

プロンプト5.1
> vmc create-service mysql
Creating Service [mysql-994002]: OK

 利用可能なサービスや、インスタンスを生成済みのサービスを確認するにはvmc servicesコマンドを実行すればよい。

プロンプト5.2
> vmc services
============== System Services ==============
+------------+---------+---------------------------------------+
| Service    | Version | Description                           |
+------------+---------+---------------------------------------+
| mongodb    | 1.8     | MongoDB NoSQL store                   |
| mysql      | 5.1     | MySQL database service                |
| postgresql | 9.0     | PostgreSQL database service (vFabric) |
| rabbitmq   | 2.4     | RabbitMQ message queue                |
| redis      | 2.2     | Redis key-value store service         |
+------------+---------+---------------------------------------+

=========== Provisioned Services ============
+--------------+---------+
| Name         | Service |
+--------------+---------+
| mysql-994002 | mysql   |
+--------------+---------+

 アプリケーションからサービスの機能を利用するためには、作成したインスタンスをアプリケーションに"バインド”する。バインドはvmc bind-serviceコマンドを用いて次のように行う。

プロンプト5.3
> vmc bind-service mysql-994002 example
Binding Service [mysql-994002] OK
Stopping Application OK
Staging Application OK
Starting Application OK

 その他、vmc pushでサービスをデプロイした際に、「Would you like to bind any services to 'アプリケーション名'? [yN]:」の質問に"y"を入力することでもバインドを実行できる。

 バインドが完了したサービスに関する情報は、VCAP_SERVICES環境変数に図5.4のような形で保存される。これはJSON形式のドキュメントになっているので、アプリケーションではこれを解析して情報を取得し、サービスへのアクセスに利用すればいいとのことだ。

図5.4 VCAP_SERVICES環境変数
図5.4 VCAP_SERVICES環境変数

 Cloud Foundry上に展開されたサービスのインスタンスは、通常の方法だとCloud Foundry上のアプリケーションからしかアクセスすることができない。しかし、例えばストレージ上のデータをデータベースツールで管理したい場合や、JUnitで単体テストする場合のように、アプリケーションの外部からアクセスしたいときにはどうしたらいいだろうか。

 Richardson氏によれば、「Caldecott」というツールを使えばその問題は解決できるとのことだ。Caldecottは、Cloud Foundry上のサービスとPCの間にトンネルを構築するトンネリングツールであり、これを使うことでローカルPCからでもCloud Foundryのサービスにアクセスできるようになるという。CaldecottもRubyGemsでインストールできる。セッションでは、これを使ってJUnitテストを行うデモも披露された。

参考:Chris Richardson氏のセッション(YouTube/日本語字幕付き)

6. 「Go Go OpenSource!」

 編集部では、Cloud Foundry Open Tour, Tokyoでのセッション後、Richardson氏から個別にお話を聞く機会をいただいた。

CloudFoundry.comファウンダー Chris Richardson氏
CloudFoundry.comファウンダー Chris Richardson氏

──一般的に、PaaSを使う上での難しさはどこにあると思いますか。

 そもそも、最初の段階でPaaSプロバイダを選択するのが難しいと思います。一般的なPaaSはそれほどたくさんの選択肢を提供してはくれません。どのようなインフラの上で、どのようなサービスが提供されているのか。自分のアプリケーションがその環境でちゃんと動作するのか。確認しなければならない項目がたくさんあります。

 Cloud Foundryであれば、自分の好きな環境にカスタマイズできるので、そのような心配はありません。

──Cloud Foundryと既存のPaaS型クラウドサービスはどのように使い分けたらいいのでしょうか。

 根本的な違いはオープンソースであることです。オープンな技術によって開発されているのでベンダーロックインのリスクがなく、ユーザが自由に拡張することができます。そのような自由な環境を、ほんの数ステップで手に入れることができるという点も大きなアドバンテージだと思います。

──Cloud Foundryが発表されてから1年が経ちますが、現時点での反響はどのようなものでしょうか。また、今後はどのようになっていくと思いますか。

 多くの人々が、実際に使って、そしてこれを拡張することに関わっています。コミュニティは非常にアクティブな状態にあると思います。今回のOpen Tourは東京を含めて世界10都市で開催されていて、非常に多くの開発者やユーザが参加しています。今後どうなっていくかということですが、もっとよくなっていくということは間違いないでしょう。

──最後に、日本のユーザにメッセージをお願いします。

 オープンソースは非常にすばらしいものです。いろいろなフレームワークやアプリケーションが登場しています。『Go Go OpenSource!』。これからもオープンソースのプロダクトを積極的に使い、そして積極的に活動に参加してください。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6532 2012/06/12 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング