IBM 版の CloudFoundry である BlueMix を使ってみました。ペースとしては CloudFoundry の PaaS ですが、標準で用意されたアプリケーションサーバーや各種サービスに IBM ベースのものも使える、というもの。なので例えば Java アプリケーションサーバーとしての WebSphere Application Server Liberty Core (と思われるモノ)が選択するだけで使えるようになっています。DB サーバーには IBM DB2 も用意されていますが、MySQL や mongoDB、Redis といったオープンソース/コミュニティ系DBサーバーを選択することもできます。これら以外にも電話/SMS連携サービスである Twilio も連携サービスとして利用できるようになっているなど、無料で使えるサービスという意味でもアプリケーション開発者としてなかなか興味を惹かれるものがあります。なお "BlueMix" は現在ベータバージョンとしての公開であり、名称もコードネームのようです(今後変更の可能性もあります)。
BlueMix を使うには IBM ID および BlueMix のユーザー登録が必要です。IBM ID の新規取得方法についてはこちら(PDF)を参照ください。既に IBM ID を持っている場合、BlueMix のトップページより、"Join us in beta" と書かれたボタンをクリックします:

取得済みの IBM ID とパスワードでログインします:

IBM ID のメールアドレスにアクセスコードの書かれたメールが届きます。その内容を 300 秒以内にこの画面に入力して Submit します:

BlueMix に興味を持った理由を簡潔に記述し、また利用条件に対して "I Accept" を選択して Submit します:

この画面が出れば申し込みは完了です。BlueMix が利用可能になるまでしばらく待ちます:

審査が滞りなく進んで、BlueMix の利用が可能になると IBM ID のメールアドレスにその旨の通知が届きます。これで BlueMix にログインできるようになりました:

ログインができるようになった段階で改めて BlueMix のホームページにアクセスし、右上の "LOGIN" をクリックし、IBM ID とパスワードでログインします:

今度はこのような画面になりました。これが BlueMix のダッシュボードページです。この画面から現在の利用アプリケーションサーバーやサービスの状態を確認したり、アプリケーションサーバーやサービスの追加、その紐付け等を行うことができます:

今はまだアプリケーションサーバーもサービスも何も動いていません。とりあえずアプリケーションサーバーを1つ追加してみましょう※。
※実は後述のコマンドラインツールを使ってデプロイと同時に直接アプリケーションサーバーを作ってしまうことも可能ですが、このダッシュボードの使い方にも慣れておく必要があるのでここで作成します。
"Add an application" をクリックします:

アプリケーションサーバー(やサービス)として選択可能な一覧が表示されます。現時点では Liberty for Java や Node.js、 Ruby on Rails、Ruby Sinatora が選択できるようになっています。好きなものを選んでいいのですが、ここでは個人的に得意な Java アプリケーションサーバーを使いたいので "Liberty for Java" を選択してみます:

選択したアプリケーションサーバーの説明と確認が表示されます。ここで "CREATE APP" をクリックしてアプリケーションサーバーを作成します:

作成する Java アプリケーションサーバーの情報を入力します。といってもここで必要な情報はアプリケーションの名前とそのホスト名(***.ng.bluemix.net の *** 部分を指定)だけです。試しにこんな感じで入力してみましたがおそらくどちらも一意の名称である必要があると思います(なので早い者勝ち)。アプリケーション名をベースにホスト名が作られるようですが、後からホスト名だけを編集することも可能です。最後に "CREATE" をクリックします:

2014/03/26 訂正
ホスト名は全ユーザー内で一意の必要があるが、アプリケーション名はユーザーごとに一意であればよい、とのことでした。
ダッシュボード画面に戻ります。これだけで Java アプリケーションサーバーが出来て、ダッシュボード画面に追加されています。作成直後はまだ稼働状態にはなっていませんが、しばらく待つとこの Java アプリケーションサーバーが起動し、有効な状態になります:

有効な状態になるとこんな画面になります。この段階で(ホスト名である) kkimura1.ng.bluemix.net が公開され、アクセス可能な状態になっています:

試しにこの段階でウェブブラウザを使ってアプリケーションサーバーにアクセスするとこんな感じの画面が表示されます。デフォルトでは環境変数の一覧が表示されるようになっている模様です:

ではこの Java アプリケーションサーバーに自分で作った Java アプリケーション(warファイル)をデプロイしてみましょう。
現状、BlueMix サーバーとの対話はすべて専用の(というか CloudFoundry 用の)コマンドラインツール("cf")を使って行います。ということでまずは "cf" を入手する必要があります。cf のダウンロードページへ行き、少し下へスクロールすると各種プラットフォーム向けのインストーラバイナリがそろっているので、ここから自分の環境に合った cf インストーラをダウンロード&インストールします。

cf コマンドを実行して、コマンドラインヘルプが表示されればインストールは成功です:

最初に cf の環境設定を行う必要があります。アクセス先を BlueMix API に設定し、かつログイン情報(IBM ID とパスワード)を設定します。ちなみに入力しているのはピンクの文字部分で、(IBM ID) には IBM ID を、(パスワード)にはパスワードを指定しています:
これでデプロイ前の準備は完了しました。では実際にサンプルの Java アプリケーションを先ほど作成した kkimura1 アプリケーションサーバーにデプロイしてみます。今回はテスト用に(DBサーバーなどを使わずに)単独で動作する helloworld.war ファイルを使って試してみます。ご自身でデプロイしてみたい WAR ファイルがあればそれを使っていただいても構いません。もし手元にいいのがなくて、紹介するのと同じサンプルでよければこちらからダウンロード可能です: helloworld.war
↑名前から想像できると思いますが、ただの "HelloWorld" 表示アプリです。ブラウザが日本語仕様だと「こんにちは」になる程度の制御はしてますが・・・ BlueMix 用に作ったものではなく、普通のオンプレミス環境や EC2 などクラウド上に Tomcat などが導入されていれば使える、標準的な WAR ファイルです。
カレントディレクトリに helloworld.war が存在している状態で以下のコマンドを実行します。push コマンドに続いてアプリケーション名(kkimura1)、そして -p オプションで war ファイルを指定します:
余談ですが、この出力結果の中に Uploading droplet (92M) とありますね。helloworld.war 自体は数キロバイトなので、共通環境というか、Java アプリ用の前提環境がほとんどだと思います。一回のデプロイで 100Mbyte 近いアップロードがされるのだとしたら容量制限のあるモバイルテザリング環境で何度も試すには厳しいかも。。
さてデプロイできました。この状態で再度 http://kkimura1.ng.bluemix.net にアクセスすると、先ほどまでの環境変数一覧とは変わって、helloworld.war のアプリケーションが稼働している状態になっているのが確認できます:

今回用意した helloworld.war は DB も使わないごくごくシンプルな Java アプリケーションではありますが、普通のオンプレミス環境や Amazon EC2 などの一般的な IaaS 環境で動作する WAR ファイルです。それを1バイトも変更することなく、WAR ファイルのまま PaaS 環境にデプロイできる、というのはなかなかよくできているなあ、と感じました。
とはいえ、現実には DB を使った場合はどうやって接続するのか? どこを変えないといけないのか? IaaS 用の WAR ファイルパッケージとどこまで互換性を持たせたまま利用できるのか? 何ができて何ができないのか? といった疑問/問題もあります。その辺りをこのブログで引き続きレビューしていければ、と思っています。
BlueMix を使うには IBM ID および BlueMix のユーザー登録が必要です。IBM ID の新規取得方法についてはこちら(PDF)を参照ください。既に IBM ID を持っている場合、BlueMix のトップページより、"Join us in beta" と書かれたボタンをクリックします:

取得済みの IBM ID とパスワードでログインします:

IBM ID のメールアドレスにアクセスコードの書かれたメールが届きます。その内容を 300 秒以内にこの画面に入力して Submit します:

BlueMix に興味を持った理由を簡潔に記述し、また利用条件に対して "I Accept" を選択して Submit します:

この画面が出れば申し込みは完了です。BlueMix が利用可能になるまでしばらく待ちます:

審査が滞りなく進んで、BlueMix の利用が可能になると IBM ID のメールアドレスにその旨の通知が届きます。これで BlueMix にログインできるようになりました:

ログインができるようになった段階で改めて BlueMix のホームページにアクセスし、右上の "LOGIN" をクリックし、IBM ID とパスワードでログインします:

今度はこのような画面になりました。これが BlueMix のダッシュボードページです。この画面から現在の利用アプリケーションサーバーやサービスの状態を確認したり、アプリケーションサーバーやサービスの追加、その紐付け等を行うことができます:

今はまだアプリケーションサーバーもサービスも何も動いていません。とりあえずアプリケーションサーバーを1つ追加してみましょう※。
※実は後述のコマンドラインツールを使ってデプロイと同時に直接アプリケーションサーバーを作ってしまうことも可能ですが、このダッシュボードの使い方にも慣れておく必要があるのでここで作成します。
"Add an application" をクリックします:

アプリケーションサーバー(やサービス)として選択可能な一覧が表示されます。現時点では Liberty for Java や Node.js、 Ruby on Rails、Ruby Sinatora が選択できるようになっています。好きなものを選んでいいのですが、ここでは個人的に得意な Java アプリケーションサーバーを使いたいので "Liberty for Java" を選択してみます:

選択したアプリケーションサーバーの説明と確認が表示されます。ここで "CREATE APP" をクリックしてアプリケーションサーバーを作成します:

作成する Java アプリケーションサーバーの情報を入力します。といってもここで必要な情報はアプリケーションの名前とそのホスト名(***.ng.bluemix.net の *** 部分を指定)だけです。試しにこんな感じで入力してみました

2014/03/26 訂正
ホスト名は全ユーザー内で一意の必要があるが、アプリケーション名はユーザーごとに一意であればよい、とのことでした。
ダッシュボード画面に戻ります。これだけで Java アプリケーションサーバーが出来て、ダッシュボード画面に追加されています。作成直後はまだ稼働状態にはなっていませんが、しばらく待つとこの Java アプリケーションサーバーが起動し、有効な状態になります:

有効な状態になるとこんな画面になります。この段階で(ホスト名である) kkimura1.ng.bluemix.net が公開され、アクセス可能な状態になっています:

試しにこの段階でウェブブラウザを使ってアプリケーションサーバーにアクセスするとこんな感じの画面が表示されます。デフォルトでは環境変数の一覧が表示されるようになっている模様です:

ではこの Java アプリケーションサーバーに自分で作った Java アプリケーション(warファイル)をデプロイしてみましょう。
現状、BlueMix サーバーとの対話はすべて専用の(というか CloudFoundry 用の)コマンドラインツール("cf")を使って行います。ということでまずは "cf" を入手する必要があります。cf のダウンロードページへ行き、少し下へスクロールすると各種プラットフォーム向けのインストーラバイナリがそろっているので、ここから自分の環境に合った cf インストーラをダウンロード&インストールします。

cf コマンドを実行して、コマンドラインヘルプが表示されればインストールは成功です:

最初に cf の環境設定を行う必要があります。アクセス先を BlueMix API に設定し、かつログイン情報(IBM ID とパスワード)を設定します。ちなみに入力しているのはピンクの文字部分で、(IBM ID) には IBM ID を、(パスワード)にはパスワードを指定しています:
# cf login -a https://api.ng.bluemix.net -u (IBM ID) -p (パスワード) API endpoint: https://api.ng.bluemix.net Authenticating... OK API endpoint: https://api.ng.bluemix.net (API version: 2.0.0) User: (IBM ID) Org: (IBM ID) Space: dev
#
これでデプロイ前の準備は完了しました。では実際にサンプルの Java アプリケーションを先ほど作成した kkimura1 アプリケーションサーバーにデプロイしてみます。今回はテスト用に(DBサーバーなどを使わずに)単独で動作する helloworld.war ファイルを使って試してみます。ご自身でデプロイしてみたい WAR ファイルがあればそれを使っていただいても構いません。もし手元にいいのがなくて、紹介するのと同じサンプルでよければこちらからダウンロード可能です: helloworld.war
↑名前から想像できると思いますが、ただの "HelloWorld" 表示アプリです。ブラウザが日本語仕様だと「こんにちは」になる程度の制御はしてますが・・・ BlueMix 用に作ったものではなく、普通のオンプレミス環境や EC2 などクラウド上に Tomcat などが導入されていれば使える、標準的な WAR ファイルです。
カレントディレクトリに helloworld.war が存在している状態で以下のコマンドを実行します。push コマンドに続いてアプリケーション名(kkimura1)、そして -p オプションで war ファイルを指定します:
# cf push kkimura1 -p helloworld.war Creating app kkimura1 in org (IBM ID) / space dev as (IBM ID)... OK Creating route kkimura1.ng.bluemix.net... OK Binding kkimura1.ng.bluemix.net to kimura1... OK Uploading kkimura1... Uploading from: /tmp/helloworld.war 2.4K, 6 files OK Starting app kkimura1 in org (IBM ID) / space dev as (IBM ID)... -----> Downloaded app package (4.0K) OK -----> Downloading IBM 1.7.0 JRE from http://file.w3.bluemix.net/buildpack/jre/ibm-java-jre-7.0-6.0-linux-x86_64-small-footprint-uncompressed-jar-20140116.tar.gz (0.0s) Expanding JRE to .java (2.0s) Downloading from /icap/jazz_build/build/Core_Managed/build.image/output/wlp/com.ibm.ws.liberty-8.5.5.1-201402080619.tar.gz ... (0.0s). Installing archive ... (1.3s). -----> Uploading droplet (92M) 0 of 1 instances running, 1 starting 0 of 1 instances running, 1 starting 0 of 1 instances running, 1 starting 0 of 1 instances running, 1 starting 1 of 1 instances running App started Showing health and status for app kkimura1 in org (IBM ID) / space dev as (IBM ID)... OK requested state: started instances: 1/1 usage: 1G x 1 instances urls: kkimura1.ng.bluemix.net state since cpu memory disk #0 running 2014-03-25 01:43:51 PM 0.0% 74.3M of 1G 182.5M of 1G
余談ですが、この出力結果の中に Uploading droplet (92M) とありますね。helloworld.war 自体は数キロバイトなので、共通環境というか、Java アプリ用の前提環境がほとんどだと思います。一回のデプロイで 100Mbyte 近いアップロードがされるのだとしたら容量制限のあるモバイルテザリング環境で何度も試すには厳しいかも。。
さてデプロイできました。この状態で再度 http://kkimura1.ng.bluemix.net にアクセスすると、先ほどまでの環境変数一覧とは変わって、helloworld.war のアプリケーションが稼働している状態になっているのが確認できます:

今回用意した helloworld.war は DB も使わないごくごくシンプルな Java アプリケーションではありますが、普通のオンプレミス環境や Amazon EC2 などの一般的な IaaS 環境で動作する WAR ファイルです。それを1バイトも変更することなく、WAR ファイルのまま PaaS 環境にデプロイできる、というのはなかなかよくできているなあ、と感じました。
とはいえ、現実には DB を使った場合はどうやって接続するのか? どこを変えないといけないのか? IaaS 用の WAR ファイルパッケージとどこまで互換性を持たせたまま利用できるのか? 何ができて何ができないのか? といった疑問/問題もあります。その辺りをこのブログで引き続きレビューしていければ、と思っています。
コメント