Cloud Foundryを使ってみよう[6]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
アプリケーションとサービスの接続
本項では、Cloud Foundry上でのアプリケーションは、サービスとどのように接続しているのか確認を行います。
環境変数 VCAP_SERVICES、VMC_APP_PORT、VCAP_APP_HOST が用いられていることを先に述べましたが、どのような形になっているのか、テストアプリケーションを作成して実際の状態の確認を行います。
テストアプリケーションの作成
テストアプリケーション用のディレクトリを作成します。
cf@debian:~$ mkdir test-node cf@debian:~$ cd test-node cf@debian:~/test-node$
node.jsでテストアプリケーションを作成します。
cf@debian:~/test-node$ cat > app.js var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('VMC_APP_PORT: ' + process.env.VMC_APP_PORT + '\n'); res.write('VCAP_APP_HOST: ' + process.env.VCAP_APP_HOST + '\n'); res.write('VCAP_SERVICES: \n'); res.write(JSON.stringify(JSON.parse(process.env.VCAP_SERVICES),null,' ')); res.end('\n'); }).listen(process.env.VMC_APP_PORT, process.env.VCAP_APP_HOST); cf@debian:~/test-node$
このアプリケーションは環境変数 VMC_APP_PORT と VCAP_APP_HOST を表示し、環境変数 VCAP_SERVICES に JSON 形式で格納されているサービスとの接続情報を整形して表示するものです。
サービスと関連付けない場合
cf@debian:~/test-node$ vmc push Would you like to deploy from the current directory? [Yn]:
y
Application Name:
test-node
Application Deployed URL [test-node.cloudfoundry.com]:
test-node-creationline.cloudfoundry.com
Detected a Node.js Application, is this correct? [Yn]:
y
Memory Reservation (64M, 128M, 256M, 512M, 1G, 2G) [64M]: Creating Application: OK Would you like to bind any services to 'test-node'? [yN]:
n
Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$
Webブラウザで http://test-node-creationline.cloudfoundry.com/ にアスセスします。
VMC_APP_PORT: 15734 VCAP_APP_HOST: 172.30.49.88 VCAP_SERVICES: {}
サービスと関連付けを行っていないので、VCAP_SERVICES は空になっています。
MongoDBと関連付けた場合
MongoDB サービスをプロビジョニングし、テストアプリケーションと結びつけます。
cf@debian:~/test-node$ vmc create-service mongodb --bind test-node Creating Service [mongodb-cb673]: OK Binding Service [mongodb-cb673]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$
VMC_APP_PORT: 7550 VCAP_APP_HOST: 172.30.49.224 VCAP_SERVICES: { "mongodb-1.8": [ { "name": "mongodb-cb673", "label": "mongodb-1.8", "plan": "free", "tags": [ "mongodb", "mongodb-1.8", "nosql" ], "credentials": { "hostname": "172.30.48.73", "host": "172.30.48.73", "port": 25112, "username": "e5a1ff38-99ea-4e85-a150-e5b86645734f", "password": "c0a00a52-4b18-4b40-a8c6-d14b85f832f2", "name": "61c9f8a9-24a1-42e7-9b03-3691e92dcd1d", "db": "db" } } ] }
このように、プロビジョニングしたMongoDBサービスの情報が格納されています。サービスへ接続するための情報はcredentialsに格納されています。
Cloud Foundry上にデプロイするアプリケーションは、VCAP_SERVICESに格納されたcredentialsの値を利用し、各サービスとの接続を行うように作成する必要があります。
後処理として、テストアプリケーションとMongoDBサービスを切り離し、削除します。
cf@debian:~/test-node$ vmc unbind-service mongodb-cb673 test-node Unbinding Service [mongodb-cb673]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$ vmc delete-service mongodb-cb673 Deleting service [mongodb-cb673]: OK cf@debian:~/test-node$
RabbitMQと関連付けた場合
cf@debian:~/test-node$ vmc create-service rabbitmq --bind test-node Creating Service [rabbitmq-7f942]: OK Binding Service [rabbitmq-7f942]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$
VMC_APP_PORT: 28116 VCAP_APP_HOST: 172.30.49.93 VCAP_SERVICES: { "rabbitmq-2.4": [ { "name": "rabbitmq-7f942", "label": "rabbitmq-2.4", "plan": "free", "tags": [ "rabbitmq" ], "credentials": { "url": "amqp://dlmcajkd:pZKLUcXPTb0ztT5z@172.30.48.106:12738/cnjxofbt" } } ] }
cf@debian:~/test-node$ vmc unbind-service rabbitmq-7f942 test-node Unbinding Service [rabbitmq-7f942]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$ vmc delete-service rabbitmq-7f942 Deleting service [rabbitmq-7f942]: OK cf@debian:~/test-node$
Redisと関連付けた場合
cf@debian:~/test-node$ vmc create-service redis --bind test-node Creating Service [redis-d5c4b]: OK Binding Service [redis-d5c4b]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$
VMC_APP_PORT: 51340 VCAP_APP_HOST: 172.30.49.164 VCAP_SERVICES: { "redis-2.2": [ { "name": "redis-d5c4b", "label": "redis-2.2", "plan": "free", "tags": [ "redis", "redis-2.2", "key-value", "nosql" ], "credentials": { "hostname": "172.30.48.42", "host": "172.30.48.42", "port": 5115, "password": "7c62e7d2-9ddc-4353-8c56-44a976b4ddc0", "name": "f5859f7f-79e4-4e98-ae59-f16f4c098666" } } ] }
cf@debian:~/test-node$ vmc unbind-service redis-d5c4b test-node Unbinding Service [redis-d5c4b]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$ vmc delete-service redis-d5c4b Deleting service [redis-d5c4b]: OK cf@debian:~/test-node$
MySQLと関連付けた場合
cf@debian:~/test-node$ vmc create-service mysql --bind test-node Creating Service [mysql-59566]: OK Binding Service [mysql-59566]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$
VMC_APP_PORT: 20170 VCAP_APP_HOST: 172.30.49.103 VCAP_SERVICES: { "mysql-5.1": [ { "name": "mysql-59566", "label": "mysql-5.1", "plan": "free", "tags": [ "mysql", "mysql-5.1", "relational" ], "credentials": { "name": "d2c8ba4cc2b644d92bbb87028f9ccca94", "hostname": "172.30.48.22", "host": "172.30.48.22", "port": 3306, "user": "u6Z3hFf472aeS", "username": "u6Z3hFf472aeS", "password": "puhN7ZFfWMxCU" } } ] }
cf@debian:~/test-node$ vmc unbind-service mysql-59566 test-node Unbinding Service [mysql-59566]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$ vmc delete-service mysql-59566 Deleting service [mysql-59566]: OK cf@debian:~/test-node$
なお、MySQLを操作するためのインターフェイスは2012年1月現在、Cloud Foundryには用意されていません。how to access MySql instance via MySql admin clientにて
Currently you can only get access to the service via an application that is bound to the service.
と述べられています。
PostgreSQLと関連付けた場合
cf@debian:~/test-node$ vmc create-service postgresql --bind test-node Creating Service [postgresql-72603]: OK Binding Service [postgresql-72603]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$
VMC_APP_PORT: 59532 VCAP_APP_HOST: 172.30.49.161 VCAP_SERVICES: { "postgresql-9.0": [ { "name": "postgresql-72603", "label": "postgresql-9.0", "plan": "free", "credentials": { "name": "dbf66107218bc4f48b6bdc9b6b46b6715", "host": "172.30.48.125", "hostname": "172.30.48.125", "port": 5432, "user": "u50e31499b8eb4373a1aa1237dbe71dd3", "username": "u50e31499b8eb4373a1aa1237dbe71dd3", "password": "pd283f0d46a06414ebc33061aef3e1a6b" } } ] }
cf@debian:~/test-node$ vmc unbind-service postgresql-72603 test-node Unbinding Service [postgresql-72603]: OK Stopping Application: OK Staging Application: OK Starting Application: OK cf@debian:~/test-node$ vmc delete-service postgresql-72603 Deleting service [postgresql-72603]: OK cf@debian:~/test-node$
MySQL同様、PostgreSQLを操作するためのインターフェイスは2012年1月現在、Cloud Foundryには用意されていません。Add console to PostgreSQL serviceにて
We have features under development/roadmap to provide additional features in our client tools (vmc etc.) to access cloud foundry services directly.
と述べられています。