Cloud Foundryに申し込んで使えるようになったので、Spring Roo in Actionの11章を参考にRooのアプリケーションをデプロイしてみました。
まずはroo shellからCloud Foundryを走査するためのAddonをインストールします。インストールの間自動的に認証されるよう、下記コマンドを実行します。
roo> pgp automatic trust Automatic PGP key trusting enabled (this is potentially unsafe); disable by typing 'pgp automatic trust' again
そして下記コマンドでAddonをインストールします。
roo> addon install bundle --bundleSymbolicName org.springframework.roo.addon.cloud.foundry;1.1.5.RELEASE Target resource(s): ------------------- Spring Roo - Addon - Cloud Foundry (1.1.5.RELEASE) Required resource(s): --------------------- Spring Beans (3.0.5.RELEASE) jcl-over-slf4j (1.6.1) slf4j-nop (1.6.1) Spring AOP (3.0.5.RELEASE) Servlet Specification API (2.5.0) Spring Core (3.0.5.RELEASE) Jackson JSON processor (1.6.2) Data mapper for Jackson JSON processor (1.6.2) Spring Context (3.0.5.RELEASE) Spring Roo - Wrapping - aopalliance (1.0.0.0010) Spring Web (3.0.5.RELEASE) slf4j-api (1.6.1) Spring Roo - Wrapping - Cloud Foundry API (0.0.1.0010) Optional resource(s): --------------------- Spring Expression Language (3.0.5.RELEASE) Spring ASM (3.0.5.RELEASE) Deploying...done. Successfully installed add-on: Spring Roo - Addon - Cloud Foundry [version: 1.1.5.RELEASE] [Hint] Please consider rating this add-on with the following command: [Hint] addon feedback bundle --bundleSymbolicName org.springframework.roo.addon.cloud.foundry --rating ... --comment ".. ."
Roo in Actionの例では "addon install bundle --bundleSymbolicName org.springframework.roo.addon.cloud.foundry" という感じにバージョン番号を指定していないのですが、これだと最新のバージョンがインストールされます。今回のケースではSpring Rooのバージョンが1.1.5なので、Addonのインストールでもバージョンを1.1.5に指定しないとこの時点の最新である1.2.0.RC1がインストールされてしまい、うまくいきません。
インストールが終了したら自動認証をOFFに戻します。
roo> pgp automatic trust Automatic PGP key trusting disabled (this is the safest option)
Addonをインストールしたことでcloud foundryコマンドが使用できるようになっています。まずはCloud Foundryにログインします。
roo> cloud foundry login --email xxxxxxxxxx@xxxxx.xxx --password xxxxxxxxxx Credentials saved. Logged in successfully with email address 'xxxxxxxxxx@xxxxx.xxx'
Cloud Foundryの環境についての情報を表示するには下記コマンドを実行します。
roo> cloud foundry info VMware's Cloud Application Platform For support visit http://support.cloudfoundry.com Target: http://api.cloudfoundry.com (0.999) User: hiroaki.akanuma@gmail.com Usage: Memory (128MB of 2048MB total) Services (0 of 16 total) Apps (1 of 20 total)
現在デプロイされているアプリケーションのリストは下記コマンドで確認できます。
roo> cloud foundry list apps =================================== Applications =================================== Name Status Instances Services URLs ---- ------ --------- -------- ---- akanumahello STARTED 1 akanumahello.cloudfoundry.com
上記の出力では akanumahello というアプリケーションがすでにデプロイされていることが分かります。
また、現在使用可能なサービスのリストは下記コマンドで確認できます。
roo> cloud foundry list services ======================= System Services ======================== Service Version Description ------- ------- ----------- mysql 5.1 MySQL database service postgresql 9.0 PostgreSQL database service (vFabric) mongodb 1.8 MongoDB NoSQL store redis 2.2 Redis key-value store service rabbitmq 2.4 RabbitMQ messaging service There are currently no provisioned services.
ではアプリケーションをデプロイしてみます。cloud foundry deploy コマンドでデプロイすることができます。
roo> cloud foundry deploy --appName cftest --path CREATE ~~中略~~ Operation could not be completed: 400 Bad Request
上記のように 400 Bad Request となってしまった場合は、--appName で指定したアプリケーション名がすでに使われているということなので、アプリケーション名を変更して再度デプロイします。
roo> cloud foundry deploy --appName cftestaka --path CREATE ~~中略~~ The application 'cftestaka' was successfully pushed
上記のように successfully pushed と出力されればデプロイ成功です。アプリケーションの一覧を確認してみます。
roo> cloud foundry list apps =================================== Applications =================================== Name Status Instances Services URLs ---- ------ --------- -------- ---- akanumahello STARTED 1 akanumahello.cloudfoundry.com cftestaka STOPPED 1 cftestaka.cloudfoundry.com
cftestakaというアプリケーションが一覧に追加されています。StatusがSTOPPEDになっていてまだ起動はしていないので、下記コマンドでアプリケーションを起動します。
roo> cloud foundry start app --appName cftestaka The application 'cftestaka' was successfully started roo> cloud foundry list apps =================================== Applications =================================== Name Status Instances Services URLs ---- ------ --------- -------- ---- akanumahello STARTED 1 akanumahello.cloudfoundry.com cftestaka STARTED 1 cftestaka.cloudfoundry.com
Status が STARTED に変わり、アプリケーションが起動されました。http://cftestaka.cloudfoundry.com/ にアクセスしてトップページが表示されれば起動に成功しています。
稼働中のアプリケーションの統計情報については下記コマンドで確認できます。
roo> cloud foundry view app stats --appName cftestaka ============================== App. Stats ============================== Instance CPU (Cores) Memory (limit) Disk (limit) Uptime -------- ----------- -------------- ------------ ------ 0 8.0 (4) 239.09M (256M) 28.0M (2048M) 0d:
さて、アプリケーションは起動しましたが、まだDBが使えるようになっていないので、Entityを操作するための画面に遷移しようとするとエラーになってしまいます。
まずはDBをサービスとして作成します。
roo> cloud foundry create service --serviceName cftesakadb --serviceType postgresql The service 'cftesakadb' was successfully created
サービスの一覧を確認すると、= Provisioned Services = の部分にサービスが追加になっています。
roo> cloud foundry list services ======================= System Services ======================== Service Version Description ------- ------- ----------- mysql 5.1 MySQL database service postgresql 9.0 PostgreSQL database service (vFabric) mongodb 1.8 MongoDB NoSQL store redis 2.2 Redis key-value store service rabbitmq 2.4 RabbitMQ messaging service = Provisioned Services = Name Service ---- ------- cftesakadb postgresql
次に、作成したサービスをアプリケーションに紐付けます。
roo> cloud foundry bind service --serviceName cftesakadb --appName cftestaka The service 'cftesakadb' was successfully bound to the application 'cftestaka' roo>
そしてアプリケーションを再起動します。
roo> cloud foundry restart app --appName cftestaka The application 'cftestaka' was successfully restarted
これでアプリケーションがDBを使えるようになり、EntityのCRUD画面も動作するようになります。
アプリケーションのログを確認するには下記コマンドを実行します。
roo> cloud foundry view logs --appName cftestaka --instance 0
長いので出力は省略しますが、stderr.logとstdout.logが閲覧できます。
それと現在のメモリの割当量は下記コマンドで確認できます。
roo> cloud foundry view app memory --appName cftestaka = Application Memory = Name Memory ---- ------ cftestaka 256MB
現在は256MBのメモリが割り当てられています。この割当量を変更するには下記のようにコマンドを実行します。
roo> cloud foundry update app memory --appName cftestaka --memSize 512MB = Application Memory = Name Memory ---- ------ cftestaka 512MB
メモリ量が512MBに変更されました。
RooとCloud Foundryの組み合わせなら簡単なCRUDアプリの公開はとてもスピーディーに行うことができそうです。まだCloud Foundryはベータ版なので、正式版になったときに料金体系などがどうなるかは気になりますが、Roo + Cloud Foundryで何か公開できるようなサービスでも作れないかなぁと思っています。