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

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

タグ:cloudfoundry

Cloud Foundry をベースとした PaaS 環境は色々な会社から提供されていますが、その商用プライベート版の1つに Stackato (スタッカート)があります。

Stackato は(PaaS なので当たり前といえば当たり前ですが)ホスティングされた環境を利用することもできますし、Amazon EC2 や HP Cloud Services 上にデプロイして利用するためのパッケージも用意されています。また小規模向け限定だと思われますが、仮想環境用のイメージファイルをダウンロードすることで、自社のオンプレミスなどの全くのプライベートな環境内に構築して利用することも可能です。

この最後のケースですが、イメージファイルは VirtualBox / VMWare / vSphere / KVM 環境それぞれ用意されているので、これらのいずれかの環境があれば試してみることができます。

というわけで、自分の KVM 環境を使って Stackato を導入してみた時の様子を、最初のセットアップまで紹介します。仮想環境を今から用意するのであれば PC に VirtualBox をダウンロードしてインストールするのが手軽かな、と思っていますが、もし KVM 環境を整えるのであればこちらを参照ください:
CentOS に KVM 環境を構築する

まずは Stackato のイメージをダウンロードします。 ダウンロードサイトから目的の仮想環境にあったものを選んで "Direct" と書かれた箇所をクリックするとダウンロードが始まります(1ファイルが2GB近くあります):
2014051400


ダウンロードしたファイルを展開すると、選択した仮想環境用のマシンイメージファイルが現れます。Stackato V3.2.1 の KVM 用イメージであれば stackato-img-kvm-v3.2.1.img というファイル名でした(展開後のサイズは10GB近く)。


これを KVM 内で稼働させます。VirtualBox や VMWare など、他の環境を使う方はその環境なりの方法でイメージファイルを仮想マシンとして起動させてください。以下しばらくは KVM で仮想マシンマネージャーを使って起動させる場合の説明になります。

まずは KVM のホストマシン上で「仮想マシンマネージャー」を起動します:
2014051401


仮想マシンマネージャーが起動したら "localhost" と書かれた箇所を右クリックし、「新規」を選択します:
2014051402


作成する仮想マシンの名前を適当に(図では "stackato")入力します。また先程展開したイメージファイルから作成するので「既存のディスクイメージをインポート」を選択して「進む」をクリックします:
2014051403


「既存のストレージパス」には「参照」ボタンをクリックして、先程展開した Stackato のディスクイメージファイルを選択します。また「OS の種類」には "Linux" を、「バージョン」はこのイメージの元になっている "Ubuntu 10.04" を選択します:
2014051404


「メモリー」欄には Stackato に割り当てるメモリサイズを指定します。推奨値は 2GB 以上となっているので 2048(MB) と入力します。メモリに余裕がある環境であればもっと大きな数値でも構いません(但し、このダウンロードイメージを使う場合の上限は4GBらしいです)。なお1GB(1024) を指定した場合でも起動はしましたが、起動時に警告メッセージが表示されました。CPU は Stackato 環境に割り当てる仮想CPU数を指定してください:
2014051405


最後に内容を確認して「完了」をクリックします:
2014051406


Stackato 仮想マシンが起動している様子です:
2014051407



仮想イメージの起動が完了するとこんな感じの画面になります(IP Address はDHCPで割り振られた、この Stackato マシンのIPアドレスです)。また画面内に "https://stackato-mm7d.local" と書かれたURL(赤字部分は環境によって変わります)は管理コンソールへアクセスするための URL ですが、後で使うのでメモしておきます。
ここからは KVM に依存しない内容に戻ります:
2014051408


まずはこの Stackato 環境にログインしてみます。"l"(エル)キーを押して、ログイン画面に移ります。デフォルト状態ではユーザー名/パスワードともに "stackato" が設定されているので、この内容を入力してログインします:
2014051409


ログインできました。CPU やメモリの状態、内部アドレスなどが表示されてプロンプトになります。なお stackato ユーザーが sudo 権限を持っているので、sudo を使うことでシャットダウンやリブートを含めた管理者権限でのコマンド実行を行うことも可能です:
2014051410


管理コンソールへアクセスするには、自分の PC や仮想ホストマシンから先程のログイン画面に表示されていた URL にブラウザでアクセスします。が、このホスト名は Stackato が自動的に割り振ったものであって、当然ですがそのままでは(名前解決ができないため)アクセスできません。 これを解決するために DNS を設定してもいいのですが、手っ取り早い方法としてはブラウザを使うマシンの hosts ファイル(Unix/Linux 系であれば /etc/hosts、Windows 系であれば C:\Windows\System32\drivers\etc\hosts)を編集して以下の1行を追加します:
192.168.0.101 stackato-mm7d.local api.stackato-mm7d.local

この最初のアドレス部分は作成した Stackato 仮想マシンの IP アドレス(画面に表示されているもの)で、その右にホスト名、更にスペースを空けて api. を頭に付けたホスト名を記述します。

これでブラウザからホスト名指定でアクセスできるようになりました。改めてブラウザのアドレス欄に https://api.ホスト名/ (上記の一番右に追加した api. 付きの名前)と入力してアクセスします。すると以下の様な管理画面(の初期設定画面)が表示されます:
2014051411


それぞれ以下の内容を入力し、"Yes, I agree to the Stackato Terms of Services" にチェックを入れて、最後に右下の "Setup First Admin User" ボタンをクリックします:
- Username: 管理ユーザー名
- Email Address: メールアドレス
- User Password: 管理ユーザーのパスワード
- Confirm Password: (確認用)同じパスワード
- Organization Name: 組織名/社名
- Space Name: デプロイ空間名称(適当に "dev" とか)


するとログイン画面が表示されます。ここに先程入力した管理ユーザー名とパスワードを指定してログインします:
2014051412


正しくログインが完了するとこのような画面が表示され、各種管理機能にアクセスすることが可能になります:
2014051413


とりあえず導入から起動、そして一通りのセットアップをした上で、管理コンソールにアクセスするまでを紹介しました。

実際のアプリケーションのデプロイなどはもう少し調べた上で別途紹介したいと思っています。

(2014/May/17 追記)
続きはこちらです。


 

(↓2015/Jan/26追記)
このブログエントリに書かれている内容は最新のものではありません。ご注意ください。
また、こちらの記事も参照ください:
Bluemix 内の MySQL データベースでサイズが選択可能になった
(↑2015/Jan/26追記)


IBM BlueMix からは数多くのデータストアサービスが提供されています。RDB(リレーショナルデータベース)だけでも4つあります(青っぽい背景のが IBM 提供サービス、白背景のがオープンソースベースのコミュニティ提供サービスです):

※2014年4月23日時点の情報を元に記述しています。詳しくは各リンク先を参照ください。
サービス価格最大サイズ説明
BLUEAccelerationベータ期間は無料標準で圧縮後1GB(最大10GBまで拡張可能)サイズは圧縮後のサイズなので、実際にはこれら以上のデータを格納可能
SQLDBベータ期間は無料1GB最大接続数は2(BlueMix環境からのみ)
MySQL無料10MB最大接続数は1000
PostgreSQL無料30MB最大接続数は1000

容量10MB のデータベースって・・・ (^^;

ちなみに RDB 以外のデータストアサービスについてはこんな感じです:

サービス価格最大サイズ説明
JSON DBベータ期間は無料1GBJSON ストア型
MongoDB無料250 MBJSON ストア型
Redis無料N/A (?)KEY-VALUE ストア型
Mobile Dataベータ期間は無料(?)ローカルネイティブのように使えるモバイル向けデータストア


それなりに実用的な量のデータを格納しようとすると、IBM 提供のデータストアサービスを選ぶことになるんでしょうかね。リレーションなしと割りきって JSON 型の MongoDB を選ぶという選択もあるけど。

この表だとわかりにくい差もあると思っています。例えば MySQL や MongoDB などは管理コンソールを別途 phpMyAdmin や phpMoAdmin などで用意する必要があります(参照)。一方、BLUAcceleration や SQLDB には標準で管理コンソール機能が付属していたりします。
2014042201


ちなみに BlueMix のサービスで MySQL を立ちあげた場合、BlueMix 内のアプリケーションサーバーからしか接続できません。ただし BlueMix の外で稼働している MySQL に BlueMix のアプリケーションサーバーから接続することは(パフォーマンスに目をつぶれば)可能でした。なので意地悪く特定のポートが閉じられている、とかいうことはなさそうです。どうしても MySQL で10MB以上のデータを使いたい、ということであればデータベースだけは外部接続にする、という選択肢もありますね(遅いし、PaaS のメリットも薄くなるのでオススメしませんけど)。



とある人からBlueMix で開発すると何かいいことあるの?」と聞かれたので、その答をこのブログエントリに書いておきます。 まあ答は BlueMix というよりも、CloudFoundry 全般に言える内容なんでしょうけど。

この質問者の意図は「オンプレミス環境や IaaS 環境でアプリ開発した場合と比較して、BlueMix だとどれだけ楽に作れるの?」ということだったようです。Java アプリ開発に特化した内容はないのですが、BlueMix に興味を持っている層の人は Java が比較的多いのかな、と思ったので、一応 Java 開発者向けの前提で書いてみます。


で、僕の答はシンプルで「特別変わらない。そしてそれが素晴らしい」です。

「変わらないことが素晴らしい」とは、少し分かりにくいかもしれません。多少くどい話になってしまいますが、これは BlueMix ではない他の PaaS と IaaS 間の移植を考えたケースと比較すると分かりやすいかもしれません。

例えば Google App Engine  というグーグルの PaaS 環境があります。言語としては Java / Python / Go が使えて、データストアも KVS 型と SQL 型が選べて、メッセージング機能が含まれていたりする上に、負荷に合わせて勝手にスケールアウトしてくれます。しかもある制約の範囲内で利用する限りは無料! というなかなか魅力的な環境です(個人的にも使ってます)。

ただ大きな悩みが1つ。他の環境とのポータビリティがほとんどないのでした。App Engine というパブリックな PaaS 環境内で使う前提であればこれは問題にならないのですが、(一部でも)自社サーバー環境で構築し直したいとか、サーバーはどこぞのクラウドのを使いたいとか、そういった要件にそのまま対応ができないのでした。言語として Java が使えると書きましたが、一般的な意味での Java アプリケーションとは少々違うもの(というか、App Engine 専用の Java アプリケーション)なのです。

で、「とはいえ同じ Java で作ったウェブアプリケーションなんだから、移植すればいいのでは?」という発想にたどり着きますが、これがまたややこしい話というか・・・ 確かに同じ言語を使ってはいますが、アプリケーションとして全然違うもの(Eclipse レベルの話をすると、最初に新規作成するプロジェクトからして別モノ)です。AppEngine 環境では専用の Base64 エンコーダー/デコーダーなど色々便利なライブラリが付属してはいるのは事実なんですが、それらを使ってしまうと移植時には全く別の手段を探すことになってしまうのでした。なお同じことが一般的な Java アプリケーションを App Engine 向けに(逆向きに)移植する場合でも同じことが言えます。

僕自身は過去に2度、App Engine プロジェクトを一般的な Java アプリケーションプロジェクトに移植した経験があります。(制約面では厳しい環境から緩い環境になるので)たしかに出来ないことではないし、同じ言語なので一部コピペが使えるのも事実ではあるのですが、やはりどうしても移植しきれなくて、一部機能だけは App Engine に残して併用する、という運用を今も続けていたりします。

これは App Engine が悪いというわけではなく、それだけ便利な環境を提供してくれていることの裏返しでもあるのですが、その便利さに頼ってしまうと後戻りができなくなってしまう、ということだと思っています。いわゆる「ベンダーロックイン」です。ないとは思っていますが、もしも Google が App Engine というサービスを止めてしまった場合、もうこのサービスは諦めるか、腹をくくって同じ機能をゼロから作り直す必要があると思っています。

同じことはセールスフォースの force.com プラットフォームにも言えます。一応 Java ライクな言語でアプリ開発ができる、ということになっていますが、これはセールスフォース独自の APEX という、ちょっと違う言語を使うことになります。実際に移植経験があるわけではないのですが、移植性とかの話になるとかなり厳しいのではないかな、と思っています。

そしてこれは App Engine や force.com に限ったことではなく、PaaS という OS やミドルウェアの概念を意識させないような便利なプラットフォームサービスを利用する以上は避けて通るのが難しいものだと思っていました。現に IaaS や SaaS などと比べて、その中間に位置する PaaS についてはどのベンダーも苦戦気味ですが、それはこういった「資産を移植しにくい」という背景も関係しているのだと思っています。


・・・なんか長くなってしまいました。話を冒頭に戻します。

私自身が BlueMix を使って感じた特徴の1つ、それは「オンプレミス環境や IaaS 環境とのポータビリティ」だと感じてます。オンプレミス用に作成したり、現にいま Amazon EC2 環境で動いている Java アプリケーションが、ほぼ変更なしにそのまま BlueMix で動かすことができる、ということです。もちろん例外的なケースもあるとは思いますが、一般的なウェブアプリケーションであれば、バイナリの WAR ファイルをほぼそのまま(ケース次第では1バイトも変更せずに) BlueMix / 各種 IaaS / オンプレミス環境全てにデプロイ出来る、ということも可能になります。

特に Java アプリケーションの(オンプレミスや IaaS 用の)資産が手元にある場合、BlueMix では WebSphere Application Server をベースとした(と思われる)"Liberty for JAVA" という Java アプリケーションサーバー環境を標準提供しています。この辺りは IBM の得意分野でもあるのでしょうが、我々開発者や開発ベンダーが持っている Java アプリケーション資産を動かすための準備は既に提供されていることになります。

冒頭で「(BlueMix は他の環境と比べて)特別変わらない、それが素晴らしい」と書いたのはまさにこのことです。オンプレミス/IaaS を選ぶお客様もいれば PaaS 環境を選択するお客様もいます。開発者はその2つの環境用に異なるアプリケーションモジュールを準備しておく必要があります。でもその PaaS が BlueMix や CloudFoundry であれば、その適応のための変更という作業はほぼ不要になります。もしかしたらそのまま動いてしまうかもしれません。これがメリットでなくて何?ということを言いたかったのでした。


そしてもう1つの特徴、それは「オープン」であることです。BlueMix はオープンソースの CloudFoundry V2 をベースに作られています。そのため万が一 IBM が BlueMix サービスを打ち切ることがあっても、PaaS 環境としての CloudFoundry に移して運用を続けることもできますし、自社に CloudFoundry 環境を構築してオンプレミスな PaaS 環境(?)の上で運用を続けるという選択肢もあります。更に CloudFoundry の活発なコミュニティの中で開発・提供されている便利なツールや資料など、コミュニティのパワーを借りることができることもオープン環境の強みだと思っています。

アプリケーションを開発する立場では複数環境用の移植メンテナンスがほぼ不要で、シングルソースのまま各種環境向けの提供できるようになります。 また運用する側も CloudFoundry コミュニティから提供される各種情報を便りに、場合によってはコスト比較をしながら運用環境や体制を変えていくこともできるようになります。少し前の PaaS では考えにくかったこんなことが今はできるようになっているのでした。

もちろんこれだけではないのですが、こういったオープン性を背景にしたことによる BlueMix のアドバンテージは計り知れないと感じています。繰り返しになりますが、オンプレ/IaaS 用に開発された Java アプリケーションの WAR ファイルがもしかしたらそのまま、そうでなくても最小限の変更で PaaS 上で動くかもしれない、というのはやはり魅力的です。今は本家 CloudFoundry も有償版しかないので、無料で CloudFoundry が試せる環境という意味でも BlueMix はなかなかおいしくて気にいってます。CloudFoundry や PaaS に興味を持っているアプリ開発者の方は、BlueMix という名の CloudFoundry を試してみて、手元のアプリがどれだけ動くのか、動作確認だけでも早めにやっておくといいかもしれません。今なら無料なので(笑)。





 

2週間ほど BlueMix を使ってみました。今後も BlueMix 関連のブログエントリを書いていくつもりですが、一度この段階で感じたことなどまとめて書いてみます。なお過去のエントリはこちらです:
- 「BlueMix を使う」
- 「BlueMix のダッシュボードとデータベースを使う」
- 「BlueMix 上で PHP アプリを動かす」


まず「全体的によく出来てる」なあ、と感じました。BlueMix はウェブアプリケーションを「アプリケーション」、データベースなどの周辺機能を「サービス」として分けて提供しており、「アプリケーション」では Java や Node.js、Ruby、そして(標準機能ではないですが)PHP などを動かすことができます。また「サービス」は用意された選択肢から IBM 製品のものも、そうでないものも含めて選ぶだけで追加でき、アプリケーション側でそのサービスに接続するような記述をすることで連携して使える、というものになっています。

開発者視点でのウェブアプリケーション開発というのは、おおまかにはこの「アプリケーション」部分を作ることになるわけで、そこでは各種言語が使えるような柔軟性が提供されています。一方でデータストア等の「サービス」は選んで使うだけ、なので、ほとんど負担がありません。この分離方法は開発者視点でも非常に有用で理にかなっているな、と感じました。

自分の場合は Java アプリと PHP アプリを中心に、自分の手元にあるオンプレミスや IaaS 環境用のアプリがどの程度動くのか、動かすためにどの程度の変更が必要か、を調べながら使ってみましたが、「ウェブアプリに関してはほぼそのまま使える」という印象を持ちました。IaaS 向けのアプリが PaaS の環境で、それも war ファイルが war ファイルのまま(データベースの接続情報さえ変えれば)デプロイして動く、というのは感動すら覚えました。PaaS というと制約の多さや、IaaS/オンプレミス環境から移植性の難しさなどをイメージとして持ってしまいますが、BlueMix ではその辺りはかなり好印象でした。

もちろん、世の中のアプリすべてがウェブアプリケーションだけで完結しているわけではない(スケジュールエージェントやバッチ処理が必要なものもある)ことは理解しています。ただ少なくともウェブ部分に関しては BlueMix で動かすことはさほど高いハードルではないように感じています。


もうひとつ感じたことは「情報が意外と多い」ことです。これは BlueMix の情報が多いというよりは、そのベースとなっている CloudFoundry の情報として見つかることが多いという意味です。この辺りはオープンソースコミュニティの強みと言えますね。ただ現段階ではやはり見つかる情報は英語が多い、という現実があることも付け加えておきます。


一方で、2週間使ってみた上で???な点もあります。まずサービスの中身がよく分からない、という点を挙げたいです。例えば MySQL サーバーを使いたければサービスから MySQL を選ぶだけでいい、確かにその通りです。でもこうして作成された MySQL サーバーのスペックやバックアップ体制、デフォルトで用意されるデータベースの属性(デフォルト言語は UTF-8 になっているのだろうか??など)、、、簡単なのは悪いことではないのですが、簡略化されすぎていて、良くも悪くもブラックボックスに隠れちゃってる(それでいて情報がない)点が多いと思いました。この辺りは CloudFoundry というよりは BlueMix の運用体制に関わる部分なので、IBM からの情報として開示してほしい所ではあります。

あと、現状はオープンベータとして開発者中心に無料で自由に使える素晴らしい環境を提供いただいているのですが、このベータプログラムが終了した後の、実際に商用サービスとして始まる際の情報が少なすぎると感じます。要は「このオープンベータプログラムはいつまで使えるの」「商用版を使うのにいくらかかるの?」ということです。

ちなみに本家 CloudFoundry では「使ったサーバーのメモリ量」をベースに課金されます。例えば 512MB のメモリを搭載したサーバー2台と 1GB のメモリを搭載したサーバー1台を使った場合は 2GB 分の課金がされる、という具合。CPU や I/O、ネットワーク、そして中で使った OS、ソフトウェアへの課金はありません。ある意味でシンプルな課金体系になっています。

※なお、CloudFoundry の現在の具体的な料金は $0.03 /GB/Hour (1GB を1時間使うと3セント)です:
 http://dreamand.me/cloud/cloudfoundry-v2-review/

 仮にメモリ 1GB のサーバー1台を30日間使う場合であれば $0.03 * 24 * 30 = $21.6 という計算になります。


これが BlueMix ではどうなるのでしょう? CloudFoundry と同じような体系になることも想像できますが、そうでない体系になる可能性もあります。またサービスで提供されている機能の中には IBM の商用ソフトウェアも含まれており、これらが無料で提供されるとは考えにくいのですが、ではどういった料金(体系)になるのか? BlueMix には使いやすいダッシュボードや豊富なサービスによる差別化もあると思うのですが、とにかく現状は価格に関する情報が少なすぎる(というか皆無)ので、その辺りの情報が欲しいところではあります。


最後に、今僕自身が「日本で CloudFoundry に詳しい会社ってどこだろう?」と考えた時、真っ先に思いつくのは実際に社内で活用していて、ウェブに資料も多く公開している楽天です。次が実際にサービスを展開しているNTTコミュニケーションズ。残念ながら、現時点では日本アイ・ビー・エムという印象は薄いです。

今後、BlueMix を展開していく中で、日本アイ・ビー・エムがこの国内2強に割って入るような会社として認識されるような存在になってほしい、そのためにもまだ充分とはいえない日本人ユーザー向け情報や資料を BlueMix を推進していく中でどんどん充実させていってほしい、と感じています。













(2016/Feb/08 追記)
ここに書かれている内容のうち、特に phpMyAdmin を導入する部分の内容が古くなってしまったので、書き直しました:

Bluemix で phpMyAdmin を動かす



BlueMix に挑戦シリーズ(?)の第3回目です。以前のエントリはこちら:
「BlueMix を使う」
「BlueMix のダッシュボードとサービスを使う」


今回は BlueMix 上で PHP アプリを動かすことに挑戦してみます。「あ、自分は PHP 使わないので結構です」という方も少なからずいると思いますが、PHP を動かすことだけが目的ではないので、もう少しお付き合いください。

前回のエントリでは BlueMix 上にデータベースサーバーを加えて、アプリケーションサーバーと接続して利用できるようにしました。一般的なアプリサーバー <-> DBサーバーの2層トポロジーが作れたことになります。

ただし、この段階では「単に繋がっただけ」です。繋がっているのでアプリケーションサーバーからDBサーバーの情報を取り出したり、作成/更新したりはできますが、少なくとも現時点ではDBの中身は(テーブル定義も含めて)空です。アプリケーション側から JDBC などで SQL を使うことはできるので、"create table .." でテーブル定義を指定することはできるし、"insert into .." してデータベース/テーブルの初期状態を作ることもできますが、裏を返せばその辺りの準備がまだ全然できていない状態で単に繋がっている、ということです。

この辺りは開発者や開発会社のポリシーなどにもよるのかもしれませんが、僕個人の周囲ではこの「データベースの初期化」の処理はコマンドラインツールを使って自分の PC からデータベースサーバーに接続し、ダンプからまとめてドーン!とインポート、という方式を取ることが多かったりします。この BlueMix 環境でも同様にして初期化すればいいや、と思っていましたが、セキュリティ上の制約なのか、どうやら BlueMix 外の環境からは BlueMix 上のデータベースサーバー(少なくとも MySQL と mongoDB)への接続は許可されていないようです。ということは自分の端末のコマンドラインからインポート、という方法は使えませんね。。。うーん。。。
2014032701


そこで思いついた方法が「BlueMix 内でデータベースの管理アプリを動かしてしまう」という方法です:
2014032702

BlueMix 内にもう一台アプリケーションサーバー(上記例だと「DB管理用サーバー」と書かれた部分)を新たに用意して、そこにはデータベース(上記例だと MySQL)を管理するためのウェブアプリケーション(例えば phpMyAdmin)を導入します。こうすることで自分の PC から管理用サーバーへはウェブブラウザで、管理用サーバーからDBサーバーへはネイティブのドライバでそれぞれ接続する形になります。そしてこの管理アプリケーションの機能を経由してテーブルを作成したり、初期データをまとめてインポートしたり、といったメンテナンス作業ができるようにする、というアイデアです。アイデアというよりも普段普通にこういう構成を作ることも珍しくありませんよね(それが許可されていれば、ですが)。

ただし、この方法にも1つ問題があります。DBの種類にもよるのでしょうが、MySQL では上記のように有名な管理アプリとして phpMyAdmin があり、今回もこれを導入するつもりですが、phpMyAdmin を使うにはその名の通り PHP 環境が必要です(正確には PHP + HTTPD の環境)。同様にして mongoDB の管理アプリの1つに phpMoAdmin がありますが、こちらも PHP 環境が前提です。特にオープンソース系データベースサービスではその管理ツールが PHP で書かれていることが多いこともあって、BlueMix 上でデータベースサービスを使おうとすると、管理目的でこれらの PHP アプリを動かしたい、という需要はそれなりにあるのでは、と思っています。

一方、BlueMix の標準アプリケーションサーバーには Java と Ruby が用意されていますが、残念ながら PHP ベースのものは用意されていません(クローズドベータの頃は存在していた、という噂も聞いていますが・・)。制約の多い PaaS 環境で、Java アプリケーションサーバーに後から PHP や PHP アプリだけを追加する、というのも難しそうです。うーん、この方法も諦めざるをえないのでしょうか・・・


・・・というところで今回のブログエントリの冒頭部分に戻ります。要は各種 PHP アプリも動かしてみたいというわけではなく、DB サーバーのメンテナンス用アプリケーションとしての PHP + HTTP 環境が使えないだろうか、という背景があったのでした。

こうなると頼りになるのは IBM developerWorks、英語版のコミュニティを探してるとやはり見つかりました。しかもご丁寧なことに多バイト言語にも対応した PHP モジュールが用意されているようです。もう至れり尽くせり、これを使わせていただきましょう!
https://www.ibmdw.net/answers/questions/8925/how-do-i-connect-to-my-bluemix-mysql-service-to-setup-mysql-database/


導入の手順としてはこんな感じです:
前提としてまず cf ツールの動作環境は用意できていることとします。分からない方は以前のエントリを参照ください。
加えて、BlueMix 上に専用のアプリケーションサーバーを1つ作っておきます(種類はなんでもいいです)。名前は kkimura2、ホスト名は kkimura2.ng.bluemix.net としたと仮定します(この辺りの詳しい手順についても以前のブログエントリを参照してください)。自分で作った(る)環境に合わせて適宜読み変えてください。これからこのサーバーに PHP + HTTPD モジュールを導入してゆきます:
2014032703



作成したサーバーを稼働中の(管理したい) MySQL サーバーに紐づけます。まずは OVERVIEW に移ってから Services 欄の "Add existing service" をクリックします:
2014032704


どのサービスをアプリケーションサーバーに紐づけるかを設定します。この例では MySQL しか使っていないので1つしか表示されていませんが、目的のサービスを選択して OK をクリックします:
2014032705


OVERVIEW 画面に戻り、アプリケーションサーバーに MySQL サービスが紐づけられたことを確認します。この状態で紐付けられた MySQL サーバーへの接続情報を確認しましょう。左ペインの "LIBERTY FOR JAVA" をクリックします:
2014032706


一番下の Environment Variables 欄の VCAP_SERVICES の値を参照して、MySQL サーバーへ接続するための情報を確認してメモしておきます。必要なのは name(DB名)、hostname、port、username、そして password あたりです:
2014032707



ここからは cf ツールをセットアップした環境での作業になります。最初に専用のディレクトリを1つ新規に作ります。新規に作成する必要はありませんが、空のディレクトリを用意してください(ここでは /tmp/php というディレクトリを作りました):
# cd /tmp
# mkdir php
# cd php


用意した空のディレクトリに PHP のモジュールをまとめてコピーします。イメージとしては、このディレクトリがドキュメントルートになるので、ドキュメントルート直下に必要なファイルをすべて用意する、という感じ。今回は phpMyAdmin の最新版をダウンロード&展開&ディレクトリリネームして、phpMyAdmin というディレクトリの中に一通りのファイルが展開されているようにしました(phpMyAdmin/config.sample.inc.php というファイルが存在しているようにします):
# pwd
/tmp/php
# ls
phpMyAdmin
# ls phpMyAdmin
CONTRIBUTING.md
ChangeLog
README
  :
  :
(phpMyAdmin の構成ファイル)


PHP ファイルに DB 接続情報を設定します。phpMyAdmin の場合、phpMyAdmin 以下に config.sample.inc.php というテキストファイルがあるのでこれを config.inc.php という名前でコピーします:
# cd phpMyAdmin
# cp config.sample.inc.php config.inc.php


そして先ほどメモした内容を使ってその中身を編集します(余談ですが BlueMix の MySQL ってポート 3307 番で稼働してるんですね・・):
# vi config.inc.php

$cfg['Servers'][$i]['host'] = '(MySQL サーバーのIPアドレス)'; ←'localhost' から変更
$cfg['Servers'][$i]['port'] = '3307(MySQL サーバーのポート番号)'; ←この行を追加

もし phpMyAdmin 以外に導入したい PHP アプリがあれば、同様にこのディレクトリに入れておきます(そして必要であれば同様に接続先 MySQL サーバーの設定をしておきます)。自分の場合は PHP + MySQL の環境で動く WordPress も使いたかったので、同じディレクトリ内に wp というディレクトリを作成して、DB 設定ファイル(wp/wp-config.php)も用意&編集して入れておきました。この辺りは WordPress の一般的な導入手順の話なので、興味があればググってみてください。

で、自分の場合はもともと空だったディレクトリに phpMyAdmin と wp という2つのサブディレクトリが作られた状態になっています:
# pwd
/tmp/php
# ls
phpMyAdmin  wp


ではこのディレクトリをドキュメントルートとして PHP サーバーに(PHPサーバーごと)デプロイします。Cloud Foundry のコミュニティで用意された PHP サーバー用の BuildPack (の github リポジトリ)と、デプロイ先のアプリケーションサーバー名を指定して、次のように入力します:
# cf push -b https://github.com/dmikusa-pivotal/cf-php-build-pack.git kkimura2
Updating app kkimura2 in org (IBM ID) / space dev as (IBM ID)
OK

Uploading kkimura2...
Uploading from: /tmp/php
17M, 2296 files
  :
  :
OK

requested state: started
instances: 1/1
usage: 512M x 1 instances
urls: kkimura2.ng.bluemix.net

     state     since                    cpu    memory          disk
#0   running   2014-03-27 05:39:23 PM   0.0%   12.7M of 512M   112.2M of 1G

このコマンドでは -b オプションでベースとなる機能(この例では PHP と HTTPD)のコピー元を指定しており、そこに用意されたモジュールと定義されたスクリプトに従って PHP サーバーイメージが作られていきます。Cloud Foundry ではこういったサーバーを Build Pack というツールで作成することができるので、こうしたコミュニティによる機能拡張もできるようになっているのでした。Build Pack についてはまた別の機会で触れたいと思っています。

これで PHP のアプリケーションサーバーが作られ、起動し、そのドキュメントルートには phpMyAdmin と wp(WordPress)が用意された状態になっているはずです。

では早速 phpMyAdmin を使ってみましょう。http://ホスト名/phpMyAdmin/ にブラウザでアクセスしてみます:
2014032708


おお! で、これもメモしたユーザー名とパスワードを指定してログインしてみると、、、
2014032709

 
おおお!!! これでこの画面から MySQL のテーブルを作ったり、データを CSV からインポートしたり、逆にエクスポートしたり・・・なんて操作も可能になりました。個人的に慣れたコマンドラインのインターフェースとは違いますが、GUI はやはり便利ですね。

またもう一つの PHP アプリである WordPress にもアクセス(http://ホスト名/wp/)してみました。こちらもちゃんと動いてますね:
2014032710


BlueMix 環境での DB 管理方法を調べていたら、PHP アプリの動かし方まで理解できました~、の巻♪
 

このページのトップヘ