5. サービスのバインディング
DBMSなどのCloud Foundryが持つ機能は、サービスとして提供される。これらのサービスは、インスタンスを生成することによってアプリケーションから利用できるようになるという。インスタンスの生成にはvmc create-serviceコマンドを使用する。次の例の場合、MySQLのインスタンスを生成し、「mysql-994002」というサービス名が割り当てられた。
> vmc create-service mysql Creating Service [mysql-994002]: OK
利用可能なサービスや、インスタンスを生成済みのサービスを確認するにはvmc servicesコマンドを実行すればよい。
> 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コマンドを用いて次のように行う。
> 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形式のドキュメントになっているので、アプリケーションではこれを解析して情報を取得し、サービスへのアクセスに利用すればいいとのことだ。
Cloud Foundry上に展開されたサービスのインスタンスは、通常の方法だとCloud Foundry上のアプリケーションからしかアクセスすることができない。しかし、例えばストレージ上のデータをデータベースツールで管理したい場合や、JUnitで単体テストする場合のように、アプリケーションの外部からアクセスしたいときにはどうしたらいいだろうか。
Richardson氏によれば、「Caldecott」というツールを使えばその問題は解決できるとのことだ。Caldecottは、Cloud Foundry上のサービスとPCの間にトンネルを構築するトンネリングツールであり、これを使うことでローカルPCからでもCloud Foundryのサービスにアクセスできるようになるという。CaldecottもRubyGemsでインストールできる。セッションでは、これを使ってJUnitテストを行うデモも披露された。