OSSを利用したPaaSサービスを構築
本セッションのテーマは、NTTコミュニケーションズがOSS(オープンソースソフトウェア)を利用してクラウドサービスを作った際の試行錯誤や効果の紹介。最初に川口克則氏が、2012年12月にリリースされたCloudn PaaS開発における技術的な話題やプロセスなどについて話し、続けて野上俊介氏が特徴とロードマップを紹介する、という構成で行われた。
Cloudn PaaSは、OSSであるCloud Foundryを利用して構築された。Cloud FoundryはRuby1.9系で実装されているPaaSで、数多くのランタイム、フレームワークに対応している。またIaaSに依存しないため、Amazon EC2やCloud Stackなどで使え、ローカルの1ホスト上でも動かすことができるのが特徴となっている。
Cloud FoundryはOSSであるため、誰でも、どこにでもPaaSを作ることができる。また、ある一定の条件を満たせばCore Compatibleというバッジを付けることも可能だ。現在、認定されているのはNTTコミュニケーションズを含めた5社で、それぞれでデプロイされたアプリケーションの互換性は高いと考えられる。
Cloudn PaaSは、NTTコミュニケーションズが提供するCloudStackベースのCloudn Compute上で動いている。利用事例としては、スポット情報まとめサービス「pinQA(ピンカ)」、アンケートを作るPHPソフトウェアをサービス化している「LimeSurvey」、業務アプリケーションの「intra-mart」などが挙げられる。2013年3月末からはオンラインサインアップも開始され、無料のサービスも提供予定だ。
Cloudn PaaSの開発が始まったのは2011年冬。川口氏は、2012年12月のリリースまで、どのようなことで悩み、どう解決していったのか、3章構成で紹介した。
第1章の期間は2011年冬から2012年春で、開発チームは5名だった。まず「Cloud Foundryというものがあるらしい。それを動くようにしよう」から始まった。
当時のCloud Foundryは、単一のホストへのデプロイはChefを使ったツールで簡単にできたが、複数ホストへデプロイするには、それぞれ手動で設定を変える必要があった。それでは社内でデモもできない。そこでCapistranoという便利なツールを使い、複数ホストにデプロイするツールを作成した。
開発チームに求められたのは、多いときには1日に10コミットされるほど活発なOSSであるCloud Foundryへの追随だ。そこで『アジャイルサムライ』を読んだり、デブサミで西村直人さんの「今そこにあるScrum」という発表を聞いたり、懇親会で色々な人から教えてもらったりして、知識の蓄積と情報収集を懸命におこなった。
まず、自分たちで作るパッケージデザインとエレベータピッチを作り、アナログタスクボードを用意し、ペアプロなどをやりやすいようにフリーアドレス化した。ミーティング系では、デイリースクラムを朝9時45分から行い、振り返り会を週1回、計画ミーティング系を月初に実施した。
ツールとして、チケット管理にRedmine、CI(継続的インテグレーション)にはJenkins、コミュニケーションはIRC、ソースコード管理はGithubを整備した。道具がほぼ揃ったところで、2012年2月1日からクローズドでβサービスを始め、社内や協力会社に使い始めてもらった。
開発と導入サポートでのトラブルと対策
続く第2章は、2012年春から秋にかけての時期。「開発と導入サポート」がテーマとなる。この時期、開発チームは9名に増員された。この時期に行われたことは、大きく分けて4つ。次々に更新されるupstreamに合わせたサービスのアップデートと、顧客のアプリをPaaSに載せるためのサポート、バグフィックスと機能追加に応じたパッチの送付、だんだん陳腐化していく開発のやり方の検査と見直しになる。
このupstreamへの追随で、トラブルが発生した。最新のupstreamを取り込み、Hello Worldは動いたのだが、なぜか数時間たつとMySQLのインスタンスが消えてしまう。そこでソースコードをチェックすると、不要なインスタンスを処理するはずが、常に全部選択して消すようになっていた。「OSSできちんとCIが回っているので大丈夫だと思っていたが、それが入っていたとしても正しく動くとは限らないことが身にしみて分かった」(川口氏)。
そこで行われた対策は3つ。stagingに上げた後、しばらく状況を見る。きちんとソースコードを読む。問題が起きたら追加でテストを書き、2回目は起こさないようにする。
続いて顧客へのPaaS導入サポートだが、今まで作っていた環境をそのまま乗せても動かないことが結構ある。その場合は、プラットフォームで対策するか、アプリで対策するかの選択になる。
例えばある顧客では、分散メモリキャッシュサーバのmemcachedが必要だったのだが、当時はサポートされていなかったので追加した。他の事例では、JavaベースのWebアプリケーションサーバResinをサポートした。ただこちらは現状、非公開となっている。そもそも需要があるかが分からないし、必要なライブラリ変更を英語で説得するのが大変だからだ。
経験を積み、開発が分かってくると、「Core Compatibleでありつつ、国内の顧客の要望にも応えられる」というのが、Cloudn PaaSの価値だということが、チーム内で分かってきた。そしてOSS化は、社内手続きなどいろいろあるのだが、それらもやる気次第でできることも分かってきた。
ただ、同時に問題も出てきた。例えば、テストが増えたのはいいが、時間がかかる。そこでJenkinsのSlaveを使い、並列実行することにした。ここで大活躍するのが自社で持つIaaSで、fogやknife-cloudstackで操作することで、割と簡単に自動化できている。
また、作業が属人化してきたため、ペア作業の時間を週に2時間行うことにした。その内容を1チーム5分でライトニングトークし、Wikiに書いて情報を共有している。さらにコードレビューを強化するため、Githubのpull requestを使う体制に移行して、必ずオーサー以外がマージするようにした。
飽きが出てきた振り返りへの対策では、やり方を変えてKPT以外のことを試している。また、毎週金曜日は定例ミーティングを実施し、チーム全体で振り返りを行うことにした。
商用サービスの開始は2012年12月3日であったが、リリース目標をしっかり守ることができた。2012年冬からの第3章は、成果の出たやり方を組織に広げていくことがテーマだ。現在行っているのは、隣のプロジェクトとの連携であり、隣の人に火を点けることだ。
川口氏は、モチベーションを高め、ネットワーク事業だけでなく、クラウド事業でも価値を創出するために行動することにした。そこで始めたのが社内勉強会。隣のプロジェクトの人と仲良くなったりと、少しずつ前進している。
最後に川口氏は2つのアクションを求めた。まず、「いいな! と思ったら、ぜひやってみる」。そして「もっと良い方法があれば教えて欲しい」というものだ。
Cloudn PaaSの4つの特徴とロードマップ
続けて野上俊介氏が登壇。Cloudn PaaSの特徴と今後のロードマップを紹介した。特徴は大きく分けて4つ。「OSSの積極採用」「ベンダロックインからの解放」「低コスト」「各種Cloudnサービスとの連携」になる。
OSSの積極採用だが、そこで得られた特徴としてマルチ言語、マルチサービスに対応している。
また川口氏から紹介されたように、NTTコミュニケーションズはCloudFoundry Coreに加入した。これは参加条件として、Java、node.js、Rubyの指定バージョン、データベースの指定バージョンに対応することが強く推奨されている。このためCloudFoundry Coreに参入しているプロバイダ間は非常に容易に移行が行うことができる。加えてプロバイダ独自の対応も可能で、例えばCloudn PaaSは、Rubyの1.9.3等に上位互換で対応している。
次に低コスト。Cloudn PaaSは、業界最安値水準をめざす。料金プランはメモリサイズ別の従量課金で、128MBから8GBの7プランが用意されている。さらにキャップ制を導入し、概算で完全従量制と比較して、約3分の2の金額で使うことが可能になっている。
次のCloudnサービスとの連携は、以下の図を参照してほしい。
今後の展開だが、現在、一部パイロットユーザに提供中Cloudnサービスとの連携を2013年3月末に一般向けとして提供開始する予定だ。また、同時期にオートスケール、マルチ・アベイラビリティ・ゾーン、海外を含むRegionの追加、監視項目の強化等、新機能も提供開始する。
最後に野上氏は「今後も多くの機能を実装していく」と宣言し、セッションを閉じた。
NTTコミュニケーションズ株式会社
クラウドサービス部 ホスティング&プラットフォームサービス部門
Email: cloudnpaas-marketing-cl@ntt.com
Cloudn ホームページ