Cloud Foundryを触ってみる。(デプロイ他)

環境変数を表示するための簡単なアプリケーションを作成し、デプロイしてみます。


Cloud Foundryではアプリケーションのホストやポート番号、インスタンス情報
その他諸々の環境変数JSON形式でENVに格納されているようです。
今回は数行のアプリケーションを作成・デプロイしてENVの中身を覗いてみたいと思います。


以下のRubyスクリプトを作成してください。

require 'sinatra'
require 'pp'
get '/' do
  "<pre>#{ENV.pretty_inspect}</pre>"
end


アプリケーションをデプロイするには「vmc push」。
上で作成したRubyスクリプトの置いてある場所で実行してみましょう。
対話形式でアプリケーションをデプロイできます。

$ vmc push
Would you like to deploy from the current directory? [Yn]: Y
Application Name: アプリケーション名
Application Deployed URL: 'アプリケーション名.cloudfoundry.com'? 
Detected a Sinatra Application, is this correct? [Yn]: Y
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G) 64M
Creating Application: OK
Would you like to bind any services to 'アプリケーション名'? [yN]: N
Uploading Application:
  Checking for available resources: OK
  Packing application: OK
  Uploading (1K): OK   
Push Status: OK
Staging Application: OK                                                         
Starting Application: OK

SinatraアプリかRailsアプリかといった事を自動的に判別してくれるみたいで賢いですね。
注意としては、Application Name で任意にアプリケーション名を入力しますが、
URLのドメイン名にも適用されるのでアンダースコアを含めない方がよいようです。


「Would you like to bind any services to …」はMySQL/Redis/MongoDBのサービスを
アプリケーションにバインドするかどうかの質問事項です。
今回はDBを利用しないのでN。


これでアプリケーションがデプロイされ、http://アプリケーション名.cloudfoundry.com で
アクセスできる状態となりました。
試してみてください。


なお、上記以外のpush方法は次のとおり。

  Application Creation
    push [appname]                               Create, push, map, and start a new application
    push [appname] --path                        Push application from specified path
    push [appname] --url                         Set the url for the application
    push [appname] --instances <N>               Set the expected number <N> of instances
    push [appname] --mem M                       Set the memory reservation for the application
    push [appname] --no-start                    Do not auto-start the application


アプリケーションの停止は「vmc stop アプリ名」、削除は「vmc delete アプリ名」で行います。
その他にもログなどのアプリケーション情報も参照できますが、それらの
コマンドは「vmc -h」で確認してください。


アプリケーションでMySQL/Redis/MongoDBの永続化の仕組みを利用するにはサービスを作成し、
アプリケーションへバインドします。
バインドされたサービス情報(サービス自体の情報やCredential(ホスト/ユーザー名/パスワードなど))
はENVの中のVCAP_SERVICESという変数に格納される仕組みのようです。
ですのでDBへの接続情報はENVをJSONとしてパースしVCAP_SERVICESのcredentialsから取得
する形となるものと思います。