@ITのメルマガでBluemix無料トライアルスタートキャンペーンの広告をみつけました。30日間無料で使えて先着400名にiTunesギフト券2500円分があたります。クレジットカードの入力も不要なので、さっそく個人アカウントを作成して、先日Pivotal Web ServicesにデプロイしたSpring Bootのjarを、変更をすることなくBluemixにもデプロイできるか試してみます。
Liberty for Java
Spring BootのLiberty for Javaアプリとして、Liberty Buildpackを使います。ドキュメントはCreating apps with Liberty for Javaにあります。
Boilerplates
Bluemixにログインしてカタログのページを見ると、Pivotal Web Servicesと異なりBoilerplatesというカテゴリがあります。Boilerplatesは言語のRutimesとRDBなどのサービスがセットで予め構成されているので、やりたいことがBoilerplatesにあれば、まとめて構築できます。
SQL Database
今回はBoilerplatesを使わず、RDBは個別のサービスを選択します。Bluemixの場合のRDBはSQL DatabaseというDB2のインスタンスを使えます。
cloudfoundry/cli
CloudFoundryのcfコマンドツールは、Pivotal Web Services用にインストールしたバイナリをそのまま使います。エンドポイントをクリアするために一度logoutします。
$ cf --version |
Bluemixにlogin
Dashboard画面右上のRegionを確認するとUS South
になっています。ドキュメントページのBluemix concepts対応表ではエンドポイントは以下になります。
$ cf api https://api.ng.bluemix.net |
最初にcfコマンドから、Bluemixにloginします。
$ cf login -a https://api.ng.bluemix.net |
Bluemixにpush
プロジェクトにあるgradlewを使い、JARファイルをビルドします。
$ git clone https://github.com/masato/spring-cloud-sample |
JARファイルをBluemixにデプロイします。JavaのBuildpackのバージョンは1.7.1です。このアプリはJava8でビルドしているので、デプロイに失敗しているようです。downのまま先に進みません。Ctl-Cでプロセスを終了させます。
$ cf push masato-hello -p build/libs/helloconfig-0.0.1-SNAPSHOT.jar |
Java7でビルドする
build.gradleを編集して、Java7を指定します。
//sourceCompatibility = 1.8 |
ビルドをし直して再度pushすると、デプロイに成功しました。
$ ./gradlew clean build |
SQL Databaseサービスインスタンスを作成
MarketplaceからSQL Databaseサービスを探します。
$ cf marketplace | grep sql |
SQL Databaseサービスのインスタンスを作成します。
$ cf create-service sqldb sqldb_small mydb |
SQL Databaseサービスのバインド
SQL Databaseサービスをアプリケーションとバインドして、アプリケーションをリスタートします。
$ cf bind-service masato-hello mydb |
確認
curlコマンドを使って、CloudFoundryにデプロイしたアプリに接続します。残念ながら、組み込みのH2の接続情報が表示されてしまいます。
$ curl masato-hello.mybluemix.net |
Pivotal Web Servicesと比較
Pivotal Web Servicesへpushしたときのログでは以下でした。
-----> Java Buildpack Version: v2.5 | https://github.com/cloudfoundry/java-buildpack.git#840500e |
Pivotal Web Servicesは以下の組み合わせになります。
- Java Buildpack Version: v2.5
- Open Jdk JRE 1.8.0_25
- Spring Auto Reconfiguration 1.5.0_RELEASE
一方、Bluemixの場合は以下のような組み合わせになります。同じJARを使っても、Spring Cloudを使ってauto-reconfigurationをしてくれないようです。
- Liberty Buildpack Version: v1.9
- IBM 1.7.1 JRE
- Auto Reconfiguration 1.5.0_RELEASE
まとめ
Liberty BuildpackでもSpring Auto Reconfigurationが入るように調べていこうを思います。
- Java8でなく、IBM 1.7.1 JREを使っている
- Spring Auto Reconfigurationがdropletに入らないので、デフォルトでSpring Cloudが使えない
- 自動的に@Profile(“cloud”)を判断して有効にしてくれない