fbpx

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.

と述べられています。

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA