Java開発者のためのCloud Foundry講座【Part 1 基本編】

USING CLOUD FOUNDRY SERVICES WITH SPRING: PART 1 – THE BASICS(意訳)

(Posted on October 13th, 2011 by Ramnivas Laddad in Cloud ComputingCloud FoundrySpring.)

開発者は、CloudFoundryが提供するPostgres,MongoDB及びRabittMQなどのアプリケーションサービスを使ったアプリケーションをCloudFoundry上で効率的に構築することができます。ローカルの開発環境で行う煩わしいミドルウェアのインストール、設定作業を気にせずに、開発者はアプリケーションサービスを選択し、利用することができます。例えば、クルーシャルなトランザクションアクセスを必要としているアプリケーションの場合は、Postgresを選択し、ドキュメント形式のデータを扱う場合には、MongoDBのサービスを選択でき、開発を勧めることができます。今回、ご紹介する4回のブログ連載で、SpringアプリケーションがCloud Foundryで提供しているPostgres,MongoDB及びRabittMQなどアプリケーションサービスをどのように利用することができるのかご説明いたします。今回のPart1(Ramnivas Laddad著)で、CloudFoundryがアプリケーションサービスの環境情報をどのようにアプリケーションに提供しているのかご紹介します。次回のPart2Ramnivas Laddad著)では、典型的なSpringアプリケーションが、auto-reconfiguration機能を使ってパラメータの再設定なしにアプリケーションサービスをどのように利用することができるかを説明し、Part3Thomas Risberg著)では、クラウドサービスを明示的に制御するためのクラウド・ネームスペースの使い方。Part4Scott Andrews著)では、Spring 3.1の新機能であるプロファイルとクラウド・ネームスペースを組み合わせて使うことで、パラメータ変更することなしにローカルで開発したアプリケーションをPaaSクラウドへ展開する方法をご紹介いたします。

PostgresあるいはMongoDBなどのCloud Foundryサービスをアプリケーションがバインディングする場合、バインディングに必要な情報、例えば、バインディングされるCloud Foundryサービスのホストネーム、ポート番号、クリデンシャルなど情報は、JSON形式にエンコーディングされた環境変数として存在します。下記のコードは、Cloud Foundryサービスの環境変数を表示するシンプルなWebアプリケーションです。このアプリケーションは、Spring MVCテンプレートプロジェクトを使い、HomeControllerソースコードにエンドポイントとしてコードを追加いたしました。(このアプリケーションはgithubに公開されています。)

@RequestMapping("/env")
public void env(HttpServletResponse response) throws IOException {
    response.setContentType("text/plain");
    PrintWriter out = response.getWriter();
    out.println("System Environment:");
    for (Map.Entry<String, String> envvar : System.getenv().entrySet()) {
        out.println(envvar.getKey() + ": " + envvar.getValue());
    }
}

では、実際にこのアプリケーションをCloudFoundry上にデプロイしてみましょう。CloudFoundryプラグインが有効になっているSTSでも使えるのですが、今回はvmcツールを使うことにします。アプリケーション名を”env-hello”としてベースとなるデフォルトのURLをそのまま使うことにします(hello-env.clouddounry.com)。アプリケーション名をこの記事の通り使いたい場合は、Micro Cloud Foundryへアプリケーションをデプロイしてください。

$ vmc push hello-env -n
Creating Application: OK
Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (8K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

ここで、 ”http://hello-env.cloudfoundry.com/env”にブラウザのURLをナビゲートすると、1ページ全体にすべての環境変数を参照することができます。

VCAP_SERVICES: {}

何もサービスがバイディングされていない状態では、上記のように変数が空のマップが表示(JSON形式)されます。それでは実際にPostgresサービスを作成し、アプリケーション名を”env-postgresql”としてこのアプリケーションにバイディングしてみましょう。ここでvmcツールを使い下記のようにvmc create-serviceコマンドでサービスを作成いたします。

$ vmc create-service postgresql env-postgresql hello-env
Creating Service: OK
Binding Service: OK
Stopping Application: OK
Staging Application: OK
Starting Application: OK

もう一度、”http://hello-env.cloudfoundry.com/env”にブラウザのURLをナビゲートします。すると下記のようにVCAP_SERVICESの環境変数がJSON形式で表示されます。

{
    "postgresql-9.0": [{
        "name": "env-postgresql",
        "label": "postgresql-9.0",
        "plan": "free",
        "credentials": {
            "name": "de24667f9344b4eeaad6b5a2326d52faa",
            "host": "172.30.48.122",
            "hostname": "172.30.48.122",
            "port": 5432,
            "user": "u50ce600bba434bacbc99e034bb415644",
            "username": "u50ce600bba434bacbc99e034bb415644",
            "password": "pf4dca5bd449d4732841f0c4ae3f299d0"
        }
    }]
}

ここでは、アプリケーションが接続するに必要なすべての情報、ホスト名、ポート番号、作成されるJDBC URL名、更に接続に必要なユーザ名とパスワードが表示されます。(注意:将来バージョンではホスト名は省略される予定)
今度は、その他、MongoDBのサービスをバインディングしてみましょう。以下のようにvmcツールのコマンドを実行します。

$ vmc create-service mongodb env-mongodb hello-env

同様にブラウザを使って環境変数を参照します。

{
    "mongodb-1.8": [{
        "name": "env-mongodb",
        "label": "mongodb-1.8",
        "plan": "free",
        "tags": ["mongodb", "mongodb-1.8", "nosql"],
        "credentials": {
            "hostname": "172.30.48.68",
            "host": "172.30.48.68",
            "port": 25026,
            "username": "b8b312a0-9b43-4104-90f8-52f2ac8bc7c6",
            "password": "6a62732d-f820-4690-9bab-d1c85af13323",
            "name": "416e990a-6f81-46f9-abaa-1233a11ca5d6",
            "db": "db"
        }
    }],
    "postgresql-9.0": [{
        "name": "env-postgresql",
        "label": "postgresql-9.0",
        "plan": "free",
        "credentials": {
            "name": "de24667f9344b4eeaad6b5a2326d52faa",
            "host": "172.30.48.122",
            "hostname": "172.30.48.122",
            "port": 5432,
            "user": "u50ce600bba434bacbc99e034bb415644",
            "username": "u50ce600bba434bacbc99e034bb415644",
            "password": "pf4dca5bd449d4732841f0c4ae3f299d0"
        }
    }]
}

ここでも、MongoDBへ接続するに必要なすべての情報を参照することができます。このようにCloudFoundryでは、アプリケーションがアプリケーションサービスを利用するために必要な情報を取得することができます。この環境変数にアクセスするためには、環境変数をJSON形式でパーシングし、その結果を格納するアクセスオブジェクト(RDBならDataSourceなどのオブジェクト)作成するだけで、何かここで特別むずかしいことをやらせている訳ではありません。従って、CloudFoundryは、シンプルな設定でアプリケーションサービスに接続することができる仕組みを提供しています。

次回は、典型的なSpringアプリケーションが、auto-reconfiguration機能を使ってパラメータの再設定なしにアプリケーションサービスをどのように利用することができるかを説明いたします。


本ブログの記事は、USING CLOUD FOUNDRY SERVICES WITH SPRING: PART 1 – THE BASICSの意訳であり、完全な翻訳ではございません。所々、翻訳を省略しているところや、原本にはない文を追加しているところもございます。読み辛さを感じるところが多いと思いますが、ご了承ください。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。