クラウドネイティブなサーバーレスプラットフォーム「Fn Project」
「Fn Project」は、昨年のJavaOne 2017で発表された、Oracleが開発するサーバーレスプラットフォームです。Day 2キーノートの後、その開発の指揮を執るChad Arimura氏(VP Software Development、Oracle)にお話をうかがう時間をいただきました。発表から1年が経ち、普及に向けた戦略をどのように考えているのか。この場では、その詳細をお聞きしたインタビューに加え、Fn Projectの簡便性が伝わるデモを実施いただいています。順にご覧ください。
Fn Projectとは
前提としてFn Projectについて簡単に説明しておきます。Fn Projectとは、Oracle社が提供するサーバーレスプラットフォームです。多くのプロジェクトが並走していますが、以下4つのコンポーネントが主要な構成要素です。
- Fn Server:開発者がファンクションをさまざまな環境上で簡単にビルド、デプロイ、スケールできるというコンセプトのFunction-as-a-Serviceシステム
- Fn Load Balancer:Fn Serverの分散配置を可能にする。ホットなファンクションの稼働ノードにトラフィックを流して処理を高速化したり、特定のファンクションへのトラフィック増加時の負荷分散を行うなど
- Fn FDK’s:Javaをはじめとしたさまざまな言語向けのファンクション開発キット(FDK、Function Development Kit)
- Fn Flow:さまざまな言語で記述されたファンクションへハイレベルなフロー処理(並列処理、ファンクション同士の連結、エラー処理など)を構築する
Fn Projectがとる「アンチ・ベンダーロックイン」という戦略
Fn Projectの特徴は、まず100%のOSSであるということ。そしてそれによってベンダーフリーであるということです。説明のためにこのプロジェクトの経緯からお話ししましょう。私は18か月ほど前に、当時率いていたIron.ioという会社がOracleと一緒になったことで、自分のチームとともに現職にジョインしました。その会社で開発していたIronFunctionsというプロジェクトをフォーク[1]したのがこのFn Projectです。会社が一緒になっても、これまで通り完全なOSSであるという点に変更はなく、Oracleとは完全に独立した体制をとっています。ですので、Fn ProjectはOracle Cloudに限らずどのクラウド上でも動きます。また同様にオンプレミスの環境でも使用できます。
[1] フォーク:元のソフトウェアのソースコードから分岐して、別の独立したソフトウェアを開発すること
もうひとつの特徴は、コンテナネイティブ[2]であり、さらにそれが簡単に使えるという点です。Dockerコンテナの中に入れることができるものであれば、ファンクションになります。そしてファンクションを形成するためのコマンドはとてもシンプルになっていますので、初めてでも簡単に使い始めることができるでしょう。こちらはデモでお見せします。
[2] コンテナネイティブ:この文脈では「コンテナ環境の利用を前提とし、それに最適化されている」という意味合い
これまでに述べた特徴。つまり、アンチ・ベンダーロックインであり、コンテナに入れてだれでも使えるということ。これが普及に向けた1つ目の戦略です。
それに加えて2つ目の戦略としては、他のOracle製品やサービスと統合していくということです。来年度に、「Oracle Functions」というマネージドサービスの提供を予定しています。こちらはアプリケーション開発者にとってFn Projectと全く体験ができるものです。またそれに加え、Oracleの各種サービスからのイベントをトリガーに、別のファンクションを起動することがスムーズにできるようになります。
例えば、Oracle HCM Cloud(人的資源マネジメントサービス)を使用しているという例をとりましょう。新しい従業員が来たら、HCMに登録されます。その登録をトリガーに、Fn Projectを介して別のOracleサービスへ処理をつなげることができます。そしてそのためにディベロッパーが行う作業はとても簡単でスムーズです。このように、色々なアプリがFn Projectによって交信できるようになります。このOracle Functionsは、2019年春の正式リリースを目指しています。
言語サポート状況も昨年から進展しています。ファンクション開発キットにおいて、昨年の発表当初はJavaのみの対応でした。しかし現在はJava以外にも、Ruby、Python、Node.js、Goといった主要な言語をサポートしています。また、コンテナに入るものであれば、どんな言語で作られたものでもファンクションにできるのです(例えば、COBOLのようなレガシー言語でも)。もちろん、Javaはとても重要な言語であると認識していますので、最善の努力をしてサポートしています。例えば、GraalVMチームがとても努力し、非常にローレイテンシーなランタイムをJavaファンクション用に提供しています。
使っていただく際は、fnproject.ioというサイトがスタートポイントとなります。今すぐにでもお試しできる準備がととのっていますので、ぜひ触ってみてください。
クラウドとローカルを等しく扱う――Fn Functionsデモ
インタビュー後に実施いただいたのはシンプルなデモですが、Fn Functionの手軽さが率直に伝わる内容でした。写真を追って見ていきましょう。
- ①「fn start」開始
- ②「fn use context local」事前設定済のローカルというコンテキストを指定
- ③「fn init --runtime java --trigger http hello」初期化(ランタイムはJava、トリガーはHTTP、ファンクション名はhello)
- ④「fn deploy --app demo --local」ローカルにデプロイ。
- ⑤「fn invoke demo hello」これでhelloファンクションを呼び出し。
- ①「fn use context oci-phx」コンテキストをクラウドに変更
- ②「fn deploy --app demo」クラウド環境へデプロイ
- ③「fn invoke demo hello」ローカルの時と同じ呼び方でクラウド環境を実行
上記までの通り非常にシンプルで、ローカルとクラウドを意識せず使用できる点が開発者にとって実に扱いやすい印象を受けます。さらに、実行できるクラウド環境も、実行する言語も選ばないということで、プロジェクト内外の変化に対応しやすいアプリケーションの構築につながりそうです。
Day2 Keynote及びFn Project総評
Day2 Keynoteは、Javaではなく「クラウドネイティブ」をテーマに据え、まさに総合技術カンファレンスへ移った象徴と言える内容でした。ただし、特に前半はあくまでCNCFというコミュニティに関するプロモーションの域を出ず、イノベーティブな発表がなかった点は残念、というのが率直な感想です。Javaという言語を実装レベルで展開した初日のKeynote(第1回レポート参照)との粒度の差も大きく、戸惑った聴講者が多かったように感じます。初年度ということで手探りであったのかもしれませんが、おそらく各国の聴講者から同様のフィードバックがあることが予測されますので、次回はもう一歩技術的に踏み込んだプレゼンが盛り込まれることを期待しましょう。
Fn Projectについては、ベンダーフリーかつロケーション(クラウド/オンプレミス)フリーというコンセプトが明確であり、使いやすさも重視されているため、ユーザーとして今後に期待が高まるOSSであると感じました。CNCFがホストするプロジェクトになれば進化は加速し、またどのように市場に受け入れられるかも明確化してくると思われます。正式リリース後の動向に注目していきましょう。