Helium3 Techは先頃、アプリケーションスタックをコードとして提供可能にする、オープンソースのクラウドネイティブアプリケーション開発プラットフォームHeighlinerをローンチした。複雑なインフラストラクチャの詳細を、可読性のある構成ファイルに抽象化することにより、バージョン管理、再利用、共有が可能になる。
開発者中心の考えから、Heighlinerは、一般的なプログラミング言語やフレームワークをカバーする構成済スタックを数多く提供している。一方で、内部的にはDaggerを使用しているので、スタックのあらゆる面をカスタマイズすることも可能だ。
Heighliner開発チームのメンバであるWei Wang氏に、Heighliner Stackの概要とビジョンについて説明してもらった。
InfoQ: アプリケーションを開発して提供する上で、どのような課題や問題点があると思われていますか?Heighlinerはそれらをどのように解決するのでしょうか?
Wei Wang: ”アプリケーションの開発と提供”という表現は極めて汎用的で、ソフトウェアエンジニアリングのライフサイクルのほぼすべてを網羅しています。Terraformは、インフラストラクチャの運用とメンテナンスに関する問題を解決して、そのIaC(インフラストラクチャ・アズ・コード)アプローチの可能性を大きく広げました。その一方で、クラウドネイティブ時代のスケーラブルでエラスティック、かつセキュアなアプリケーションを開発するという大きな課題に開発者が直面する、という状況は変わっていません。多くの開発チームが、自身のアプリケーション開発および提供システムを構築し、さまざまなツールをひとつのレイヤにまとめ上げる、という作業に苦労しているのです。
クラウドネイティブなアプリケーションを開発する場合の、一般的なテクノロジスタックのテーブルを見てみましょう。
組み合わせを難しくしているのはツールチェーンです。多くの場合、これは企業のインフラストラクチャチームやSREの責務なのですが、アーキテクトのコストが高いため、中小規模の企業がこれらのツールを導入するのは容易ではありません。
”スタック・アズ・コード(Stack-as-Code)”は、アプリケーションの開発と提供のワークフローすべてをコードで単純に記述しようという、まったく新しい概念です。アプリケーションの定義、CI/CD、レジストリ、リモート開発、デバッグ、監視、警告、ダッシュボードなどを含んでいます。単純なパラメータをいくつか与えるだけで、クラウドネイティブの開発と提供に関するベストプラクティスの完全セットを立ち上げることができるのです。
InfoQ: スタック・アズ・コードの定義をどう理解すればよいのでしょうか?
Wei Wang: スタック・アズ・コードを理解するには、Stackの定義を理解する必要があります。Stackを初期化すると、先程説明したような言語フレームワークと完全なツールチェーンが生成されて、事前定義された構成に接続されます。初期化が完了すれば、エンドツーエンドの開発ワークフローと提供ワークフローがセットアップされるのです。
スタック・アズ・コードを使用すれば、これらのツールチェーンはモジュールとして、Heighliner内部にカプセル化されます。スケーラビリティの観点から、Heighlinerでは、Googleがこのようなモジュールを定義するために開発したCUE言語を使用しています。このような方法によって、ツールの詳細を気にすることなく、宣言的な方法でビルディングブロックの組み合わせを表現することが可能になっています。一方で、新しいスタックをカスタマイズするのも簡単です。
詳細はスタックの例をご覧ください。次に、HeighlinerがCUEを使って、これらのツールをどのように宣言し、リンクしているのかを見てみましょう。
scaffold: scaffoldfactory.#Instance & { input: scaffoldfactory.#Input & { ...... repository: [ { name: "shop-backend" type: "backend" framework: "spring" ci: "github" registry: "github" }, { name: "shop-frontend" type: "frontend" framework: "vue" ci: "github" registry: "github" }, { name: "shop-deploy" type: "deploy" framework: "helm" }, ] addons: [ { name: "prometheus" }, { name: "loki" }, { name: "nocalhost" }, { name: "istio" }, ] } } cd: cdfactory.#Instance & { input: cdfactory.#Input & { provider: "argocd" ...... } }
この例では、Springフレームワーク用に”backend”リポジトリを、VUEフレームワーク用に”frontend”ポジトリを、それぞれ初期化しています。2つのサービスのデプロイにはHelmを使用します。
さらに、CIとしてGitHub Actionを、イメージリポジトリとしてGitHub Packageを、監視およびログシステムとしてPrometheusとLokiを、リモート開発用にNocalhostを、サービスメッシュとしてIstioを、それぞれアプリケーションで使用することも定義しています。最後に、GitOpsワークフローの生成にArgoCDを使うことを定義しています。これらのツールはすべて、宣言的な方法で別の任意のツールに置き換えることができます。例えば、イメージリポジトリをGithub PackageからHarborに代えることができるのです。
CI/CDフローやGitOpsワークフローの構築方法、監視メトリクスやダッシュボードの生成方法について、その詳細を考える必要はありません。Stackがすべてを引き受けて、あなたの代わりに用意してくれます。初期化が完了すれば、あとはビジネスコードを書けばよいのです。
InfoQ: Heighliner StackはKubaVelaといくつか共通点があります。InfoQでも以前、KubeVelaチームにインタビューしたことがあるのですが、2つの違いや相互運用性について説明して頂けますか?
Wei Wang: KubeVelaはOAMをベースとして、ハイブリッドやマルチクラウド環境全体を対象として、アプリケーションを容易にデプロイし、運用できるように設計されています。Heighliner Stackのビジョンはもう少し広く、アプリケーションの開発、提供、運用に関わる開発者の問題解決を目標にしています。その中核にあるのは、一般的なプログラミング言語やフレームワークをカバーした、数多くの構成済スタックの提供です。HeighlinerはKubeVelaの代替ではありません。Heighliner Stack上で、アプリケーション定義ツールとしてKubeVelaを使うことができます。
InfoQ: Heighliner Stackのミッションとビジョンについて教えてください。
Wei Wang: クラウドネイティブ開発者の敷居を下げて、クラウドネイティブアプリケーション開発の使いやすさを提供することです。
Web開発の初期においては、LAMPがWebアプリケーション開発の障壁を大幅に低くしてくれました。Kubernetesとオペレーティングシステムを比べると、クラウドネイティブの分野にはまだアプリケーション層のSDKが欠けていることが分かります。Highliner Stackは、クラウドネイティブなオペレーティングシステムのアプリケーション層すべてにSDKを提供するのです。複雑な設定を行わなくても、ほんの数分で、クラウドネイティブなアプリケーションを立ち上げられるようになります。
Heighlinerの詳細については、こちらのブログで見ることができる。Quick Startやデモを使って、Heighlinerを始めてればよいだろう。