使いやすさ、オープンソースベース、ゼロスケール――「開発者ファースト」のアプローチ
Kubernetesランタイムとしての「IBM Cloud Code Engine」の魅力とは
2021年08月02日 07時00分更新
2021年3月31日(日本時間では4月1日)からグローバルで一般提供が開始された、IBMのフルマネージドKubernetesランタイム「IBM Cloud Code Engine」。すでにメガクラウドのほとんどがKubernetesのマネージドサービスを提供しているなかにあって、後発ともいえるIBM Cloud Code Engineにはアプリケーション開発者や運用担当者にとってどんなアドバンテージがあるのだろうか。
本稿では、6月29日に日本IBMが報道関係者向けに行ったIBM Cloud Code Engine(以下、Code Engine)の説明会の内容をもとに、同プロダクトの特徴を眺めていきたい。
IBM Cloud Code Engineが備える3つの特徴
日本IBM クラウド事業本部 アドバイザリアーキテクト 佐藤光太氏は、Code Engineの特徴として以下の3点を挙げている。
・アプリケーションコード、バッチジョブ、ファンクション、コンテナを1つのサービスで実行できる
・インフラ管理やクラスタ管理なしにコードを瞬時にデプロイできる
・ゼロスケールによって、真の意味でコードが実行されているときだけ支払いが発生する
これらのポイントだけを見ると、他のクラウドベンダが提供するマネージドKubernetesサービスとあまり大きな違いはないように見える。いずれのKubernetesサービスも、アプリケーション開発者にとっての最大のハードルであるKubernetesの煩雑な運用、たとえばクラスタのバージョン管理、ネットワーク設計、CI/CD、アプリのコンテナ化、ワーカーノードの管理、セキュリティ、スケジューリングといったインフラ管理にまつわる諸々の作業をプラットフォーム側で肩代わりすることを最大のウリにしている。開発者がインフラにとらわれることなく、アプリ開発“だけ”に集中できる環境、それがマネージドKubernetesの存在意義ともいえる。
それでは、数ある既存サービスと比較してCode Engineを導入するメリットはどこにあるのだろうか。あらためて佐藤氏が挙げた3つのポイントを見直してみよう。
●アプリケーションコード、バッチジョブ、ファンクション、コンテナを1つのサービスで実行できる → ホスティング環境としての使いやすさ
Code Engineは、すでに作成済みのコンテナイメージはもちろんのこと、ソースコードやファンクション、バッチジョブなどを開発者がイメージ化することなく、Code Engineにそのまま渡すだけでデプロイできるという特徴を持つ。
たとえばソースコードであれば、Gitリポジトリ経由でCode Engine側に渡すとCode Engineがコンテナイメージのビルドを肩代わりする。また、クラウドネイティブなモダンアプリケーションの場合、HTTPリクエストやイベントメッセージをトリガにアクションが実行される(オブジェクトストレージにファイルがアップされたら自動的にデータを取得する、など)ことが多いが、Code Engineはこれに加え、時間ベースで開始/終了が決まっているジョブや手動で事前定義されたタスク(ETLワークロード、AIデータ処理など)といったバッチジョブを幅広くサポートする。
つまり、あらゆるワークロードを同一のプラットフォーム上で動かすことが可能なので、開発者はワークロードごとにホスティングプラットフォームを変える必要がない。
また、アプリケーションの負荷に応じて自動でスケールできるオートスケーリング機能も備えており、モダンアプリケーションのホスティング環境として、シンプルで一貫した使いやすさを追求している姿勢がうかがえる。「ひとつのプラットフォームであらゆるワークロードにまとめて対応しており、ユーザ(開発者)に寄り添ったサービスであることにフォーカスしている」(佐藤氏)。
●インフラ管理やクラスタ管理なしにコードを瞬時にデプロイできる → 「Knative」をコアにしたクラウドネイティブなオープンソースアーキテクチャ
通常、Kubernetesにアプリケーションをデプロイするには、コードを記述したあとにコンテナイメージを作成/登録し、Kubernetesクラスタを構築してアプリをデプロイ→公開という流れになるが、前述にもあるようにCode Engineには「最低限、アプリケーションコードだけ用意すれば、アプリをコンテナ化して動かすことができる」という特徴がある。したがって、開発者はクラスタの構築やネットワーク設定も行う必要がない。
Code Engineにこれらのサーバレスラインタイムとしての機能を提供するのが、「Knative」「Istio」「Tekton」などKubernetesと親和性の高いクラウドネイティブなオープンソースコンポーネントだ。以下、Code Engineで採用されているおもなオープンソースプロダクトを挙げておく。
・Knative … イベントドリブンなサーバレスアプリケーションをKubernetes上でビルド/実行するのに必要なコンポーネントセット(Serving/Build/Eventing)を提供するプラットフォーム
・Istio … マイクロサービスの接続や制御、モニタリングなどをサポートする分散型のサービスメッシュで、Knativeと一緒に使われることが多い
・Tekton … KubernetesネイティブなCI/CDパイプラインを構築するフレームワーク
・Paketo Buildpacks … アプリケーションコードをコンテナイメージに変換する「Buildpacks」の実装のひとつでNode.js、Java、Goなど汎用的なプログラミング言語をサポート
・Kaniko … Dockerfiileから特権モードを必要とすることなくコンテナイメージをビルドできるツール
このなかでもとくにCode Engineにおける重要なコンポーネントとして機能しているのがKnativeで、ベースとなるKubernetesプラットフォームの上で動作し、コンテナのデプロイやオートスケール(Serving)、ソースコード→コンテナイメージへの変換やそのパイプライン/テンプレート化、イベントドリブンアーキテクチャの実現(Eventing)をサポートする。Code Engineの特徴である多種多様なワークロードへの対応はKnativeのケイパビリティに負うところが大きいが、KnativeもKubernetes同様に開発者が自分で運用するには負荷が高いことから、フルマネージドサービスであるCode EngineからKnativeの機能を利用できるメリットは大きい。
●ゼロスケールによって、真の意味でコードが実行されているときだけ支払いが発生する → ワークロードが動いている分だけの課金
パブリッククラウドを構成するもっとも基本的なコンセプトのひとつが“従量課金”、使った分だけを支払うというものだが、Code Engineの場合はアプリケーションの利用がない場合は「ゼロ台」にスケールダウンできることを特徴としている。つまり、アプリケーションがゼロにスケールダウンされたり、ジョブやビルドが実行されていない場合はリソースの消費がないと判断され、料金が発生しない仕組みとなっている。
また、Code Engineには1カ月単位の無料利用枠が用意されており、小さなアプリケーションやジョブであれば十分に実行可能な範囲だ。アプリケーションやプロジェクトの規模に関係なく、料金的に使いやすいことはランタイムプラットフォームとして大きなメリットとなる。また、大規模なクラスタを必要としない小さなアプリケーションやジョブを、適切なリソースで動かすことができるのもマネージドサービスならではの良さといえる。
* * *
Kubernetesがコンテナ管理のデファクトスタンダードとしての地位を獲得したのは、2017年ごろだったと記憶している。以降、Kubernetesエコシステムは拡大を続け、クラウドネイティブなモダンアプリケーションの実行環境といえばKubernetesが一般的になりつつある。佐藤氏はKubernetesの特徴として、次の3点を挙げている。
・コンテナを本番環境で使うための機能群が豊富に揃っている
・マニフェストファイルに宣言されている“あるべき姿”の実現に向けて自律的に動く
・開発に主要なITベンダが数多く参加し、オンプレミス/クラウドを問わずどこでも動く
こうしたポイントがオープンスタンダードを指向するエンタープライズITのトレンドとうまくマッチしたといえるだろう。
その一方でKubernetesの煩雑なオペレーションは、インフラスキルをもつ人材が少ない企業にとっては導入の大きなハードルである。クラウドベンダが提供するフルマネージドなKubernetesランタイムサービスはこうしたニーズから生まれたものだが、その中にあってIBM Cloud Code Engineは、さまざまな点で「開発者に寄り添ったサービス」(佐藤氏)であることを徹底しているようだ。開発者が用意するものはアプリケーションコードやコンテナイメージだけ、という“開発者ファースト”なアプローチが今後も継続していくことを期待している。