まだプログラマーですが何か?

プログラマーネタ中心。たまに作成したウェブサービス関連の話も https://twitter.com/dotnsf

タグ:cloudfoundry

IBM Bluemix 環境に cf ツールでアプリケーションを push した後にログが表示されますが・・・
2015021601



このログを詳しく調べて、「コマンド実行後に何をやっているのか?」の説明をします。

なお、今回の説明内容の前提として、2015/02/16 時点の、Liberty Java アプリケーション(war ファイル)1インスタンスをデプロイしています。このアプリケーションでは MySQL をデータストアとしてバインドしています。その条件下でのログを紹介します:

まずログ全文はこんな感じです:
$ cf push dotnsf-20150212 -p GeoImgWeb.war
Updating app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

Uploading dotnsf-20150212...
Uploading app files from: GeoImgWeb.war
Uploading 2.4M, 258 files
Done uploading
OK

Stopping app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

Starting app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
-----> Downloaded app buildpack cache (224K)
-----> Retrieving IBM 1.7.1_sr2fp1ifx-20141220 JRE (ibm-java-jre-7.1-2.1-pxa6470
_27sr2fp1ifx-20141220_02-sfj.tgz) ... (0.0s)
         Expanding JRE to .java ... (0.8s)
-----> Retrieving App Management Agent 2015.02.04_102631 (com.ibm.ws.cloudoe.app
-mgmt-proxy-agent.zip) ... (0.0s)
         Expanding App Management to .app-management (0.0s)
-----> Downloading and installing client jar(s) from https://download.run.pivota
l.io/mariadb-jdbc/mariadb-jdbc-1.1.8.jar (0.0s)
-----> Auto-configuration is creating config for service instance 'mysql-x3' of
type 'mysql'
-----> Liberty buildpack is done creating the droplet



-----> Uploading droplet (116M)

0 of 1 instances running, 1 starting
1 of 1 instances running

App started


OK

App dotnsf-20150212 was started using this command `.liberty/initial_startup.rb`


Showing health and status for app dotnsf-20150212 in org (ユーザー名) / spa
ce dev as (ユーザー名)...
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: dotnsf-20150212.eu-gb.mybluemix.net
package uploaded: Mon Feb 16 01:15:44 +0000 2015

     state     since                    cpu    memory           disk
#0   running   2015-02-16 10:16:46 AM   2.8%   149.4M of 512M   182M of 1G

$ 

まず、push コマンド:
$ cf push dotnsf-20150212 -p GeoImgWeb.war

で「dotnsf-20150212 という Bluemix アプリケーションに、GeoImgWeb.war という Java アプリケーションをデプロイする」という命令をしています。この GeoImgWeb.war はカレントディレクトリに存在しているものとします。

その直後のログは以下のようになっています:
Updating app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

Uploading dotnsf-20150212...
Uploading app files from: GeoImgWeb.war
Uploading 2.4M, 258 files
Done uploading
OK

Stopping app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
OK

デプロイ先のアプリケーションを更新するため、GeoImgWeb.war をアップロードして、そして dotnsf-20150212 を一旦停止しています。ここまではまあ一般的というか、Bluemix / Cloud Foundry 環境に特化した内容ではないのでわかりやすいと思います。

この後から少し特殊な処理になります:
Starting app dotnsf-20150212 in org (ユーザー名) / space dev as (ユーザー名)...
-----> Downloaded app buildpack cache (224K)
-----> Retrieving IBM 1.7.1_sr2fp1ifx-20141220 JRE (ibm-java-jre-7.1-2.1-pxa6470
_27sr2fp1ifx-20141220_02-sfj.tgz) ... (0.0s)
         Expanding JRE to .java ... (0.8s)
-----> Retrieving App Management Agent 2015.02.04_102631 (com.ibm.ws.cloudoe.app
-mgmt-proxy-agent.zip) ... (0.0s)
         Expanding App Management to .app-management (0.0s)
-----> Downloading and installing client jar(s) from https://download.run.pivota
l.io/mariadb-jdbc/mariadb-jdbc-1.1.8.jar (0.0s)
-----> Auto-configuration is creating config for service instance 'mysql-x3' of
type 'mysql'
-----> Liberty buildpack is done creating the droplet

dotnsf-20150212 を起動する処理の中身です。Java アプリケーションとしての基板となる Liberty Buildpack をダウンロードし、IBM Java 1.7.1 & App Management Agent & MariaDB JDBC 1.1.8 を続けてビルド(実際にはダウンロード)しています。これらはビルドパック内で定義されている処理です。これで droplet と呼ばれる実行可能なアプリケーションが作成されます。

その後、作成した droplet をアップロードしてアプリケーションインスタンスを起動します。ここでちょっと時間がかかります:
-----> Uploading droplet (116M)

0 of 1 instances running, 1 starting
1 of 1 instances running

App started

OK

実はここまでの段階でアプリケーションとしては利用可能になっています。最後にアプリケーションやサーバーリソースの状態を確認するためのコマンドが実行され、その結果が表示されています:
App dotnsf-20150212 was started using this command `.liberty/initial_startup.rb`


Showing health and status for app dotnsf-20150212 in org (ユーザー名) / spa
ce dev as (ユーザー名)...
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: dotnsf-20150212.eu-gb.mybluemix.net
package uploaded: Mon Feb 16 01:15:44 +0000 2015

     state     since                    cpu    memory           disk
#0   running   2015-02-16 10:16:46 AM   2.8%   149.4M of 512M   182M of 1G

CPU やメモリ、ディスクリソースの状態と合わせてアプリケーションの状態が最後に表示されています。この例ではサーバーは1インスタンスなので1行だけで表示されていますが、複数インスタンスで起動している場合は複数行の結果になります。



 

久しぶりに IBM Bluemix ネタを書いてみよう。

これまで「IBM Bluemix は CloudFoundry をベースとした PaaS 環境」と紹介してきました。これはこれで間違いではないのですが、Bluemix のサービスとして提供されている機能がどんどん進化していて、今では Docker コンテナもサポートされている、らしい(けど今だと見つからない??)。 とはいえ、ベースが CloudFoundry であることは変わっていません。

CloudFoundry 環境にアプリケーションをデプロイしようとすると、cf というコマンドラインツールを使います。これは IBM Bluemix でも変わりません。IBM Bluemix(CloudFoundry) を使ってアプリケーション開発をしたり、作ったアプリケーションをデプロイしたりする際の方法はいくつかありますが、やはり cf ツールを導入しておくと便利です。

というわけで、その cf ツールをインストールする手順を紹介します。以前は環境依存でややこしかったりしていた部分ですが、今はかなり楽になりました。ちなみに以下で紹介する内容は CentOS 6(64bit) を前提としていますが、ほとんど変わらないと思います。

まずはこちらのサイトへアクセス: https://github.com/cloudfoundry/cli/releases
2015010601


で、環境にあった CF の最新バージョンの "Installer" をクリックしてダウンロードします。CentOS(64bit) の場合であれば RedHat 64bit と書かれた所のをダウンロード:
2015010602


そしてダウンロードしたモジュールをインストールします。CentOS の場合は rpm ファイルがダウンロードできるので、以下のコマンドでインストールできます:
# rpm -ivh cf-cli_amd64.rpm

インストール後にバージョン確認コマンドを実行して、表示されればOK:
# cf -v
cf version 6.8.0-b15c536-2014-12-10T19:26:38+00:00










 

Cloud Foundry をベースとした PaaS 環境である IBM Bluemix が正式サービスとなり、価格も発表されました:
IBM Bluemix : Pricing Sheet

Bluemix の場合、アプリケーションサーバーと、サービスと呼ばれる(データベースとかSSOとかの)パーツとで別々の課金が行われて、利用料金という意味ではその合計になります。サービスの価格はサービスの種類によっても異なるので後述します。 で、アプリケーションサーバーの価格を見ると(2014/07/17 時点では)「メモリ1GBの仮想マシンを1時間使うと $0.07 」と設定されています。サーバーインスタンスに搭載しているメモリ量で時間課金、というタイプです。計算を楽にしたいので、仮に $1 = 100円とすると1時間7円ということになります。

ちなみに Bluemix のアプリケーションサーバーはデフォルトではメモリ512MB(0.5GB)で稼働します。つまり1時間3.5円。一ヶ月を30日とすると、1サーバーインスタンスの月額は 3.5 x 24 x 30 = 2520円です。
2014041701


このスペックをモデルケースとして、これが安いのか高いのか?、ということを考えてみます。

比較対象を「本家」の Cloud Foundry としましょう。こちらの料金体型もメモリ量での時間課金タイプですが、料金は1GBを1時間使うと $0.03 、ここだけ見ると Bluemix の半額以下です。同じ条件で512MBメモリを搭載した1サーバーの月額にすると 1.5 x 24 x 30 = 1080 円ということになります。
2014041702


とりあえず、同一条件の1アプリケーションサーバーを使った場合の料金は CloudFoundry の方が半分以下になる、ということはわかりました。ただ現実はそこまで単純ではありません。

ここまでの話はあくまで「アプリケーションサーバーの料金」です。多くの場合、アプリケーションはアプリケーションサーバー上にデプロイして動作させますが、同時にデータベースサーバーなども必要になります。

CloudFoundry の場合、データベース(例えば MySQL)サーバーを1つ追加しようとすると、アプリケーションサーバーと同一のマシンに MySQL サーバーも入れてしまう、という選択肢はありますが、さすがにメモリ 512MB で両方動かすのは無理ではないにしても厳しいと思われます。というわけでメモリを増やすとか別途データベース用サーバーを1台追加することになり、同じスペックのマシンだったとしても2台分の料金(1080 x 2 = 2160 円)が必要になります。メモリを倍に増やした場合も同額です。

一方 Bluemix の場合、データベースサーバーは「サービス」として提供されており、サービスは制約の中であれば無料で使うことも可能です。例えば MySQL は無料、PostgreSQL も無料、SQL DB(DB2) はデータ量2GB以内の1インスタンスであれば無料、といった具合です。制約といってもデータ量2GBまで使えるのであれば、結構多くのケースで無料利用ができると思っています。しかもこれらのサービスはいわば DBaaS として提供されており、Buildpackの用意やアプリケーションの導入などは不要ですぐに使いはじめることができます。つまりデータベースは(制約の中であれば)無料で追加できるオプションとなっているので、利用料金は変わらずアプリケーションサーバー代のみの 2520 円ということになります。
2014041703


この時点でもかなり差がなくなってきました。更に、例えば MongoDB などの no-SQL データベースサーバーを追加したり、データ高速化の memcached サーバーを追加したりすると、CloudFoundry ではサーバー構築の手間が増えるだけでなく、これらのサーバーを追加することになるので、もう1台、更にもう1台・・・とコストもどんどん高くなっていきます。

一方、Bluemix ではこれらのサービスも制約の中ですが無料で使える範囲が設定されています。つまりサービス用のサーバーは増えてもコストは変わらずアプリケーションサーバー代の 2520 円のままで利用することもできるのです。ここまでの環境トータルで考えると Bluemix の方が安くなっていることも珍しくないと思っています。
2014041704


だからといって Bluemix の方が得とも言い切れない所が難しいです。CloudFoundry では Buildpack を用意することで「サーバー1台で済ませる」という選択肢もあり、同一スペック1台での比較となると上記のように CloudFoundry の方が安いのです。 一方 Bluemix のサービスは無料の枠が用意されてはいるものもありますが、その枠を超えて利用する場合には有料となります。無料枠は利用するサービスの種類によっても異なるので、その辺りは設計後に正しく見積もる必要がでてきます。
2014041705


最終的にはシステム構築に必要なサーバー構成を冗長化なども含めて検討した上で選択する、ということになるのだと思います。そこまで含めても Cloud Foundry と比較した Bluemix の価格が一概に高いとは言えない(安いとも言えない)と感じています。 

ただシステム構成が複雑になればなるほどアプリサーバーの課金がメインとなる Bluemix に割安感が出てくるんだろうな、という印象を持ちました。 また比較対象を PaaS ではなく、AWS などの IaaS と比べてみても、アプリケーションサーバーとデータベースサーバーとあれとこれと・・・まで付けて月額 2530 円~ であれば充分に価格競争力もあるんじゃないかな、と思えます。


 

オープンベータが続けられてきた IBM Bluemix が 7/1 にGA(Generally Available)を迎えました:
IBM Bluemix General Availability! 
2014070101


同時にこれまでの無料トライアル期間も終了しました。今後、新たに利用申し込みをすると1ヶ月間の無料トライアル期間が与えられます。 またこれまで無料トライアルを使っていたユーザーは自動的に1ヶ月間の無料トライアルアカウントが引き継がれて、これまで Bluemix 上で作成したアプリはまだそのまま有効になっている模様です。


まだ一部の情報しか公開されていないようですが、分かる範囲でその内容を、個人的な感想も交えて紹介します。なお以下の情報は 2014/07/01 現在の情報であり、今後変更の可能性があることをご了承ください。

もっともインパクトの大きな発表は、これまで公開されていなかった IBM Bluemix の利用価格が一部発表されていることです:
IBM Bluemix : pricing
2014070102


ランタイム(ウェブアプリケーションサーバー)は利用メモリで課金され、メモリ1GBを1時間使うごとに US$0.07 と記載されています。単純にメモリ1GBのサーバーを1ヶ月(=30日)使うと仮定すると、
  0.07 * 24 * 30 = 50.4
なので月額 US$50.4 課金される、ということになると思います。
2014070103


なおランタイムはデフォルト状態ではこの半分の 512MB メモリで稼働します。なのでデフォルトのまま使うとアプリサーバー1台あたり、この半分の US$25.2 ということになります。

またプライスリストを見る限り、無料枠が提供されているように思えます。ランタイムの無料枠については
  375 GB-hours per month (shared across all runtimes)
と記載されています。解釈を間違っていたらどなたか指摘いただきたいのですが、これは
  全ランタイム合計で、月に 375 時間/GB のメモリ利用までは無料
という意味だと思います。

仮に1ヶ月を30日とすると、1ヶ月は 720 時間あります。1GB メモリのマシンを1ヶ月続けて使うと 720 時間/GB 使うことになります。これだと無料枠(375)を超えてしまいます。

でも(デフォルトの) 512MB メモリのマシンであれば、1ヶ月続けて使っても 360 時間/GBなので無料枠で収まることになります(1ヶ月=31日計算でもギリギリOK)。つまりアプリケーションサーバーのランタイムはデフォルトの 512MB メモリサーバーを1台使い続ける分には無料枠内で使える、ということだと思っています。 

あるいは計算上は 256MB メモリのサーバーを2台使い続けることも無料枠内でできる、とも言えます。まあ、256MB でアプリケーションサーバーがまともに動くかどうかはわかりませんが・・・


一方、サービスについては「一部のみ価格が公開された」という印象です。例えばビッグデータ用 DBaaS である BLUAcceleration の記載はまだないので、BLUAcceleration の利用価格はよくわかりません。

ただ IBM ソフトウェアを使ったサービスに関しても無料枠が設定されているように見受けられます。例えば SQL database サービスは IBM DB2 をバックエンドに使える DBaaS ですが、価格欄には
  $30.00 USD/Instance
  2 GB free per instance.
と記載されています。
2014070104


この 2GB はおそらくディスク容量だと思うので、「2GB のデータまでは無料」と解釈できます。本当だとしたら、本来有償製品である DB2 を、2GB まで無料で、しかも DBaaS 環境で使える、ということになり、これはかなりお得な気がしています。 「課金が始まったら絶対高いに決まってる」と思っていたので、いい意味で期待を大きく裏切られました。

ちなみに、先日僕がブログで公開したオンライン TwiML エディターは Bluemix 上で動いていますが、アプリケーションサーバーは Liberry for Java で、バックエンドデータベースはこの SQL Database を使ってます。アプリケーションサーバーのメモリを 512MB 以内にしておけば無料枠内で稼働を続けることができそうです。

この SQL Database 以外にも Git Hosting など無料で提供されるサービスが他にもあり、無料枠内だけでもそこそこ使えるパブリック CloudFoundry 環境、と言えそうな条件です。これは使わないと損ですね。


なお本家 CloudFoundry の価格はメモリ 1 GB あたり一時間 US$0.03 です。これだけを見ると Bluemix の半分以下に見えます。ただ Bluemix は上述のように無料で使える各種サービスが充実していて、それらを組み合わせて使うことを考えると、一概に Bluemix が高いとはいえなくなると思っています。


先日の IBM XCITE イベントの中で、IBM BlueMix のアプリケーション開発コンテストの開催が発表されています:
IBM BlueMix Challenge
2014052501



このブログでも何度か触れてきましたが、IBM BlueMix は、いわば「IBM 版 CloudFoundry」です。IBM の提供するクラウド上に CloudFoundry 環境が構築されており、現在は無料ベータ版という扱いで誰でも利用することができるようになっています。素の CloudFoundry と異なるのは IBM ソフトウェア製品も利用可能なサービスとして統合されているので、BlueMix 上で Java アプリケーションサーバーや DB2 を始めとするデータベースサーバーなども利用できるようになっている点です。BlueMix 上で稼働する IBM 製品については原則的に IBM からの製品サポートが提供され、それ以外のものについても一部はサードパーティからの製品サポートが提供される、という形態になっています。

この BlueMix 環境上でアプリケーションを開発/構築するというコンテストです。なお、コードそのものの良し悪しだけで判断されるわけではなく、用意されたサービスをどのように組み合わせて、どのようなイノベーションを実現するか、という総合的な判断に基づくコンテストのようです。

気になる商品は Mac Book Pro やルンバといった、デベロッパー(やその家族)が喜びそうなものが用意されています。実際にはこれらの中でも上位機種が準備されているとの噂も・・・


参加する場合、6月30日までにそのための登録申請を行う必要があります。アプリケーションそのものは申請の段階で開発されている必要はなく、アプリケーションの提出期限は8月12日となっているようです。


注目の PaaS 環境である Cloud Foundry のアプリケーションを開発するいい勉強の機会にもなるし、あわよくば Mac Book Pro も手に入れるチャンスです。普通にアプリを開発できれば BlueMix(Cloud Foundry)対応はさほどハードルが高いとは思わないので、多くの開発者にチャンスがあると思います。


「興味はあるけど、まだあまりよく BluxMix(Cloud Foundry) 分からないんだよなあ・・・」という方は、拙作ですが、以下の僕のブログエントリがお役に立てれば幸いです:

- BlueMix を使う
- BlueMix のダッシュボードとデータベースサービスを使う
- BlueMix 上で PHP アプリを動かす
- BlueMix を使ってみて
- BlueMix で Twilio を使う
- BlueMix 向けに(Java)アプリを開発するといいことはあるか?
- BlueMix 向け Twilio アプリのサンプル
- BlueMix 開発コンテストが開催されるらしい
- BlueMix のデータストア比較
- BlueMix の cf コマンド
- BlueMix 上の DB2 をハック
- MySQL が 3306 番以外のポートで動いている時の WordPress 設定
- モバイル向けdeveloperWorks ページを作ってみた





 

このページのトップヘ