SpringとCloud Foundryに見る、抽象化による開発体験の向上
Session2は、ヴイエムウェア株式会社 ソリューション技術本部 ディベロッパーアドボケイト 柳原 伸弥氏による「SpringとCloud Foundryで抽象化する世界-すべてをシンプルにするVMwareのソリューション-」。開発者がコーディングに集中できるようにするため、VMwareが提供しているPaaSであるTanzu Application ServiceとSpringについての解説が行われた。
柳原氏は冒頭、VMwareの姿勢を示す言葉として「Abstract things and make things simple.(物事を抽象化し、シンプルにする)」を掲げた。
VMwareといえば、vSphereに代表される仮想化ソリューションが有名だが、その目的は物理的なコンピューターリソースの抽象化によって業務を楽にすること。VMwareは、インフラだけでなく、アプリケーションやミドルウェアについても抽象化してシンプルにしていこうと考え、開発生産性やセキュリティの向上に貢献したいとしている。
アプリケーションの抽象化としては、JavaのアプリケーションフレームワークであるSpringが挙げられる。1996年に登場したJavaは1999年にサーバーサイドの仕様J2EEが提供された。そして、J2EEの複雑さに対応するべく2004年に登場したのがSpringだ。
通常のJavaのアプリケーションでは、アプリケーションコンポーネントが別のアプリケーションコンポーネントのインスタンスを作成するという処理があるが、このインスタンスの制御をSpringに任せることができる。認証やロギング、モニタリング、例外処理などの関心事も分離して必要に応じたマッチングかでき、アプリケーションサーバーを不要とするSpring Bootの機能によってコンテナとの親和性も高い。
ミドルウェアの抽象化としては、マルチクラウド対応のPaaSであるVMware Tanzu Application Serviceを提供している。これは、 Cloud Foundry Application Runtimeなどのアプリケーション向けレイヤーと、インフラストラクチャーのレイヤーで構成される。
Cloud Foundry Application Runtimeでは、ソースコードを「cf push」コマンドで実行したら、あとはプラットフォームに任せればよい。言語の判定やコンテナ化、レジストリ管理、ネットワーク設定、ログ管理設定、バックエンド連携など必要な処理・設定が自動で展開されるようになっているからだ。アプリケーション開発者はソースコードだけに専念すればいいのだ。
インフラ側の運用保守の自動化には、Cloud Foundry BOSHがあり、パッケージ、プロビジョニング、デプロイ、そしてオブザーバーアビリティ、アップグレードなど、セキュリティ運用に関わるタスクを自動化する。しかも、マルチクラウド環境でも利用できる。
柳原氏は最後に「Azureのうえでも非常に多岐にわたったインテグレーションができるようになっています。 AzureとTanzuの製品のインテグレーション、非常に多岐にわたるサービスの、可用性であるとか価値といったものが出てくると思いますので、これからもこのコラボレーションについては見逃さずにいただければというふうに思います」とコメントした。
寺田佳央氏が求めていた、Kubernetesをシンプルにする技術とは
続いては、マイクロソフト・コーポレーション Developer Relation Sr. Cloud Advocate 寺田佳央氏による「面倒な運用・管理はもう嫌だ!! 迅速な開発と安心してサービス提供が可能なプラットフォームAzure Spring Cloud Enterprise Tierのご紹介」。Kubernetesを活用するうえでの苦労を無くし、開発者がよりソフトウェア開発に集中できるプラットフォームについて紹介された。
「最初に断っておくと、Kubernetesはすばらしい技術だ」寺田氏はこう述べながらセッションがスタートした。従来イチから構築・構成が必要なものを、コンテナを利用して容易に実行できる。寺田氏もそのすばらしさに感銘を受け、いち早く飛びついた1人だ。それゆえ、Kubernetesのすばらしさをよく知るとともに、苦労も経験したという。
Kubernetesを活用する難しさには具体的にどのようなものがあるのか。まず一つは、本番環境で動かす際に考慮すべき要素が多いこと。Hello worldレベルのサービスを構築するのは簡単だが、CPUやメモリ、ネットワーク、無停止更新、可用性、セキュリティなど、本番環境で使うためにはさまざまな要素が関わってくる。次に進化が早いこと。3~4か月に1回、新バージョンが公開される度に、新機能や変更点、どのような設定で動かなくなるか、などをキャッチアップしなければならない。そして、「ハマる」ことが多いこと。いわゆる「YAMLの壁」をはじめ、バージョンアップの失敗で動かなくなる、スケールで失敗する、既存の設定で動かなくなるなど。これらは実際、寺田氏も「ハマった」ポイントだ。
また、アーキテクチャや将来のメンテナンス性なども考えると、すぐに再構築できる「廃棄容易性」も考える必要もある。そうなるとシステム構築もしっかりと行わなければならず、Kubernetesを活用した開発自体に集中することができない。寺田氏は、同じような状況に陥った際、こうしたKubernetesの難しさを簡単にする技術が生まれると予想していたという。
それが現実になったものが「Azure Spring Cloud」だ。誤解を恐れずに言えば、Kubernetesを完全に隠ぺい化した技術といえる。例えば、YAMLによる定義ファイルに触れる必要も無ければ、バージョンアップやパッチの適用、更新も触らなくてよい。
もちろん、その分利用料金はかかる。よって、Kubernetesに精通している、ノウハウがある、技術を身に付ける自信があるといったエンジニアはKubernetesをそのまま利用したほうがよいだろう。しかし、マイクロサービスなど、Kubernetesがもたらすメリットを重視したり、Kubernetesに精通しているエンジニアが少なかったりといった事情がある場合には有効な選択肢の一つになる。詳細は寺田氏がYouTube上でデモを公開しているので、気になる読者は覗いてみてほしい。
加えて、昨年発表された「Azure Spring Cloud Enterprise」についても説明された。今年2月次点ではパブリックプレビューの段階で、日本リージョンもまだ選択できないが、Azure Spring Cloudで使えるJavaと.NETに加えて、Node.jsやPython、Goも使うことができる。また、マネージドサービスとして商用Tanzu製品のサービスを利用することもできる。今後は一般提供に向けて使えるサービスが広がっていくことも期待される。
「Microsoft Learn for JavaにはAzure Spring Cloudのモジュールもあります。実際に手を動かしながら学べるコンテンツになっていますので、ぜひ楽しみながらJavaのアプリケーションをAzure上で動かしてください」と言い、寺田氏はセッションを締めくくった。